├── .gitignore
├── README.md
├── index.html
├── index.js
├── main.js
├── package-lock.json
└── package.json
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # BrowserExec
2 |
3 | ⚠️ This project is in a very early stage and should not be used in production
4 |
5 | ## What
6 |
7 | This is a small library I hacked together. It aims to make it very easy to "connect" a browser like chrome to your Node.js project, and allows you to execute JavaScript in the browser context, without using libraries like puppeteer or selenium. These libraries can easily be detected by anti-bot solutions, a normal chrome browser not.
8 |
9 | ## Why
10 |
11 | This makes this library perfect for writing half-assed bypasses to anti-bot solutions like cloudflare, without solving all of the challenges entirely.
12 | This is especially useful for stuff like canvas fingerprinting, which cannot easily be "faked" or solved in Node.js
13 |
14 | ## How
15 |
16 | The Node.js context communicates with the browser using websockets. This means one browser instance can be used for a lot of concurrent tasks, making it relatively performant.
17 |
18 | You can either manually open the browser, or open it using command line arguments
19 |
20 | ```js
21 | const BrowserExec = require('browser-exec');
22 | const { exec } = require('child_process');
23 |
24 | // config
25 | const binaryPath =
26 | '/Applications/Google\\ Chrome.app/Contents/MacOS/Google\\ Chrome'; // different on windows or linux
27 | const host = 'localhost';
28 | const port = '9090';
29 | const debug = true;
30 |
31 | const executor = new BrowserExec(port, host, debug); // host and debug are optional. Default: localhost, false
32 |
33 | executor.listen();
34 | executor.onConnect = async () => {
35 | const res = await executor.exec('window.location.href');
36 | console.log('Result:', res);
37 | };
38 | exec(`${binaryPath} --homepage http://${host}:${port}`);
39 | ```
40 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | BrowserExec
8 |
9 |
10 | Ready to execute javascript!
11 | Websocket status:
12 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | module.exports = require('./main');
2 |
--------------------------------------------------------------------------------
/main.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const path = require('node:path');
3 | const crypto = require('node:crypto');
4 |
5 | function uuid() {
6 | return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) =>
7 | (
8 | c ^
9 | (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))
10 | ).toString(16)
11 | );
12 | }
13 |
14 | class BrowserExec {
15 | constructor(port, host = '', debug = false) {
16 | this.host = host;
17 | this.port = port;
18 | this.debug = debug;
19 |
20 | this.app = express();
21 | require('express-ws')(this.app);
22 | this.ws = null;
23 | this.connected = false;
24 |
25 | this.results = {};
26 |
27 | this.app.get('/', (req, res, next) => {
28 | if (this.debug) console.log('GET /');
29 | res.sendFile(path.join(path.join(__dirname, ''), 'index.html'));
30 | });
31 |
32 | this.app.ws('/', (ws, req) => {
33 | if (this.debug) console.log('Connected!');
34 | this.ws = ws;
35 | this.connected = true;
36 | this.onConnect();
37 |
38 | this.ws.on('message', (msg) => {
39 | const data = JSON.parse(msg);
40 | if (data.event === 'result') this.results[data.id] = data;
41 | });
42 | });
43 | }
44 |
45 | listen() {
46 | if (this.debug)
47 | console.log(
48 | `[+] listening on ${!!this.host ? 'http://' + this.host + ':' : ''}${
49 | this.port
50 | }`
51 | );
52 | this.app.listen(this.port);
53 | }
54 |
55 | onConnect() {}
56 | exec(code) {
57 | return new Promise((resolve, reject) => {
58 | const id = uuid();
59 | if (this.debug) console.log(`[+] Executing in browser (${id})`);
60 | this.ws.send(JSON.stringify({ exec: code, id: id }));
61 |
62 | const checkIfDone = () => {
63 | if (this.results[id]) {
64 | const res = this.results[id];
65 | delete this.results[id];
66 | if (res.result === 'error') reject(res.error);
67 | resolve(res.result);
68 | } else {
69 | setTimeout(checkIfDone, 100);
70 | }
71 | };
72 | checkIfDone();
73 | });
74 | }
75 | }
76 |
77 | module.exports = BrowserExec;
78 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "pkg",
3 | "version": "1.0.0",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "pkg",
9 | "version": "1.0.0",
10 | "license": "ISC",
11 | "dependencies": {
12 | "express": "^4.18.2",
13 | "express-ws": "^5.0.2"
14 | }
15 | },
16 | "node_modules/accepts": {
17 | "version": "1.3.8",
18 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
19 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
20 | "dependencies": {
21 | "mime-types": "~2.1.34",
22 | "negotiator": "0.6.3"
23 | },
24 | "engines": {
25 | "node": ">= 0.6"
26 | }
27 | },
28 | "node_modules/array-flatten": {
29 | "version": "1.1.1",
30 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
31 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
32 | },
33 | "node_modules/body-parser": {
34 | "version": "1.20.1",
35 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
36 | "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
37 | "dependencies": {
38 | "bytes": "3.1.2",
39 | "content-type": "~1.0.4",
40 | "debug": "2.6.9",
41 | "depd": "2.0.0",
42 | "destroy": "1.2.0",
43 | "http-errors": "2.0.0",
44 | "iconv-lite": "0.4.24",
45 | "on-finished": "2.4.1",
46 | "qs": "6.11.0",
47 | "raw-body": "2.5.1",
48 | "type-is": "~1.6.18",
49 | "unpipe": "1.0.0"
50 | },
51 | "engines": {
52 | "node": ">= 0.8",
53 | "npm": "1.2.8000 || >= 1.4.16"
54 | }
55 | },
56 | "node_modules/body-parser/node_modules/debug": {
57 | "version": "2.6.9",
58 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
59 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
60 | "dependencies": {
61 | "ms": "2.0.0"
62 | }
63 | },
64 | "node_modules/body-parser/node_modules/ms": {
65 | "version": "2.0.0",
66 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
67 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
68 | },
69 | "node_modules/bufferutil": {
70 | "version": "4.0.7",
71 | "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz",
72 | "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==",
73 | "hasInstallScript": true,
74 | "optional": true,
75 | "peer": true,
76 | "dependencies": {
77 | "node-gyp-build": "^4.3.0"
78 | },
79 | "engines": {
80 | "node": ">=6.14.2"
81 | }
82 | },
83 | "node_modules/bytes": {
84 | "version": "3.1.2",
85 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
86 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
87 | "engines": {
88 | "node": ">= 0.8"
89 | }
90 | },
91 | "node_modules/call-bind": {
92 | "version": "1.0.2",
93 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
94 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
95 | "dependencies": {
96 | "function-bind": "^1.1.1",
97 | "get-intrinsic": "^1.0.2"
98 | },
99 | "funding": {
100 | "url": "https://github.com/sponsors/ljharb"
101 | }
102 | },
103 | "node_modules/content-disposition": {
104 | "version": "0.5.4",
105 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
106 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
107 | "dependencies": {
108 | "safe-buffer": "5.2.1"
109 | },
110 | "engines": {
111 | "node": ">= 0.6"
112 | }
113 | },
114 | "node_modules/content-type": {
115 | "version": "1.0.4",
116 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
117 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
118 | "engines": {
119 | "node": ">= 0.6"
120 | }
121 | },
122 | "node_modules/cookie": {
123 | "version": "0.5.0",
124 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
125 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
126 | "engines": {
127 | "node": ">= 0.6"
128 | }
129 | },
130 | "node_modules/cookie-signature": {
131 | "version": "1.0.6",
132 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
133 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
134 | },
135 | "node_modules/depd": {
136 | "version": "2.0.0",
137 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
138 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
139 | "engines": {
140 | "node": ">= 0.8"
141 | }
142 | },
143 | "node_modules/destroy": {
144 | "version": "1.2.0",
145 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
146 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
147 | "engines": {
148 | "node": ">= 0.8",
149 | "npm": "1.2.8000 || >= 1.4.16"
150 | }
151 | },
152 | "node_modules/ee-first": {
153 | "version": "1.1.1",
154 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
155 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
156 | },
157 | "node_modules/encodeurl": {
158 | "version": "1.0.2",
159 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
160 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
161 | "engines": {
162 | "node": ">= 0.8"
163 | }
164 | },
165 | "node_modules/escape-html": {
166 | "version": "1.0.3",
167 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
168 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
169 | },
170 | "node_modules/etag": {
171 | "version": "1.8.1",
172 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
173 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
174 | "engines": {
175 | "node": ">= 0.6"
176 | }
177 | },
178 | "node_modules/express": {
179 | "version": "4.18.2",
180 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
181 | "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
182 | "dependencies": {
183 | "accepts": "~1.3.8",
184 | "array-flatten": "1.1.1",
185 | "body-parser": "1.20.1",
186 | "content-disposition": "0.5.4",
187 | "content-type": "~1.0.4",
188 | "cookie": "0.5.0",
189 | "cookie-signature": "1.0.6",
190 | "debug": "2.6.9",
191 | "depd": "2.0.0",
192 | "encodeurl": "~1.0.2",
193 | "escape-html": "~1.0.3",
194 | "etag": "~1.8.1",
195 | "finalhandler": "1.2.0",
196 | "fresh": "0.5.2",
197 | "http-errors": "2.0.0",
198 | "merge-descriptors": "1.0.1",
199 | "methods": "~1.1.2",
200 | "on-finished": "2.4.1",
201 | "parseurl": "~1.3.3",
202 | "path-to-regexp": "0.1.7",
203 | "proxy-addr": "~2.0.7",
204 | "qs": "6.11.0",
205 | "range-parser": "~1.2.1",
206 | "safe-buffer": "5.2.1",
207 | "send": "0.18.0",
208 | "serve-static": "1.15.0",
209 | "setprototypeof": "1.2.0",
210 | "statuses": "2.0.1",
211 | "type-is": "~1.6.18",
212 | "utils-merge": "1.0.1",
213 | "vary": "~1.1.2"
214 | },
215 | "engines": {
216 | "node": ">= 0.10.0"
217 | }
218 | },
219 | "node_modules/express-ws": {
220 | "version": "5.0.2",
221 | "resolved": "https://registry.npmjs.org/express-ws/-/express-ws-5.0.2.tgz",
222 | "integrity": "sha512-0uvmuk61O9HXgLhGl3QhNSEtRsQevtmbL94/eILaliEADZBHZOQUAiHFrGPrgsjikohyrmSG5g+sCfASTt0lkQ==",
223 | "dependencies": {
224 | "ws": "^7.4.6"
225 | },
226 | "engines": {
227 | "node": ">=4.5.0"
228 | },
229 | "peerDependencies": {
230 | "express": "^4.0.0 || ^5.0.0-alpha.1"
231 | }
232 | },
233 | "node_modules/express-ws/node_modules/ws": {
234 | "version": "7.5.9",
235 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
236 | "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
237 | "engines": {
238 | "node": ">=8.3.0"
239 | },
240 | "peerDependencies": {
241 | "bufferutil": "^4.0.1",
242 | "utf-8-validate": "^5.0.2"
243 | },
244 | "peerDependenciesMeta": {
245 | "bufferutil": {
246 | "optional": true
247 | },
248 | "utf-8-validate": {
249 | "optional": true
250 | }
251 | }
252 | },
253 | "node_modules/express/node_modules/debug": {
254 | "version": "2.6.9",
255 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
256 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
257 | "dependencies": {
258 | "ms": "2.0.0"
259 | }
260 | },
261 | "node_modules/express/node_modules/ms": {
262 | "version": "2.0.0",
263 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
264 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
265 | },
266 | "node_modules/express/node_modules/path-to-regexp": {
267 | "version": "0.1.7",
268 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
269 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
270 | },
271 | "node_modules/finalhandler": {
272 | "version": "1.2.0",
273 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
274 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
275 | "dependencies": {
276 | "debug": "2.6.9",
277 | "encodeurl": "~1.0.2",
278 | "escape-html": "~1.0.3",
279 | "on-finished": "2.4.1",
280 | "parseurl": "~1.3.3",
281 | "statuses": "2.0.1",
282 | "unpipe": "~1.0.0"
283 | },
284 | "engines": {
285 | "node": ">= 0.8"
286 | }
287 | },
288 | "node_modules/finalhandler/node_modules/debug": {
289 | "version": "2.6.9",
290 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
291 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
292 | "dependencies": {
293 | "ms": "2.0.0"
294 | }
295 | },
296 | "node_modules/finalhandler/node_modules/ms": {
297 | "version": "2.0.0",
298 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
299 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
300 | },
301 | "node_modules/forwarded": {
302 | "version": "0.2.0",
303 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
304 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
305 | "engines": {
306 | "node": ">= 0.6"
307 | }
308 | },
309 | "node_modules/fresh": {
310 | "version": "0.5.2",
311 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
312 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
313 | "engines": {
314 | "node": ">= 0.6"
315 | }
316 | },
317 | "node_modules/function-bind": {
318 | "version": "1.1.1",
319 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
320 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
321 | },
322 | "node_modules/get-intrinsic": {
323 | "version": "1.1.3",
324 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
325 | "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
326 | "dependencies": {
327 | "function-bind": "^1.1.1",
328 | "has": "^1.0.3",
329 | "has-symbols": "^1.0.3"
330 | },
331 | "funding": {
332 | "url": "https://github.com/sponsors/ljharb"
333 | }
334 | },
335 | "node_modules/has": {
336 | "version": "1.0.3",
337 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
338 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
339 | "dependencies": {
340 | "function-bind": "^1.1.1"
341 | },
342 | "engines": {
343 | "node": ">= 0.4.0"
344 | }
345 | },
346 | "node_modules/has-symbols": {
347 | "version": "1.0.3",
348 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
349 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
350 | "engines": {
351 | "node": ">= 0.4"
352 | },
353 | "funding": {
354 | "url": "https://github.com/sponsors/ljharb"
355 | }
356 | },
357 | "node_modules/http-errors": {
358 | "version": "2.0.0",
359 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
360 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
361 | "dependencies": {
362 | "depd": "2.0.0",
363 | "inherits": "2.0.4",
364 | "setprototypeof": "1.2.0",
365 | "statuses": "2.0.1",
366 | "toidentifier": "1.0.1"
367 | },
368 | "engines": {
369 | "node": ">= 0.8"
370 | }
371 | },
372 | "node_modules/iconv-lite": {
373 | "version": "0.4.24",
374 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
375 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
376 | "dependencies": {
377 | "safer-buffer": ">= 2.1.2 < 3"
378 | },
379 | "engines": {
380 | "node": ">=0.10.0"
381 | }
382 | },
383 | "node_modules/inherits": {
384 | "version": "2.0.4",
385 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
386 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
387 | },
388 | "node_modules/ipaddr.js": {
389 | "version": "1.9.1",
390 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
391 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
392 | "engines": {
393 | "node": ">= 0.10"
394 | }
395 | },
396 | "node_modules/media-typer": {
397 | "version": "0.3.0",
398 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
399 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
400 | "engines": {
401 | "node": ">= 0.6"
402 | }
403 | },
404 | "node_modules/merge-descriptors": {
405 | "version": "1.0.1",
406 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
407 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
408 | },
409 | "node_modules/methods": {
410 | "version": "1.1.2",
411 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
412 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
413 | "engines": {
414 | "node": ">= 0.6"
415 | }
416 | },
417 | "node_modules/mime": {
418 | "version": "1.6.0",
419 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
420 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
421 | "bin": {
422 | "mime": "cli.js"
423 | },
424 | "engines": {
425 | "node": ">=4"
426 | }
427 | },
428 | "node_modules/mime-db": {
429 | "version": "1.52.0",
430 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
431 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
432 | "engines": {
433 | "node": ">= 0.6"
434 | }
435 | },
436 | "node_modules/mime-types": {
437 | "version": "2.1.35",
438 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
439 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
440 | "dependencies": {
441 | "mime-db": "1.52.0"
442 | },
443 | "engines": {
444 | "node": ">= 0.6"
445 | }
446 | },
447 | "node_modules/ms": {
448 | "version": "2.1.3",
449 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
450 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
451 | },
452 | "node_modules/negotiator": {
453 | "version": "0.6.3",
454 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
455 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
456 | "engines": {
457 | "node": ">= 0.6"
458 | }
459 | },
460 | "node_modules/node-gyp-build": {
461 | "version": "4.6.0",
462 | "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz",
463 | "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==",
464 | "optional": true,
465 | "peer": true,
466 | "bin": {
467 | "node-gyp-build": "bin.js",
468 | "node-gyp-build-optional": "optional.js",
469 | "node-gyp-build-test": "build-test.js"
470 | }
471 | },
472 | "node_modules/object-inspect": {
473 | "version": "1.12.2",
474 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
475 | "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
476 | "funding": {
477 | "url": "https://github.com/sponsors/ljharb"
478 | }
479 | },
480 | "node_modules/on-finished": {
481 | "version": "2.4.1",
482 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
483 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
484 | "dependencies": {
485 | "ee-first": "1.1.1"
486 | },
487 | "engines": {
488 | "node": ">= 0.8"
489 | }
490 | },
491 | "node_modules/parseurl": {
492 | "version": "1.3.3",
493 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
494 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
495 | "engines": {
496 | "node": ">= 0.8"
497 | }
498 | },
499 | "node_modules/proxy-addr": {
500 | "version": "2.0.7",
501 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
502 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
503 | "dependencies": {
504 | "forwarded": "0.2.0",
505 | "ipaddr.js": "1.9.1"
506 | },
507 | "engines": {
508 | "node": ">= 0.10"
509 | }
510 | },
511 | "node_modules/qs": {
512 | "version": "6.11.0",
513 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
514 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
515 | "dependencies": {
516 | "side-channel": "^1.0.4"
517 | },
518 | "engines": {
519 | "node": ">=0.6"
520 | },
521 | "funding": {
522 | "url": "https://github.com/sponsors/ljharb"
523 | }
524 | },
525 | "node_modules/range-parser": {
526 | "version": "1.2.1",
527 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
528 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
529 | "engines": {
530 | "node": ">= 0.6"
531 | }
532 | },
533 | "node_modules/raw-body": {
534 | "version": "2.5.1",
535 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
536 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
537 | "dependencies": {
538 | "bytes": "3.1.2",
539 | "http-errors": "2.0.0",
540 | "iconv-lite": "0.4.24",
541 | "unpipe": "1.0.0"
542 | },
543 | "engines": {
544 | "node": ">= 0.8"
545 | }
546 | },
547 | "node_modules/safe-buffer": {
548 | "version": "5.2.1",
549 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
550 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
551 | "funding": [
552 | {
553 | "type": "github",
554 | "url": "https://github.com/sponsors/feross"
555 | },
556 | {
557 | "type": "patreon",
558 | "url": "https://www.patreon.com/feross"
559 | },
560 | {
561 | "type": "consulting",
562 | "url": "https://feross.org/support"
563 | }
564 | ]
565 | },
566 | "node_modules/safer-buffer": {
567 | "version": "2.1.2",
568 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
569 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
570 | },
571 | "node_modules/send": {
572 | "version": "0.18.0",
573 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
574 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
575 | "dependencies": {
576 | "debug": "2.6.9",
577 | "depd": "2.0.0",
578 | "destroy": "1.2.0",
579 | "encodeurl": "~1.0.2",
580 | "escape-html": "~1.0.3",
581 | "etag": "~1.8.1",
582 | "fresh": "0.5.2",
583 | "http-errors": "2.0.0",
584 | "mime": "1.6.0",
585 | "ms": "2.1.3",
586 | "on-finished": "2.4.1",
587 | "range-parser": "~1.2.1",
588 | "statuses": "2.0.1"
589 | },
590 | "engines": {
591 | "node": ">= 0.8.0"
592 | }
593 | },
594 | "node_modules/send/node_modules/debug": {
595 | "version": "2.6.9",
596 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
597 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
598 | "dependencies": {
599 | "ms": "2.0.0"
600 | }
601 | },
602 | "node_modules/send/node_modules/debug/node_modules/ms": {
603 | "version": "2.0.0",
604 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
605 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
606 | },
607 | "node_modules/serve-static": {
608 | "version": "1.15.0",
609 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
610 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
611 | "dependencies": {
612 | "encodeurl": "~1.0.2",
613 | "escape-html": "~1.0.3",
614 | "parseurl": "~1.3.3",
615 | "send": "0.18.0"
616 | },
617 | "engines": {
618 | "node": ">= 0.8.0"
619 | }
620 | },
621 | "node_modules/setprototypeof": {
622 | "version": "1.2.0",
623 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
624 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
625 | },
626 | "node_modules/side-channel": {
627 | "version": "1.0.4",
628 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
629 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
630 | "dependencies": {
631 | "call-bind": "^1.0.0",
632 | "get-intrinsic": "^1.0.2",
633 | "object-inspect": "^1.9.0"
634 | },
635 | "funding": {
636 | "url": "https://github.com/sponsors/ljharb"
637 | }
638 | },
639 | "node_modules/statuses": {
640 | "version": "2.0.1",
641 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
642 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
643 | "engines": {
644 | "node": ">= 0.8"
645 | }
646 | },
647 | "node_modules/toidentifier": {
648 | "version": "1.0.1",
649 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
650 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
651 | "engines": {
652 | "node": ">=0.6"
653 | }
654 | },
655 | "node_modules/type-is": {
656 | "version": "1.6.18",
657 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
658 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
659 | "dependencies": {
660 | "media-typer": "0.3.0",
661 | "mime-types": "~2.1.24"
662 | },
663 | "engines": {
664 | "node": ">= 0.6"
665 | }
666 | },
667 | "node_modules/unpipe": {
668 | "version": "1.0.0",
669 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
670 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
671 | "engines": {
672 | "node": ">= 0.8"
673 | }
674 | },
675 | "node_modules/utf-8-validate": {
676 | "version": "5.0.10",
677 | "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz",
678 | "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==",
679 | "hasInstallScript": true,
680 | "optional": true,
681 | "peer": true,
682 | "dependencies": {
683 | "node-gyp-build": "^4.3.0"
684 | },
685 | "engines": {
686 | "node": ">=6.14.2"
687 | }
688 | },
689 | "node_modules/utils-merge": {
690 | "version": "1.0.1",
691 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
692 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
693 | "engines": {
694 | "node": ">= 0.4.0"
695 | }
696 | },
697 | "node_modules/vary": {
698 | "version": "1.1.2",
699 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
700 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
701 | "engines": {
702 | "node": ">= 0.8"
703 | }
704 | }
705 | },
706 | "dependencies": {
707 | "accepts": {
708 | "version": "1.3.8",
709 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
710 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
711 | "requires": {
712 | "mime-types": "~2.1.34",
713 | "negotiator": "0.6.3"
714 | }
715 | },
716 | "array-flatten": {
717 | "version": "1.1.1",
718 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
719 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
720 | },
721 | "body-parser": {
722 | "version": "1.20.1",
723 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
724 | "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
725 | "requires": {
726 | "bytes": "3.1.2",
727 | "content-type": "~1.0.4",
728 | "debug": "2.6.9",
729 | "depd": "2.0.0",
730 | "destroy": "1.2.0",
731 | "http-errors": "2.0.0",
732 | "iconv-lite": "0.4.24",
733 | "on-finished": "2.4.1",
734 | "qs": "6.11.0",
735 | "raw-body": "2.5.1",
736 | "type-is": "~1.6.18",
737 | "unpipe": "1.0.0"
738 | },
739 | "dependencies": {
740 | "debug": {
741 | "version": "2.6.9",
742 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
743 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
744 | "requires": {
745 | "ms": "2.0.0"
746 | }
747 | },
748 | "ms": {
749 | "version": "2.0.0",
750 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
751 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
752 | }
753 | }
754 | },
755 | "bufferutil": {
756 | "version": "4.0.7",
757 | "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz",
758 | "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==",
759 | "optional": true,
760 | "peer": true,
761 | "requires": {
762 | "node-gyp-build": "^4.3.0"
763 | }
764 | },
765 | "bytes": {
766 | "version": "3.1.2",
767 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
768 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
769 | },
770 | "call-bind": {
771 | "version": "1.0.2",
772 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
773 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
774 | "requires": {
775 | "function-bind": "^1.1.1",
776 | "get-intrinsic": "^1.0.2"
777 | }
778 | },
779 | "content-disposition": {
780 | "version": "0.5.4",
781 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
782 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
783 | "requires": {
784 | "safe-buffer": "5.2.1"
785 | }
786 | },
787 | "content-type": {
788 | "version": "1.0.4",
789 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
790 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
791 | },
792 | "cookie": {
793 | "version": "0.5.0",
794 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
795 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw=="
796 | },
797 | "cookie-signature": {
798 | "version": "1.0.6",
799 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
800 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
801 | },
802 | "depd": {
803 | "version": "2.0.0",
804 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
805 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
806 | },
807 | "destroy": {
808 | "version": "1.2.0",
809 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
810 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="
811 | },
812 | "ee-first": {
813 | "version": "1.1.1",
814 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
815 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
816 | },
817 | "encodeurl": {
818 | "version": "1.0.2",
819 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
820 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
821 | },
822 | "escape-html": {
823 | "version": "1.0.3",
824 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
825 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
826 | },
827 | "etag": {
828 | "version": "1.8.1",
829 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
830 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="
831 | },
832 | "express": {
833 | "version": "4.18.2",
834 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
835 | "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
836 | "requires": {
837 | "accepts": "~1.3.8",
838 | "array-flatten": "1.1.1",
839 | "body-parser": "1.20.1",
840 | "content-disposition": "0.5.4",
841 | "content-type": "~1.0.4",
842 | "cookie": "0.5.0",
843 | "cookie-signature": "1.0.6",
844 | "debug": "2.6.9",
845 | "depd": "2.0.0",
846 | "encodeurl": "~1.0.2",
847 | "escape-html": "~1.0.3",
848 | "etag": "~1.8.1",
849 | "finalhandler": "1.2.0",
850 | "fresh": "0.5.2",
851 | "http-errors": "2.0.0",
852 | "merge-descriptors": "1.0.1",
853 | "methods": "~1.1.2",
854 | "on-finished": "2.4.1",
855 | "parseurl": "~1.3.3",
856 | "path-to-regexp": "0.1.7",
857 | "proxy-addr": "~2.0.7",
858 | "qs": "6.11.0",
859 | "range-parser": "~1.2.1",
860 | "safe-buffer": "5.2.1",
861 | "send": "0.18.0",
862 | "serve-static": "1.15.0",
863 | "setprototypeof": "1.2.0",
864 | "statuses": "2.0.1",
865 | "type-is": "~1.6.18",
866 | "utils-merge": "1.0.1",
867 | "vary": "~1.1.2"
868 | },
869 | "dependencies": {
870 | "debug": {
871 | "version": "2.6.9",
872 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
873 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
874 | "requires": {
875 | "ms": "2.0.0"
876 | }
877 | },
878 | "ms": {
879 | "version": "2.0.0",
880 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
881 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
882 | },
883 | "path-to-regexp": {
884 | "version": "0.1.7",
885 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
886 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
887 | }
888 | }
889 | },
890 | "express-ws": {
891 | "version": "5.0.2",
892 | "resolved": "https://registry.npmjs.org/express-ws/-/express-ws-5.0.2.tgz",
893 | "integrity": "sha512-0uvmuk61O9HXgLhGl3QhNSEtRsQevtmbL94/eILaliEADZBHZOQUAiHFrGPrgsjikohyrmSG5g+sCfASTt0lkQ==",
894 | "requires": {
895 | "ws": "^7.4.6"
896 | },
897 | "dependencies": {
898 | "ws": {
899 | "version": "7.5.9",
900 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
901 | "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
902 | "requires": {}
903 | }
904 | }
905 | },
906 | "finalhandler": {
907 | "version": "1.2.0",
908 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
909 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
910 | "requires": {
911 | "debug": "2.6.9",
912 | "encodeurl": "~1.0.2",
913 | "escape-html": "~1.0.3",
914 | "on-finished": "2.4.1",
915 | "parseurl": "~1.3.3",
916 | "statuses": "2.0.1",
917 | "unpipe": "~1.0.0"
918 | },
919 | "dependencies": {
920 | "debug": {
921 | "version": "2.6.9",
922 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
923 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
924 | "requires": {
925 | "ms": "2.0.0"
926 | }
927 | },
928 | "ms": {
929 | "version": "2.0.0",
930 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
931 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
932 | }
933 | }
934 | },
935 | "forwarded": {
936 | "version": "0.2.0",
937 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
938 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
939 | },
940 | "fresh": {
941 | "version": "0.5.2",
942 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
943 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="
944 | },
945 | "function-bind": {
946 | "version": "1.1.1",
947 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
948 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
949 | },
950 | "get-intrinsic": {
951 | "version": "1.1.3",
952 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
953 | "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
954 | "requires": {
955 | "function-bind": "^1.1.1",
956 | "has": "^1.0.3",
957 | "has-symbols": "^1.0.3"
958 | }
959 | },
960 | "has": {
961 | "version": "1.0.3",
962 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
963 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
964 | "requires": {
965 | "function-bind": "^1.1.1"
966 | }
967 | },
968 | "has-symbols": {
969 | "version": "1.0.3",
970 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
971 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
972 | },
973 | "http-errors": {
974 | "version": "2.0.0",
975 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
976 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
977 | "requires": {
978 | "depd": "2.0.0",
979 | "inherits": "2.0.4",
980 | "setprototypeof": "1.2.0",
981 | "statuses": "2.0.1",
982 | "toidentifier": "1.0.1"
983 | }
984 | },
985 | "iconv-lite": {
986 | "version": "0.4.24",
987 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
988 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
989 | "requires": {
990 | "safer-buffer": ">= 2.1.2 < 3"
991 | }
992 | },
993 | "inherits": {
994 | "version": "2.0.4",
995 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
996 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
997 | },
998 | "ipaddr.js": {
999 | "version": "1.9.1",
1000 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
1001 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
1002 | },
1003 | "media-typer": {
1004 | "version": "0.3.0",
1005 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
1006 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="
1007 | },
1008 | "merge-descriptors": {
1009 | "version": "1.0.1",
1010 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
1011 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
1012 | },
1013 | "methods": {
1014 | "version": "1.1.2",
1015 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
1016 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="
1017 | },
1018 | "mime": {
1019 | "version": "1.6.0",
1020 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
1021 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
1022 | },
1023 | "mime-db": {
1024 | "version": "1.52.0",
1025 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
1026 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
1027 | },
1028 | "mime-types": {
1029 | "version": "2.1.35",
1030 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
1031 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
1032 | "requires": {
1033 | "mime-db": "1.52.0"
1034 | }
1035 | },
1036 | "ms": {
1037 | "version": "2.1.3",
1038 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1039 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
1040 | },
1041 | "negotiator": {
1042 | "version": "0.6.3",
1043 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
1044 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
1045 | },
1046 | "node-gyp-build": {
1047 | "version": "4.6.0",
1048 | "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz",
1049 | "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==",
1050 | "optional": true,
1051 | "peer": true
1052 | },
1053 | "object-inspect": {
1054 | "version": "1.12.2",
1055 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
1056 | "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ=="
1057 | },
1058 | "on-finished": {
1059 | "version": "2.4.1",
1060 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
1061 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
1062 | "requires": {
1063 | "ee-first": "1.1.1"
1064 | }
1065 | },
1066 | "parseurl": {
1067 | "version": "1.3.3",
1068 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
1069 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
1070 | },
1071 | "proxy-addr": {
1072 | "version": "2.0.7",
1073 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
1074 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
1075 | "requires": {
1076 | "forwarded": "0.2.0",
1077 | "ipaddr.js": "1.9.1"
1078 | }
1079 | },
1080 | "qs": {
1081 | "version": "6.11.0",
1082 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
1083 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
1084 | "requires": {
1085 | "side-channel": "^1.0.4"
1086 | }
1087 | },
1088 | "range-parser": {
1089 | "version": "1.2.1",
1090 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
1091 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
1092 | },
1093 | "raw-body": {
1094 | "version": "2.5.1",
1095 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
1096 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
1097 | "requires": {
1098 | "bytes": "3.1.2",
1099 | "http-errors": "2.0.0",
1100 | "iconv-lite": "0.4.24",
1101 | "unpipe": "1.0.0"
1102 | }
1103 | },
1104 | "safe-buffer": {
1105 | "version": "5.2.1",
1106 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
1107 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
1108 | },
1109 | "safer-buffer": {
1110 | "version": "2.1.2",
1111 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1112 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1113 | },
1114 | "send": {
1115 | "version": "0.18.0",
1116 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
1117 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
1118 | "requires": {
1119 | "debug": "2.6.9",
1120 | "depd": "2.0.0",
1121 | "destroy": "1.2.0",
1122 | "encodeurl": "~1.0.2",
1123 | "escape-html": "~1.0.3",
1124 | "etag": "~1.8.1",
1125 | "fresh": "0.5.2",
1126 | "http-errors": "2.0.0",
1127 | "mime": "1.6.0",
1128 | "ms": "2.1.3",
1129 | "on-finished": "2.4.1",
1130 | "range-parser": "~1.2.1",
1131 | "statuses": "2.0.1"
1132 | },
1133 | "dependencies": {
1134 | "debug": {
1135 | "version": "2.6.9",
1136 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
1137 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
1138 | "requires": {
1139 | "ms": "2.0.0"
1140 | },
1141 | "dependencies": {
1142 | "ms": {
1143 | "version": "2.0.0",
1144 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1145 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
1146 | }
1147 | }
1148 | }
1149 | }
1150 | },
1151 | "serve-static": {
1152 | "version": "1.15.0",
1153 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
1154 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
1155 | "requires": {
1156 | "encodeurl": "~1.0.2",
1157 | "escape-html": "~1.0.3",
1158 | "parseurl": "~1.3.3",
1159 | "send": "0.18.0"
1160 | }
1161 | },
1162 | "setprototypeof": {
1163 | "version": "1.2.0",
1164 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
1165 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
1166 | },
1167 | "side-channel": {
1168 | "version": "1.0.4",
1169 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
1170 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
1171 | "requires": {
1172 | "call-bind": "^1.0.0",
1173 | "get-intrinsic": "^1.0.2",
1174 | "object-inspect": "^1.9.0"
1175 | }
1176 | },
1177 | "statuses": {
1178 | "version": "2.0.1",
1179 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
1180 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
1181 | },
1182 | "toidentifier": {
1183 | "version": "1.0.1",
1184 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
1185 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
1186 | },
1187 | "type-is": {
1188 | "version": "1.6.18",
1189 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
1190 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
1191 | "requires": {
1192 | "media-typer": "0.3.0",
1193 | "mime-types": "~2.1.24"
1194 | }
1195 | },
1196 | "unpipe": {
1197 | "version": "1.0.0",
1198 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1199 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="
1200 | },
1201 | "utf-8-validate": {
1202 | "version": "5.0.10",
1203 | "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz",
1204 | "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==",
1205 | "optional": true,
1206 | "peer": true,
1207 | "requires": {
1208 | "node-gyp-build": "^4.3.0"
1209 | }
1210 | },
1211 | "utils-merge": {
1212 | "version": "1.0.1",
1213 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1214 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="
1215 | },
1216 | "vary": {
1217 | "version": "1.1.2",
1218 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1219 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="
1220 | }
1221 | }
1222 | }
1223 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "browser-exec",
3 | "version": "1.0.0",
4 | "description": "A small library to execute code in a browser without the need for pupeteer or selenium.",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "keywords": [
10 | "antibots",
11 | "chrome",
12 | "contexts"
13 | ],
14 | "author": "peet",
15 | "license": "ISC",
16 | "dependencies": {
17 | "express": "^4.18.2",
18 | "express-ws": "^5.0.2"
19 | }
20 | }
21 |
--------------------------------------------------------------------------------