add Client Hints for browser detection #6899
Signed-off-by: si458 <simonsmith5521@gmail.com>
si458 committed
Mar 23, 2025 at 15:02 UTC
af8947e4163ac17c8658120c8803d4ee55b6a85f
5 files changed
+356
-304
dependencies.txt
+2
-1
@@ -11,6 +11,7 @@
11
"minimist": "1.2.8",
12
"multiparty": "4.2.3",
13
"node-forge": "1.3.1",
14
- "ua-parser-js": "1.0.39",
14
+ "ua-parser-js": "1.0.40",
15
+ "ua-client-hints-js": "0.1.2",
16
"ws": "8.18.0",
17
"yauzl": "2.10.0"
\ No newline at end of file
meshcentral.js
+1
-1
@@ -4252,7 +4252,7 @@ function mainStart() {
4252
4253
// Build the list of required modules
4254
// NOTE: ALL MODULES MUST HAVE A VERSION NUMBER AND THE VERSION MUST MATCH THAT USED IN Dockerfile
4255
- var modules = ['archiver@7.0.1', 'body-parser@1.20.3', 'cbor@5.2.0', 'compression@1.7.5', 'cookie-session@2.1.0', 'express@4.21.2', 'express-handlebars@7.1.3', 'express-ws@5.0.2', 'ipcheck@0.1.0', 'minimist@1.2.8', 'multiparty@4.2.3', '@seald-io/nedb', 'node-forge@1.3.1', 'ua-parser-js@1.0.39', 'ws@8.18.0', 'yauzl@2.10.0'];
4255
+ var modules = ['archiver@7.0.1', 'body-parser@1.20.3', 'cbor@5.2.0', 'compression@1.7.5', 'cookie-session@2.1.0', 'express@4.21.2', 'express-handlebars@7.1.3', 'express-ws@5.0.2', 'ipcheck@0.1.0', 'minimist@1.2.8', 'multiparty@4.2.3', '@seald-io/nedb', 'node-forge@1.3.1', 'ua-parser-js@1.0.40', 'ua-client-hints-js@0.1.2', 'ws@8.18.0', 'yauzl@2.10.0'];
4256
if (require('os').platform() == 'win32') { modules.push('node-windows@0.1.14'); modules.push('loadavg-windows@1.1.1'); if (sspi == true) { modules.push('node-sspi@0.2.10'); } } // Add Windows modules
4257
if (ldap == true) { modules.push('ldapauth-fork@5.0.5'); }
4258
if (ssh == true) { modules.push('ssh2@1.16.0'); }
package-lock.json
+324
-300
@@ -1,12 +1,12 @@
1
{
2
"name": "meshcentral",
3
- "version": "1.1.35",
3
+ "version": "1.1.42",
4
"lockfileVersion": 3,
5
"requires": true,
6
"packages": {
7
"": {
8
"name": "meshcentral",
9
- "version": "1.1.35",
9
+ "version": "1.1.42",
10
"license": "Apache-2.0",
11
"dependencies": {
12
"@seald-io/nedb": "4.0.4",
@@ -22,7 +22,8 @@
22
"minimist": "1.2.8",
23
"multiparty": "4.2.3",
24
"node-forge": "1.3.1",
25
- "ua-parser-js": "1.0.39",
25
+ "ua-client-hints-js": "0.1.2",
26
+ "ua-parser-js": "1.0.40",
27
"ws": "8.18.0",
28
"yauzl": "2.10.0"
29
},
@@ -33,6 +34,23 @@
34
"node": ">=16.0.0"
35
}
36
},
37
+ "node_modules/@isaacs/cliui": {
38
+ "version": "8.0.2",
39
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
40
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
41
+ "license": "ISC",
42
+ "dependencies": {
43
+ "string-width": "^5.1.2",
44
+ "string-width-cjs": "npm:string-width@^4.2.0",
45
+ "strip-ansi": "^7.0.1",
46
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
47
+ "wrap-ansi": "^8.1.0",
48
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
49
+ },
50
+ "engines": {
51
+ "node": ">=12"
52
+ }
53
+ },
54
"node_modules/@pkgjs/parseargs": {
55
"version": "0.11.0",
56
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
@@ -153,101 +171,6 @@
171
"node": ">= 14"
172
}
173
},
156
- "node_modules/archiver-utils/node_modules/lazystream": {
157
- "version": "1.0.1",
158
- "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz",
159
- "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==",
160
- "license": "MIT",
161
- "dependencies": {
162
- "readable-stream": "^2.0.5"
163
- },
164
- "engines": {
165
- "node": ">= 0.6.3"
166
- }
167
- },
168
- "node_modules/archiver-utils/node_modules/lazystream/node_modules/readable-stream": {
169
- "version": "2.3.8",
170
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
171
- "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
172
- "license": "MIT",
173
- "dependencies": {
174
- "core-util-is": "~1.0.0",
175
- "inherits": "~2.0.3",
176
- "isarray": "~1.0.0",
177
- "process-nextick-args": "~2.0.0",
178
- "safe-buffer": "~5.1.1",
179
- "string_decoder": "~1.1.1",
180
- "util-deprecate": "~1.0.1"
181
- }
182
- },
183
- "node_modules/archiver-utils/node_modules/lazystream/node_modules/string_decoder": {
184
- "version": "1.1.1",
185
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
186
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
187
- "license": "MIT",
188
- "dependencies": {
189
- "safe-buffer": "~5.1.0"
190
- }
191
- },
192
- "node_modules/archiver-utils/node_modules/readable-stream": {
193
- "version": "4.6.0",
194
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.6.0.tgz",
195
- "integrity": "sha512-cbAdYt0VcnpN2Bekq7PU+k363ZRsPwJoEEJOEtSJQlJXzwaxt3FIo/uL+KeDSGIjJqtkwyge4KQgD2S2kd+CQw==",
196
- "license": "MIT",
197
- "dependencies": {
198
- "abort-controller": "^3.0.0",
199
- "buffer": "^6.0.3",
200
- "events": "^3.3.0",
201
- "process": "^0.11.10",
202
- "string_decoder": "^1.3.0"
203
- },
204
- "engines": {
205
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
206
- }
207
- },
208
- "node_modules/archiver-utils/node_modules/safe-buffer": {
209
- "version": "5.1.2",
210
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
211
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
212
- "license": "MIT"
213
- },
214
- "node_modules/archiver/node_modules/minimatch": {
215
- "version": "5.1.6",
216
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
217
- "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
218
- "license": "ISC",
219
- "dependencies": {
220
- "brace-expansion": "^2.0.1"
221
- },
222
- "engines": {
223
- "node": ">=10"
224
- }
225
- },
226
- "node_modules/archiver/node_modules/readable-stream": {
227
- "version": "4.6.0",
228
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.6.0.tgz",
229
- "integrity": "sha512-cbAdYt0VcnpN2Bekq7PU+k363ZRsPwJoEEJOEtSJQlJXzwaxt3FIo/uL+KeDSGIjJqtkwyge4KQgD2S2kd+CQw==",
230
- "license": "MIT",
231
- "dependencies": {
232
- "abort-controller": "^3.0.0",
233
- "buffer": "^6.0.3",
234
- "events": "^3.3.0",
235
- "process": "^0.11.10",
236
- "string_decoder": "^1.3.0"
237
- },
238
- "engines": {
239
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
240
- }
241
- },
242
- "node_modules/archiver/node_modules/readdir-glob": {
243
- "version": "1.1.3",
244
- "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz",
245
- "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==",
246
- "license": "Apache-2.0",
247
- "dependencies": {
248
- "minimatch": "^5.1.0"
249
- }
250
- },
174
"node_modules/array-flatten": {
175
"version": "1.1.1",
176
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
@@ -288,9 +211,9 @@
211
"license": "MIT"
212
},
213
"node_modules/bare-events": {
291
- "version": "2.5.0",
292
- "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz",
293
- "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==",
214
+ "version": "2.5.4",
215
+ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz",
216
+ "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==",
217
"license": "Apache-2.0",
218
"optional": true
219
},
@@ -417,9 +340,9 @@
340
}
341
},
342
"node_modules/call-bind-apply-helpers": {
420
- "version": "1.0.1",
421
- "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz",
422
- "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==",
343
+ "version": "1.0.2",
344
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
345
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
346
"license": "MIT",
347
"dependencies": {
348
"es-errors": "^1.3.0",
@@ -430,13 +353,13 @@
353
}
354
},
355
"node_modules/call-bound": {
433
- "version": "1.0.3",
434
- "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz",
435
- "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==",
356
+ "version": "1.0.4",
357
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
358
+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
359
"license": "MIT",
360
"dependencies": {
438
- "call-bind-apply-helpers": "^1.0.1",
439
- "get-intrinsic": "^1.2.6"
361
+ "call-bind-apply-helpers": "^1.0.2",
362
+ "get-intrinsic": "^1.3.0"
363
},
364
"engines": {
365
"node": ">= 0.4"
@@ -476,6 +399,22 @@
399
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
400
"license": "MIT"
401
},
402
+ "node_modules/compress-commons": {
403
+ "version": "6.0.2",
404
+ "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz",
405
+ "integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==",
406
+ "license": "MIT",
407
+ "dependencies": {
408
+ "crc-32": "^1.2.0",
409
+ "crc32-stream": "^6.0.0",
410
+ "is-stream": "^2.0.1",
411
+ "normalize-path": "^3.0.0",
412
+ "readable-stream": "^4.0.0"
413
+ },
414
+ "engines": {
415
+ "node": ">= 14"
416
+ }
417
+ },
418
"node_modules/compressible": {
419
"version": "2.0.18",
420
"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
@@ -616,22 +555,6 @@
555
"node": ">= 14"
556
}
557
},
619
- "node_modules/crc32-stream/node_modules/readable-stream": {
620
- "version": "4.6.0",
621
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.6.0.tgz",
622
- "integrity": "sha512-cbAdYt0VcnpN2Bekq7PU+k363ZRsPwJoEEJOEtSJQlJXzwaxt3FIo/uL+KeDSGIjJqtkwyge4KQgD2S2kd+CQw==",
623
- "license": "MIT",
624
- "dependencies": {
625
- "abort-controller": "^3.0.0",
626
- "buffer": "^6.0.3",
627
- "events": "^3.3.0",
628
- "process": "^0.11.10",
629
- "string_decoder": "^1.3.0"
630
- },
631
- "engines": {
632
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
633
- }
634
- },
558
"node_modules/cross-spawn": {
559
"version": "7.0.6",
560
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
@@ -751,9 +674,9 @@
674
}
675
},
676
"node_modules/es-object-atoms": {
754
- "version": "1.0.0",
755
- "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
756
- "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
677
+ "version": "1.1.1",
678
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
679
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
680
"license": "MIT",
681
"dependencies": {
682
"es-errors": "^1.3.0"
@@ -925,35 +848,29 @@
848
}
849
},
850
"node_modules/for-each": {
928
- "version": "0.3.3",
929
- "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
930
- "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
851
+ "version": "0.3.5",
852
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
853
+ "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
854
"license": "MIT",
855
"dependencies": {
933
- "is-callable": "^1.1.3"
934
- }
935
- },
936
- "node_modules/foreground-child": {
937
- "version": "3.3.0",
938
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
939
- "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
940
- "license": "ISC",
941
- "dependencies": {
942
- "cross-spawn": "^7.0.0",
943
- "signal-exit": "^4.0.1"
856
+ "is-callable": "^1.2.7"
857
},
858
"engines": {
946
- "node": ">=14"
859
+ "node": ">= 0.4"
860
},
861
"funding": {
949
- "url": "https://github.com/sponsors/isaacs"
862
+ "url": "https://github.com/sponsors/ljharb"
863
}
864
},
952
- "node_modules/foreground-child/node_modules/signal-exit": {
953
- "version": "4.1.0",
954
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
955
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
865
+ "node_modules/foreground-child": {
866
+ "version": "3.3.1",
867
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
868
+ "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
869
"license": "ISC",
870
+ "dependencies": {
871
+ "cross-spawn": "^7.0.6",
872
+ "signal-exit": "^4.0.1"
873
+ },
874
"engines": {
875
"node": ">=14"
876
},
@@ -989,21 +906,21 @@
906
}
907
},
908
"node_modules/get-intrinsic": {
992
- "version": "1.2.6",
993
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz",
994
- "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==",
909
+ "version": "1.3.0",
910
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
911
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
912
"license": "MIT",
913
"dependencies": {
997
- "call-bind-apply-helpers": "^1.0.1",
998
- "dunder-proto": "^1.0.0",
914
+ "call-bind-apply-helpers": "^1.0.2",
915
"es-define-property": "^1.0.1",
916
"es-errors": "^1.3.0",
1001
- "es-object-atoms": "^1.0.0",
917
+ "es-object-atoms": "^1.1.1",
918
"function-bind": "^1.1.2",
919
+ "get-proto": "^1.0.1",
920
"gopd": "^1.2.0",
921
"has-symbols": "^1.1.0",
922
"hasown": "^2.0.2",
1006
- "math-intrinsics": "^1.0.0"
923
+ "math-intrinsics": "^1.1.0"
924
},
925
"engines": {
926
"node": ">= 0.4"
@@ -1012,6 +929,19 @@
929
"url": "https://github.com/sponsors/ljharb"
930
}
931
},
932
+ "node_modules/get-proto": {
933
+ "version": "1.0.1",
934
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
935
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
936
+ "license": "MIT",
937
+ "dependencies": {
938
+ "dunder-proto": "^1.0.1",
939
+ "es-object-atoms": "^1.0.0"
940
+ },
941
+ "engines": {
942
+ "node": ">= 0.4"
943
+ }
944
+ },
945
"node_modules/glob": {
946
"version": "10.4.5",
947
"resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
@@ -1235,12 +1165,33 @@
1165
}
1166
},
1167
"node_modules/is-generator-function": {
1238
- "version": "1.0.10",
1239
- "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz",
1240
- "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==",
1168
+ "version": "1.1.0",
1169
+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz",
1170
+ "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==",
1171
+ "license": "MIT",
1172
+ "dependencies": {
1173
+ "call-bound": "^1.0.3",
1174
+ "get-proto": "^1.0.0",
1175
+ "has-tostringtag": "^1.0.2",
1176
+ "safe-regex-test": "^1.1.0"
1177
+ },
1178
+ "engines": {
1179
+ "node": ">= 0.4"
1180
+ },
1181
+ "funding": {
1182
+ "url": "https://github.com/sponsors/ljharb"
1183
+ }
1184
+ },
1185
+ "node_modules/is-regex": {
1186
+ "version": "1.2.1",
1187
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
1188
+ "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
1189
"license": "MIT",
1190
"dependencies": {
1243
- "has-tostringtag": "^1.0.0"
1191
+ "call-bound": "^1.0.2",
1192
+ "gopd": "^1.2.0",
1193
+ "has-tostringtag": "^1.0.2",
1194
+ "hasown": "^2.0.2"
1195
},
1196
"engines": {
1197
"node": ">= 0.4"
@@ -1303,107 +1254,58 @@
1254
"@pkgjs/parseargs": "^0.11.0"
1255
}
1256
},
1306
- "node_modules/jackspeak/node_modules/@isaacs/cliui": {
1307
- "version": "8.0.2",
1308
- "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
1309
- "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
1310
- "license": "ISC",
1311
- "dependencies": {
1312
- "string-width": "^5.1.2",
1313
- "string-width-cjs": "npm:string-width@^4.2.0",
1314
- "strip-ansi": "^7.0.1",
1315
- "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
1316
- "wrap-ansi": "^8.1.0",
1317
- "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
1318
- },
1319
- "engines": {
1320
- "node": ">=12"
1321
- }
1322
- },
1323
- "node_modules/jackspeak/node_modules/ansi-regex": {
1324
- "version": "5.0.1",
1325
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
1326
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
1327
- "license": "MIT",
1328
- "engines": {
1329
- "node": ">=8"
1330
- }
1331
- },
1332
- "node_modules/jackspeak/node_modules/ansi-styles": {
1333
- "version": "4.3.0",
1334
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
1335
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
1257
+ "node_modules/keygrip": {
1258
+ "version": "1.1.0",
1259
+ "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz",
1260
+ "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==",
1261
"license": "MIT",
1262
"dependencies": {
1338
- "color-convert": "^2.0.1"
1263
+ "tsscmp": "1.0.6"
1264
},
1265
"engines": {
1341
- "node": ">=8"
1342
- },
1343
- "funding": {
1344
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
1266
+ "node": ">= 0.6"
1267
}
1268
},
1347
- "node_modules/jackspeak/node_modules/emoji-regex": {
1348
- "version": "8.0.0",
1349
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
1350
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
1351
- "license": "MIT"
1352
- },
1353
- "node_modules/jackspeak/node_modules/wrap-ansi-cjs": {
1354
- "name": "wrap-ansi",
1355
- "version": "7.0.0",
1356
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
1357
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
1269
+ "node_modules/lazystream": {
1270
+ "version": "1.0.1",
1271
+ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz",
1272
+ "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==",
1273
"license": "MIT",
1274
"dependencies": {
1360
- "ansi-styles": "^4.0.0",
1361
- "string-width": "^4.1.0",
1362
- "strip-ansi": "^6.0.0"
1275
+ "readable-stream": "^2.0.5"
1276
},
1277
"engines": {
1365
- "node": ">=10"
1366
- },
1367
- "funding": {
1368
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
1278
+ "node": ">= 0.6.3"
1279
}
1280
},
1371
- "node_modules/jackspeak/node_modules/wrap-ansi-cjs/node_modules/string-width": {
1372
- "version": "4.2.3",
1373
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
1374
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
1281
+ "node_modules/lazystream/node_modules/readable-stream": {
1282
+ "version": "2.3.8",
1283
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
1284
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
1285
"license": "MIT",
1286
"dependencies": {
1377
- "emoji-regex": "^8.0.0",
1378
- "is-fullwidth-code-point": "^3.0.0",
1379
- "strip-ansi": "^6.0.1"
1380
- },
1381
- "engines": {
1382
- "node": ">=8"
1287
+ "core-util-is": "~1.0.0",
1288
+ "inherits": "~2.0.3",
1289
+ "isarray": "~1.0.0",
1290
+ "process-nextick-args": "~2.0.0",
1291
+ "safe-buffer": "~5.1.1",
1292
+ "string_decoder": "~1.1.1",
1293
+ "util-deprecate": "~1.0.1"
1294
}
1295
},
1385
- "node_modules/jackspeak/node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
1386
- "version": "6.0.1",
1387
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
1388
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
1389
- "license": "MIT",
1390
- "dependencies": {
1391
- "ansi-regex": "^5.0.1"
1392
- },
1393
- "engines": {
1394
- "node": ">=8"
1395
- }
1296
+ "node_modules/lazystream/node_modules/safe-buffer": {
1297
+ "version": "5.1.2",
1298
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1299
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
1300
+ "license": "MIT"
1301
},
1397
- "node_modules/keygrip": {
1398
- "version": "1.1.0",
1399
- "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz",
1400
- "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==",
1302
+ "node_modules/lazystream/node_modules/string_decoder": {
1303
+ "version": "1.1.1",
1304
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
1305
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
1306
"license": "MIT",
1307
"dependencies": {
1403
- "tsscmp": "1.0.6"
1404
- },
1405
- "engines": {
1406
- "node": ">= 0.6"
1308
+ "safe-buffer": "~5.1.0"
1309
}
1310
},
1311
"node_modules/lie": {
@@ -1485,9 +1387,9 @@
1387
}
1388
},
1389
"node_modules/mime-db": {
1488
- "version": "1.53.0",
1489
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz",
1490
- "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==",
1390
+ "version": "1.54.0",
1391
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
1392
+ "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
1393
"license": "MIT",
1394
"engines": {
1395
"node": ">= 0.6"
@@ -1644,9 +1546,9 @@
1546
}
1547
},
1548
"node_modules/object-inspect": {
1647
- "version": "1.13.3",
1648
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz",
1649
- "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==",
1549
+ "version": "1.13.4",
1550
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
1551
+ "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
1552
"license": "MIT",
1553
"engines": {
1554
"node": ">= 0.4"
@@ -1729,9 +1631,9 @@
1631
"license": "MIT"
1632
},
1633
"node_modules/possible-typed-array-names": {
1732
- "version": "1.0.0",
1733
- "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
1734
- "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
1634
+ "version": "1.1.0",
1635
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
1636
+ "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==",
1637
"license": "MIT",
1638
"engines": {
1639
"node": ">= 0.4"
@@ -1780,12 +1682,6 @@
1682
"url": "https://github.com/sponsors/ljharb"
1683
}
1684
},
1783
- "node_modules/queue-tick": {
1784
- "version": "1.0.1",
1785
- "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz",
1786
- "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==",
1787
- "license": "MIT"
1788
- },
1685
"node_modules/random-bytes": {
1686
"version": "1.0.0",
1687
"resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
@@ -1819,6 +1715,43 @@
1715
"node": ">= 0.8"
1716
}
1717
},
1718
+ "node_modules/readable-stream": {
1719
+ "version": "4.7.0",
1720
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz",
1721
+ "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==",
1722
+ "license": "MIT",
1723
+ "dependencies": {
1724
+ "abort-controller": "^3.0.0",
1725
+ "buffer": "^6.0.3",
1726
+ "events": "^3.3.0",
1727
+ "process": "^0.11.10",
1728
+ "string_decoder": "^1.3.0"
1729
+ },
1730
+ "engines": {
1731
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
1732
+ }
1733
+ },
1734
+ "node_modules/readdir-glob": {
1735
+ "version": "1.1.3",
1736
+ "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz",
1737
+ "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==",
1738
+ "license": "Apache-2.0",
1739
+ "dependencies": {
1740
+ "minimatch": "^5.1.0"
1741
+ }
1742
+ },
1743
+ "node_modules/readdir-glob/node_modules/minimatch": {
1744
+ "version": "5.1.6",
1745
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
1746
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
1747
+ "license": "ISC",
1748
+ "dependencies": {
1749
+ "brace-expansion": "^2.0.1"
1750
+ },
1751
+ "engines": {
1752
+ "node": ">=10"
1753
+ }
1754
+ },
1755
"node_modules/safe-buffer": {
1756
"version": "5.2.1",
1757
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@@ -1839,6 +1772,23 @@
1772
],
1773
"license": "MIT"
1774
},
1775
+ "node_modules/safe-regex-test": {
1776
+ "version": "1.1.0",
1777
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
1778
+ "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
1779
+ "license": "MIT",
1780
+ "dependencies": {
1781
+ "call-bound": "^1.0.2",
1782
+ "es-errors": "^1.3.0",
1783
+ "is-regex": "^1.2.1"
1784
+ },
1785
+ "engines": {
1786
+ "node": ">= 0.4"
1787
+ },
1788
+ "funding": {
1789
+ "url": "https://github.com/sponsors/ljharb"
1790
+ }
1791
+ },
1792
"node_modules/safer-buffer": {
1793
"version": "2.1.2",
1794
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
@@ -2015,6 +1965,18 @@
1965
"url": "https://github.com/sponsors/ljharb"
1966
}
1967
},
1968
+ "node_modules/signal-exit": {
1969
+ "version": "4.1.0",
1970
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
1971
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
1972
+ "license": "ISC",
1973
+ "engines": {
1974
+ "node": ">=14"
1975
+ },
1976
+ "funding": {
1977
+ "url": "https://github.com/sponsors/isaacs"
1978
+ }
1979
+ },
1980
"node_modules/source-map": {
1981
"version": "0.6.1",
1982
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -2034,13 +1996,12 @@
1996
}
1997
},
1998
"node_modules/streamx": {
2037
- "version": "2.21.1",
2038
- "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.21.1.tgz",
2039
- "integrity": "sha512-PhP9wUnFLa+91CPy3N6tiQsK+gnYyUNuk15S3YG/zjYE7RuPeCjJngqnzpC31ow0lzBHQ+QGO4cNJnd0djYUsw==",
1999
+ "version": "2.22.0",
2000
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz",
2001
+ "integrity": "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==",
2002
"license": "MIT",
2003
"dependencies": {
2004
"fast-fifo": "^1.3.2",
2043
- "queue-tick": "^1.0.1",
2005
"text-decoder": "^1.1.0"
2006
},
2007
"optionalDependencies": {
@@ -2203,10 +2164,30 @@
2164
"node": ">= 0.6"
2165
}
2166
},
2167
+ "node_modules/ua-client-hints-js": {
2168
+ "version": "0.1.2",
2169
+ "resolved": "https://registry.npmjs.org/ua-client-hints-js/-/ua-client-hints-js-0.1.2.tgz",
2170
+ "integrity": "sha512-cYqD5p9PPCsNYpBJRYcU7s5QuZS3pdWpskOJl+QE7elbOrFzctLs5H9ppH10v7Tk0Kholzo9VIyjoTlh0B8XXg==",
2171
+ "funding": [
2172
+ {
2173
+ "type": "github",
2174
+ "url": "https://github.com/sponsors/faisalman"
2175
+ },
2176
+ {
2177
+ "type": "opencollective",
2178
+ "url": "https://opencollective.com/ua-parser-js"
2179
+ },
2180
+ {
2181
+ "type": "paypal",
2182
+ "url": "https://paypal.me/faisalman"
2183
+ }
2184
+ ],
2185
+ "license": "MIT"
2186
+ },
2187
"node_modules/ua-parser-js": {
2207
- "version": "1.0.39",
2208
- "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.39.tgz",
2209
- "integrity": "sha512-k24RCVWlEcjkdOxYmVJgeD/0a1TiSpqLg+ZalVGV9lsnr4yqu0w7tX/x2xX6G4zpkgQnRf89lxuZ1wsbjXM8lw==",
2188
+ "version": "1.0.40",
2189
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.40.tgz",
2190
+ "integrity": "sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew==",
2191
"funding": [
2192
{
2193
"type": "opencollective",
@@ -2316,15 +2297,16 @@
2297
}
2298
},
2299
"node_modules/which-typed-array": {
2319
- "version": "1.1.18",
2320
- "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz",
2321
- "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==",
2300
+ "version": "1.1.19",
2301
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz",
2302
+ "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==",
2303
"license": "MIT",
2304
"dependencies": {
2305
"available-typed-arrays": "^1.0.7",
2306
"call-bind": "^1.0.8",
2326
- "call-bound": "^1.0.3",
2327
- "for-each": "^0.3.3",
2307
+ "call-bound": "^1.0.4",
2308
+ "for-each": "^0.3.5",
2309
+ "get-proto": "^1.0.1",
2310
"gopd": "^1.2.0",
2311
"has-tostringtag": "^1.0.2"
2312
},
@@ -2358,6 +2340,80 @@
2340
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
2341
}
2342
},
2343
+ "node_modules/wrap-ansi-cjs": {
2344
+ "name": "wrap-ansi",
2345
+ "version": "7.0.0",
2346
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
2347
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
2348
+ "license": "MIT",
2349
+ "dependencies": {
2350
+ "ansi-styles": "^4.0.0",
2351
+ "string-width": "^4.1.0",
2352
+ "strip-ansi": "^6.0.0"
2353
+ },
2354
+ "engines": {
2355
+ "node": ">=10"
2356
+ },
2357
+ "funding": {
2358
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
2359
+ }
2360
+ },
2361
+ "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
2362
+ "version": "5.0.1",
2363
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
2364
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
2365
+ "license": "MIT",
2366
+ "engines": {
2367
+ "node": ">=8"
2368
+ }
2369
+ },
2370
+ "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
2371
+ "version": "4.3.0",
2372
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
2373
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
2374
+ "license": "MIT",
2375
+ "dependencies": {
2376
+ "color-convert": "^2.0.1"
2377
+ },
2378
+ "engines": {
2379
+ "node": ">=8"
2380
+ },
2381
+ "funding": {
2382
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
2383
+ }
2384
+ },
2385
+ "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
2386
+ "version": "8.0.0",
2387
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
2388
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
2389
+ "license": "MIT"
2390
+ },
2391
+ "node_modules/wrap-ansi-cjs/node_modules/string-width": {
2392
+ "version": "4.2.3",
2393
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
2394
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
2395
+ "license": "MIT",
2396
+ "dependencies": {
2397
+ "emoji-regex": "^8.0.0",
2398
+ "is-fullwidth-code-point": "^3.0.0",
2399
+ "strip-ansi": "^6.0.1"
2400
+ },
2401
+ "engines": {
2402
+ "node": ">=8"
2403
+ }
2404
+ },
2405
+ "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
2406
+ "version": "6.0.1",
2407
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2408
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2409
+ "license": "MIT",
2410
+ "dependencies": {
2411
+ "ansi-regex": "^5.0.1"
2412
+ },
2413
+ "engines": {
2414
+ "node": ">=8"
2415
+ }
2416
+ },
2417
"node_modules/ws": {
2418
"version": "8.18.0",
2419
"resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
@@ -2411,38 +2467,6 @@
2467
"engines": {
2468
"node": ">= 14"
2469
}
2414
- },
2415
- "node_modules/zip-stream/node_modules/compress-commons": {
2416
- "version": "6.0.2",
2417
- "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz",
2418
- "integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==",
2419
- "license": "MIT",
2420
- "dependencies": {
2421
- "crc-32": "^1.2.0",
2422
- "crc32-stream": "^6.0.0",
2423
- "is-stream": "^2.0.1",
2424
- "normalize-path": "^3.0.0",
2425
- "readable-stream": "^4.0.0"
2426
- },
2427
- "engines": {
2428
- "node": ">= 14"
2429
- }
2430
- },
2431
- "node_modules/zip-stream/node_modules/readable-stream": {
2432
- "version": "4.6.0",
2433
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.6.0.tgz",
2434
- "integrity": "sha512-cbAdYt0VcnpN2Bekq7PU+k363ZRsPwJoEEJOEtSJQlJXzwaxt3FIo/uL+KeDSGIjJqtkwyge4KQgD2S2kd+CQw==",
2435
- "license": "MIT",
2436
- "dependencies": {
2437
- "abort-controller": "^3.0.0",
2438
- "buffer": "^6.0.3",
2439
- "events": "^3.3.0",
2440
- "process": "^0.11.10",
2441
- "string_decoder": "^1.3.0"
2442
- },
2443
- "engines": {
2444
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
2445
- }
2470
}
2471
}
2472
}
package.json
+2
-1
@@ -50,7 +50,8 @@
50
"minimist": "1.2.8",
51
"multiparty": "4.2.3",
52
"node-forge": "1.3.1",
53
- "ua-parser-js": "1.0.39",
53
+ "ua-client-hints-js": "0.1.2",
54
+ "ua-parser-js": "1.0.40",
55
"ws": "8.18.0",
56
"yauzl": "2.10.0"
57
},
webserver.js
+27
-1
@@ -52,6 +52,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF
52
obj.meshUserHandler = require('./meshuser.js');
53
obj.interceptor = require('./interceptor');
54
obj.uaparser = require('ua-parser-js');
55
+ obj.uaclienthints = require('ua-client-hints-js');
56
const constants = (obj.crypto.constants ? obj.crypto.constants : require('constants')); // require('constants') is deprecated in Node 11.10, use require('crypto').constants instead.
57
58
// Setup WebAuthn / FIDO2
@@ -6402,7 +6403,16 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF
6403
cb()
6404
}
6405
}
6405
- next()
6406
+ // Special Client Hint Headers for Browser Detection on every request - https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers#client_hints
6407
+ // note: only works in a secure context (localhost or https://)
6408
+ const secCH = [
6409
+ 'Sec-CH-UA-Arch', 'Sec-CH-UA-Bitness', 'Sec-CH-UA-Form-Factors', 'Sec-CH-UA-Full-Version',
6410
+ 'Sec-CH-UA-Full-Version-List', 'Sec-CH-UA-Mobile', 'Sec-CH-UA-Model', 'Sec-CH-UA-Platform',
6411
+ 'Sec-CH-UA-Platform-Version', 'Sec-CH-UA-WoW64'
6412
+ ];
6413
+ response.setHeader('Accept-CH', secCH.join(', '));
6414
+ response.setHeader('Critical-CH', secCH.join(', '));
6415
+ next();
6416
});
6417
6418
// Handle all incoming web sockets, see if some need to be handled as web relays
@@ -9490,8 +9500,24 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF
9500
var browser = 'Unknown', os = 'Unknown';
9501
try {
9502
const ua = obj.uaparser((typeof req == 'string') ? req : req.headers['user-agent']);
9503
+ // Add client hints if available
9504
+ if((typeof req != 'string')){
9505
+ const ch = new obj.uaclienthints.UAClientHints().setValuesFromHeaders(req.headers);
9506
+ Object.assign(ua, ch);
9507
+ }
9508
if (ua.browser && ua.browser.name) { ua.browserStr = ua.browser.name; if (ua.browser.version) { ua.browserStr += '/' + ua.browser.version } }
9509
if (ua.os && ua.os.name) { ua.osStr = ua.os.name; if (ua.os.version) { ua.osStr += '/' + ua.os.version } }
9510
+ // If the platform is set, use that instead of the OS
9511
+ if (ua.platform) {
9512
+ ua.osStr = ua.platform;
9513
+ // Special case for Windows 11
9514
+ if (ua.platformVersion) {
9515
+ if (ua.platform == 'Windows' && parseInt(ua.platformVersion) >= 13) {
9516
+ ua.platformVersion = '11';
9517
+ }
9518
+ ua.osStr += '/' + ua.platformVersion
9519
+ }
9520
+ }
9521
return ua;
9522
} catch (ex) { return { browserStr: browser, osStr: os } }
9523
}