feat(security): sanitize SVG files on upload

Signed-off-by: Erik Michelson <github@erik.michelson.eu>
This commit is contained in:
Erik Michelson
2026-02-03 23:02:49 +01:00
parent b930fe04ce
commit f910000d2b
3 changed files with 374 additions and 49 deletions

View File

@@ -8,11 +8,22 @@ const { v4: uuidv4 } = require('uuid')
const os = require('os') const os = require('os')
const rimraf = require('rimraf') const rimraf = require('rimraf')
const isSvg = require('is-svg') const isSvg = require('is-svg')
const { JSDOM } = require('jsdom')
const config = require('../../config') const config = require('../../config')
const logger = require('../../logger') const logger = require('../../logger')
const errors = require('../../errors') const errors = require('../../errors')
let DOMPurify
try {
const window = new JSDOM('').window
global.window = window
const createDOMPurify = require('dompurify')
DOMPurify = createDOMPurify(window)
} catch (err) {
logger.error('Failed to initialize DOMPurify for SVG sanitization:', err)
}
const imageRouter = (module.exports = Router()) const imageRouter = (module.exports = Router())
async function checkUploadType (filePath) { async function checkUploadType (filePath) {
@@ -55,6 +66,31 @@ async function checkUploadType (filePath) {
return true return true
} }
function sanitizeSvg (filePath) {
if (!DOMPurify) {
logger.error('SVG sanitization failed: DOMPurify not initialized')
return false
}
try {
const svgContent = fs.readFileSync(filePath, 'utf8')
const cleanSvg = DOMPurify.sanitize(svgContent, {
USE_PROFILES: { svg: true, svgFilters: true }
})
if (!cleanSvg) {
logger.error('SVG sanitization resulted in empty content')
return false
}
fs.writeFileSync(filePath, cleanSvg, 'utf8')
return true
} catch (err) {
logger.error('SVG sanitization error:', err)
return false
}
}
// upload image // upload image
imageRouter.post('/uploadimage', function (req, res) { imageRouter.post('/uploadimage', function (req, res) {
const uploadsEnabled = config.enableUploads const uploadsEnabled = config.enableUploads
@@ -97,6 +133,13 @@ imageRouter.post('/uploadimage', function (req, res) {
rimraf.sync(tmpDir) rimraf.sync(tmpDir)
return errors.errorBadRequest(res) return errors.errorBadRequest(res)
} else { } else {
const extension = path.extname(files.image.filepath).toLowerCase()
if (extension === '.svg' && !sanitizeSvg(files.image.filepath)) {
logger.error('Image upload error: SVG sanitization failed')
rimraf.sync(tmpDir)
return errors.errorBadRequest(res)
}
logger.debug( logger.debug(
`SERVER received uploadimage: ${JSON.stringify(files.image)}` `SERVER received uploadimage: ${JSON.stringify(files.image)}`
) )

View File

@@ -37,6 +37,7 @@
"cookie-parser": "1.4.7", "cookie-parser": "1.4.7",
"deep-freeze": "0.0.1", "deep-freeze": "0.0.1",
"diff-match-patch": "git+https://github.com/hackmdio/diff-match-patch.git#commit=59a9395ad9fe143e601e7ae5765ed943bdd2b11e", "diff-match-patch": "git+https://github.com/hackmdio/diff-match-patch.git#commit=59a9395ad9fe143e601e7ae5765ed943bdd2b11e",
"dompurify": "3.3.1",
"ejs": "3.1.10", "ejs": "3.1.10",
"express": "4.22.1", "express": "4.22.1",
"express-rate-limit": "8.2.1", "express-rate-limit": "8.2.1",
@@ -47,7 +48,7 @@
"helmet": "8.1.0", "helmet": "8.1.0",
"i18n": "0.15.3", "i18n": "0.15.3",
"is-svg": "4.4.0", "is-svg": "4.4.0",
"jsdom-nogyp": "0.8.3", "jsdom": "24.1.3",
"lodash": "4.17.23", "lodash": "4.17.23",
"lutim": "1.0.3", "lutim": "1.0.3",
"lz-string": "git+https://github.com/hackmdio/lz-string.git#commit=6edfccb79cd8c210f03fd3bf18e41ca144fbeefb", "lz-string": "git+https://github.com/hackmdio/lz-string.git#commit=6edfccb79cd8c210f03fd3bf18e41ca144fbeefb",

377
yarn.lock
View File

@@ -5,6 +5,19 @@ __metadata:
version: 8 version: 8
cacheKey: 10 cacheKey: 10
"@asamuzakjp/css-color@npm:^3.2.0":
version: 3.2.0
resolution: "@asamuzakjp/css-color@npm:3.2.0"
dependencies:
"@csstools/css-calc": "npm:^2.1.3"
"@csstools/css-color-parser": "npm:^3.0.9"
"@csstools/css-parser-algorithms": "npm:^3.0.4"
"@csstools/css-tokenizer": "npm:^3.0.3"
lru-cache: "npm:^10.4.3"
checksum: 10/870f661460173174fef8bfebea0799ba26566f3aa7b307e5adabb7aae84fed2da68e40080104ed0c83b43c5be632ee409e65396af13bfe948a3ef4c2c729ecd9
languageName: node
linkType: hard
"@babel/code-frame@npm:^7.21.4": "@babel/code-frame@npm:^7.21.4":
version: 7.29.0 version: 7.29.0
resolution: "@babel/code-frame@npm:7.29.0" resolution: "@babel/code-frame@npm:7.29.0"
@@ -44,6 +57,52 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@csstools/color-helpers@npm:^5.1.0":
version: 5.1.0
resolution: "@csstools/color-helpers@npm:5.1.0"
checksum: 10/0138b3d5ccbe77aeccf6721fd008a53523c70e932f0c82dca24a1277ca780447e1d8357da47512ebf96358476f8764de57002f3e491920d67e69202f5a74c383
languageName: node
linkType: hard
"@csstools/css-calc@npm:^2.1.3, @csstools/css-calc@npm:^2.1.4":
version: 2.1.4
resolution: "@csstools/css-calc@npm:2.1.4"
peerDependencies:
"@csstools/css-parser-algorithms": ^3.0.5
"@csstools/css-tokenizer": ^3.0.4
checksum: 10/06975b650c0f44c60eeb7afdb3fd236f2dd607b2c622e0bc908d3f54de39eb84e0692833320d03dac04bd6c1ab0154aa3fa0dd442bd9e5f917cf14d8e2ba8d74
languageName: node
linkType: hard
"@csstools/css-color-parser@npm:^3.0.9":
version: 3.1.0
resolution: "@csstools/css-color-parser@npm:3.1.0"
dependencies:
"@csstools/color-helpers": "npm:^5.1.0"
"@csstools/css-calc": "npm:^2.1.4"
peerDependencies:
"@csstools/css-parser-algorithms": ^3.0.5
"@csstools/css-tokenizer": ^3.0.4
checksum: 10/4741095fdc4501e8e7ada4ed14fbf9dbbe6fea9b989818790ebca15657c29c62defbebacf18592cde2aa638a1d098bbe86d742d2c84ba932fbc00fac51cb8805
languageName: node
linkType: hard
"@csstools/css-parser-algorithms@npm:^3.0.4":
version: 3.0.5
resolution: "@csstools/css-parser-algorithms@npm:3.0.5"
peerDependencies:
"@csstools/css-tokenizer": ^3.0.4
checksum: 10/e93083b5cb36a3c1e7a47ce10cf62961d05bd1e4c608bb3ee50186ff740157ab0ec16a3956f7b86251efd10703034d849693201eea858ae904848c68d2d46ada
languageName: node
linkType: hard
"@csstools/css-tokenizer@npm:^3.0.3":
version: 3.0.4
resolution: "@csstools/css-tokenizer@npm:3.0.4"
checksum: 10/eb6c84c086312f6bb8758dfe2c85addd7475b0927333c5e39a4d59fb210b9810f8c346972046f95e60a721329cffe98895abe451e51de753ad1ca7a8c24ec65f
languageName: node
linkType: hard
"@dabh/diagnostics@npm:^2.0.8": "@dabh/diagnostics@npm:^2.0.8":
version: 2.0.8 version: 2.0.8
resolution: "@dabh/diagnostics@npm:2.0.8" resolution: "@dabh/diagnostics@npm:2.0.8"
@@ -1113,6 +1172,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/trusted-types@npm:^2.0.7":
version: 2.0.7
resolution: "@types/trusted-types@npm:2.0.7"
checksum: 10/8e4202766a65877efcf5d5a41b7dd458480b36195e580a3b1085ad21e948bc417d55d6f8af1fd2a7ad008015d4117d5fdfe432731157da3c68678487174e4ba3
languageName: node
linkType: hard
"@types/uglify-js@npm:*": "@types/uglify-js@npm:*":
version: 3.17.5 version: 3.17.5
resolution: "@types/uglify-js@npm:3.17.5" resolution: "@types/uglify-js@npm:3.17.5"
@@ -1468,6 +1534,7 @@ __metadata:
css-loader: "npm:5.2.7" css-loader: "npm:5.2.7"
deep-freeze: "npm:0.0.1" deep-freeze: "npm:0.0.1"
diff-match-patch: "git+https://github.com/hackmdio/diff-match-patch.git#commit=59a9395ad9fe143e601e7ae5765ed943bdd2b11e" diff-match-patch: "git+https://github.com/hackmdio/diff-match-patch.git#commit=59a9395ad9fe143e601e7ae5765ed943bdd2b11e"
dompurify: "npm:3.3.1"
ejs: "npm:3.1.10" ejs: "npm:3.1.10"
emojify.js: "npm:1.1.0" emojify.js: "npm:1.1.0"
esbuild-loader: "npm:4.4.2" esbuild-loader: "npm:4.4.2"
@@ -1503,7 +1570,7 @@ __metadata:
js-cookie: "npm:3.0.5" js-cookie: "npm:3.0.5"
js-sequence-diagrams: "git+https://github.com/hedgedoc/js-sequence-diagrams.git" js-sequence-diagrams: "git+https://github.com/hedgedoc/js-sequence-diagrams.git"
js-yaml: "npm:3.14.2" js-yaml: "npm:3.14.2"
jsdom-nogyp: "npm:0.8.3" jsdom: "npm:24.1.3"
jsonlint: "npm:1.6.3" jsonlint: "npm:1.6.3"
keymaster: "npm:1.6.2" keymaster: "npm:1.6.2"
less: "npm:4.5.1" less: "npm:4.5.1"
@@ -4549,26 +4616,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"cssom@npm:0.3.x": "cssstyle@npm:^4.0.1":
version: 0.3.8 version: 4.6.0
resolution: "cssom@npm:0.3.8" resolution: "cssstyle@npm:4.6.0"
checksum: 10/49eacc88077555e419646c0ea84ddc73c97e3a346ad7cb95e22f9413a9722d8964b91d781ce21d378bd5ae058af9a745402383fa4e35e9cdfd19654b63f892a9
languageName: node
linkType: hard
"cssom@npm:~0.2.5":
version: 0.2.5
resolution: "cssom@npm:0.2.5"
checksum: 10/d18a517545bfa751bc3d2506350e20346033871ef897ed3b1ba2f8b1972fe338b155a93ae2480e763e6ab1f0cefc5a3c6ee19fe181b8fb00ef76f06534f34b4d
languageName: node
linkType: hard
"cssstyle@npm:~0.2.3":
version: 0.2.37
resolution: "cssstyle@npm:0.2.37"
dependencies: dependencies:
cssom: "npm:0.3.x" "@asamuzakjp/css-color": "npm:^3.2.0"
checksum: 10/b3769e949b07ada1323e0751ef2574230fddc4e8e451958b5d8dacc1ada157bcfb0dc250e2e24a2872e330e05146d0441d447be7ef35ece985a00aa05dc64b86 rrweb-cssom: "npm:^0.8.0"
checksum: 10/1cb25c9d66b87adb165f978b75cdeb6f225d7e31ba30a8934666046a0be037e4e7200d359bfa79d4f1a4aef1083ea09633b81bcdb36a2f2ac888e8c73ea3a289
languageName: node languageName: node
linkType: hard linkType: hard
@@ -5250,6 +5304,16 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"data-urls@npm:^5.0.0":
version: 5.0.0
resolution: "data-urls@npm:5.0.0"
dependencies:
whatwg-mimetype: "npm:^4.0.0"
whatwg-url: "npm:^14.0.0"
checksum: 10/5c40568c31b02641a70204ff233bc4e42d33717485d074244a98661e5f2a1e80e38fe05a5755dfaf2ee549f2ab509d6a3af2a85f4b2ad2c984e5d176695eaf46
languageName: node
linkType: hard
"data-view-buffer@npm:^1.0.2": "data-view-buffer@npm:^1.0.2":
version: 1.0.2 version: 1.0.2
resolution: "data-view-buffer@npm:1.0.2" resolution: "data-view-buffer@npm:1.0.2"
@@ -5329,6 +5393,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"decimal.js@npm:^10.4.3":
version: 10.6.0
resolution: "decimal.js@npm:10.6.0"
checksum: 10/c0d45842d47c311d11b38ce7ccc911121953d4df3ebb1465d92b31970eb4f6738a065426a06094af59bee4b0d64e42e7c8984abd57b6767c64ea90cf90bb4a69
languageName: node
linkType: hard
"decode-named-character-reference@npm:^1.0.0": "decode-named-character-reference@npm:^1.0.0":
version: 1.3.0 version: 1.3.0
resolution: "decode-named-character-reference@npm:1.3.0" resolution: "decode-named-character-reference@npm:1.3.0"
@@ -5672,6 +5743,18 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"dompurify@npm:3.3.1":
version: 3.3.1
resolution: "dompurify@npm:3.3.1"
dependencies:
"@types/trusted-types": "npm:^2.0.7"
dependenciesMeta:
"@types/trusted-types":
optional: true
checksum: 10/f71cca489e628591165d16e8cf4fa4f0d3e2ee48db4d73e9d2c5bedc6f915c92f9e9f101f8c4ba790bec0cdffe7f4e1747f5e31c69dc53ce7ae20a81ff6b0022
languageName: node
linkType: hard
"domutils@npm:1.5.1": "domutils@npm:1.5.1":
version: 1.5.1 version: 1.5.1
resolution: "domutils@npm:1.5.1" resolution: "domutils@npm:1.5.1"
@@ -5939,6 +6022,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"entities@npm:^6.0.0":
version: 6.0.1
resolution: "entities@npm:6.0.1"
checksum: 10/62af1307202884349d2867f0aac5c60d8b57102ea0b0e768b16246099512c28e239254ad772d6834e7e14cb1b6f153fc3d0c031934e3183b086c86d3838d874a
languageName: node
linkType: hard
"entities@npm:~3.0.1": "entities@npm:~3.0.1":
version: 3.0.1 version: 3.0.1
resolution: "entities@npm:3.0.1" resolution: "entities@npm:3.0.1"
@@ -7206,7 +7296,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"form-data@npm:^4.0.4": "form-data@npm:^4.0.0, form-data@npm:^4.0.4":
version: 4.0.5 version: 4.0.5
resolution: "form-data@npm:4.0.5" resolution: "form-data@npm:4.0.5"
dependencies: dependencies:
@@ -7925,6 +8015,15 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"html-encoding-sniffer@npm:^4.0.0":
version: 4.0.0
resolution: "html-encoding-sniffer@npm:4.0.0"
dependencies:
whatwg-encoding: "npm:^3.1.1"
checksum: 10/e86efd493293a5671b8239bd099d42128433bb3c7b0fdc7819282ef8e118a21f5dead0ad6f358e024a4e5c84f17ebb7a9b36075220fac0a6222b207248bede6f
languageName: node
linkType: hard
"html-minifier-terser@npm:^5.0.1": "html-minifier-terser@npm:^5.0.1":
version: 5.1.1 version: 5.1.1
resolution: "html-minifier-terser@npm:5.1.1" resolution: "html-minifier-terser@npm:5.1.1"
@@ -7961,7 +8060,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"htmlparser2@npm:>= 3.1.5 <4, htmlparser2@npm:^3.9.1": "htmlparser2@npm:^3.9.1":
version: 3.10.1 version: 3.10.1
resolution: "htmlparser2@npm:3.10.1" resolution: "htmlparser2@npm:3.10.1"
dependencies: dependencies:
@@ -8018,7 +8117,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"http-proxy-agent@npm:^7.0.0": "http-proxy-agent@npm:^7.0.0, http-proxy-agent@npm:^7.0.2":
version: 7.0.2 version: 7.0.2
resolution: "http-proxy-agent@npm:7.0.2" resolution: "http-proxy-agent@npm:7.0.2"
dependencies: dependencies:
@@ -8056,7 +8155,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"https-proxy-agent@npm:^7.0.1": "https-proxy-agent@npm:^7.0.1, https-proxy-agent@npm:^7.0.5":
version: 7.0.6 version: 7.0.6
resolution: "https-proxy-agent@npm:7.0.6" resolution: "https-proxy-agent@npm:7.0.6"
dependencies: dependencies:
@@ -8098,7 +8197,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"iconv-lite@npm:0.6, iconv-lite@npm:^0.6.2, iconv-lite@npm:^0.6.3": "iconv-lite@npm:0.6, iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2, iconv-lite@npm:^0.6.3":
version: 0.6.3 version: 0.6.3
resolution: "iconv-lite@npm:0.6.3" resolution: "iconv-lite@npm:0.6.3"
dependencies: dependencies:
@@ -8762,6 +8861,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"is-potential-custom-element-name@npm:^1.0.1":
version: 1.0.1
resolution: "is-potential-custom-element-name@npm:1.0.1"
checksum: 10/ced7bbbb6433a5b684af581872afe0e1767e2d1146b2207ca0068a648fb5cab9d898495d1ac0583524faaf24ca98176a7d9876363097c2d14fee6dd324f3a1ab
languageName: node
linkType: hard
"is-primitive@npm:^2.0.0": "is-primitive@npm:^2.0.0":
version: 2.0.0 version: 2.0.0
resolution: "is-primitive@npm:2.0.0" resolution: "is-primitive@npm:2.0.0"
@@ -9098,17 +9204,37 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"jsdom-nogyp@npm:0.8.3": "jsdom@npm:24.1.3":
version: 0.8.3 version: 24.1.3
resolution: "jsdom-nogyp@npm:0.8.3" resolution: "jsdom@npm:24.1.3"
dependencies: dependencies:
cssom: "npm:~0.2.5" cssstyle: "npm:^4.0.1"
cssstyle: "npm:~0.2.3" data-urls: "npm:^5.0.0"
htmlparser2: "npm:>= 3.1.5 <4" decimal.js: "npm:^10.4.3"
nwmatcher: "npm:~1.3.1" form-data: "npm:^4.0.0"
request: "npm:2.x" html-encoding-sniffer: "npm:^4.0.0"
xmlhttprequest: "npm:>=1.5.0" http-proxy-agent: "npm:^7.0.2"
checksum: 10/0ddb3f14abd71e779ced8f456a3884bb0d0f3f94bd7d4bbfa7d5411f34c570c672f68e62346b2263961e44217243d32eb8fbde6be6e4209dcc0b72f3a7dfb6a5 https-proxy-agent: "npm:^7.0.5"
is-potential-custom-element-name: "npm:^1.0.1"
nwsapi: "npm:^2.2.12"
parse5: "npm:^7.1.2"
rrweb-cssom: "npm:^0.7.1"
saxes: "npm:^6.0.0"
symbol-tree: "npm:^3.2.4"
tough-cookie: "npm:^4.1.4"
w3c-xmlserializer: "npm:^5.0.0"
webidl-conversions: "npm:^7.0.0"
whatwg-encoding: "npm:^3.1.1"
whatwg-mimetype: "npm:^4.0.0"
whatwg-url: "npm:^14.0.0"
ws: "npm:^8.18.0"
xml-name-validator: "npm:^5.0.0"
peerDependencies:
canvas: ^2.11.2
peerDependenciesMeta:
canvas:
optional: true
checksum: 10/81e01d092a3620a9749e46572c26b21eb1fefc4e593f99e4acf3d4a803dfb091917e7b7096b3e62fab87e1d525a4030b803be1f5dbb5e7e61435d726f82f7457
languageName: node languageName: node
linkType: hard linkType: hard
@@ -11663,10 +11789,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"nwmatcher@npm:~1.3.1": "nwsapi@npm:^2.2.12":
version: 1.3.9 version: 2.2.23
resolution: "nwmatcher@npm:1.3.9" resolution: "nwsapi@npm:2.2.23"
checksum: 10/0ddaf03d7817991e0c69085f20a3cabf3d13ea33404319d693d7f289fc53e0d7b87e85e24c9f7dd8ffbeaabf09dbcf5eaff88ee86d2e4d08491952410c022e2a checksum: 10/aa4a570039c33d70b51436d1bb533f3e2c33c488ccbe9b09285c46a6cee5ef266fd60103461085c6954ba52460786a8138f042958328c7c1b4763898eb3dadfa
languageName: node languageName: node
linkType: hard linkType: hard
@@ -12127,6 +12253,15 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"parse5@npm:^7.1.2":
version: 7.3.0
resolution: "parse5@npm:7.3.0"
dependencies:
entities: "npm:^6.0.0"
checksum: 10/b0e48be20b820c655b138b86fa6fb3a790de6c891aa2aba536524f8027b4dca4fe538f11a0e5cf2f6f847d120dbb9e4822dcaeb933ff1e10850a2ef0154d1d88
languageName: node
linkType: hard
"parseurl@npm:~1.3.2, parseurl@npm:~1.3.3": "parseurl@npm:~1.3.2, parseurl@npm:~1.3.3":
version: 1.3.3 version: 1.3.3
resolution: "parseurl@npm:1.3.3" resolution: "parseurl@npm:1.3.3"
@@ -13209,7 +13344,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"psl@npm:^1.1.28": "psl@npm:^1.1.28, psl@npm:^1.1.33":
version: 1.15.0 version: 1.15.0
resolution: "psl@npm:1.15.0" resolution: "psl@npm:1.15.0"
dependencies: dependencies:
@@ -13340,6 +13475,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"querystringify@npm:^2.1.1":
version: 2.2.0
resolution: "querystringify@npm:2.2.0"
checksum: 10/46ab16f252fd892fc29d6af60966d338cdfeea68a231e9457631ffd22d67cec1e00141e0a5236a2eb16c0d7d74175d9ec1d6f963660c6f2b1c2fc85b194c5680
languageName: node
linkType: hard
"queue-microtask@npm:^1.2.2": "queue-microtask@npm:^1.2.2":
version: 1.2.3 version: 1.2.3
resolution: "queue-microtask@npm:1.2.3" resolution: "queue-microtask@npm:1.2.3"
@@ -14425,7 +14567,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"request@npm:2.x, request@npm:^2.86.0, request@npm:^2.88.0": "request@npm:^2.86.0, request@npm:^2.88.0":
version: 2.88.2 version: 2.88.2
resolution: "request@npm:2.88.2" resolution: "request@npm:2.88.2"
dependencies: dependencies:
@@ -14460,6 +14602,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"requires-port@npm:^1.0.0":
version: 1.0.0
resolution: "requires-port@npm:1.0.0"
checksum: 10/878880ee78ccdce372784f62f52a272048e2d0827c29ae31e7f99da18b62a2b9463ea03a75f277352f4697c100183debb0532371ad515a2d49d4bfe596dd4c20
languageName: node
linkType: hard
"resolve-cwd@npm:^3.0.0": "resolve-cwd@npm:^3.0.0":
version: 3.0.0 version: 3.0.0
resolution: "resolve-cwd@npm:3.0.0" resolution: "resolve-cwd@npm:3.0.0"
@@ -14611,6 +14760,20 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"rrweb-cssom@npm:^0.7.1":
version: 0.7.1
resolution: "rrweb-cssom@npm:0.7.1"
checksum: 10/e80cf25c223a823921d7ab57c0ce78f5b7ebceab857b400cce99dd4913420ce679834bc5707e8ada47d062e21ad368108a9534c314dc8d72c20aa4a4fa0ed16a
languageName: node
linkType: hard
"rrweb-cssom@npm:^0.8.0":
version: 0.8.0
resolution: "rrweb-cssom@npm:0.8.0"
checksum: 10/07521ee36fb6569c17906afad1ac7ff8f099d49ade9249e190693ac36cdf27f88d9acf0cc66978935d5d0a23fca105643d7e9125b9a9d91ed9db9e02d31d7d80
languageName: node
linkType: hard
"run-parallel@npm:^1.1.9": "run-parallel@npm:^1.1.9":
version: 1.2.0 version: 1.2.0
resolution: "run-parallel@npm:1.2.0" resolution: "run-parallel@npm:1.2.0"
@@ -14753,6 +14916,15 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"saxes@npm:^6.0.0":
version: 6.0.0
resolution: "saxes@npm:6.0.0"
dependencies:
xmlchars: "npm:^2.2.0"
checksum: 10/97b50daf6ca3a153e89842efa18a862e446248296622b7473c169c84c823ee8a16e4a43bac2f73f11fc8cb9168c73fbb0d73340f26552bac17970e9052367aa9
languageName: node
linkType: hard
"schema-utils@npm:^1.0.0": "schema-utils@npm:^1.0.0":
version: 1.0.0 version: 1.0.0
resolution: "schema-utils@npm:1.0.0" resolution: "schema-utils@npm:1.0.0"
@@ -15880,6 +16052,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"symbol-tree@npm:^3.2.4":
version: 3.2.4
resolution: "symbol-tree@npm:3.2.4"
checksum: 10/c09a00aadf279d47d0c5c46ca3b6b2fbaeb45f0a184976d599637d412d3a70bbdc043ff33effe1206dea0e36e0ad226cb957112e7ce9a4bf2daedf7fa4f85c53
languageName: node
linkType: hard
"tapable@npm:^1.0.0, tapable@npm:^1.1.3": "tapable@npm:^1.0.0, tapable@npm:^1.1.3":
version: 1.1.3 version: 1.1.3
resolution: "tapable@npm:1.1.3" resolution: "tapable@npm:1.1.3"
@@ -16156,6 +16335,18 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"tough-cookie@npm:^4.1.4":
version: 4.1.4
resolution: "tough-cookie@npm:4.1.4"
dependencies:
psl: "npm:^1.1.33"
punycode: "npm:^2.1.1"
universalify: "npm:^0.2.0"
url-parse: "npm:^1.5.3"
checksum: 10/75663f4e2cd085f16af0b217e4218772adf0617fb3227171102618a54ce0187a164e505d61f773ed7d65988f8ff8a8f935d381f87da981752c1171b076b4afac
languageName: node
linkType: hard
"tough-cookie@npm:~2.5.0": "tough-cookie@npm:~2.5.0":
version: 2.5.0 version: 2.5.0
resolution: "tough-cookie@npm:2.5.0" resolution: "tough-cookie@npm:2.5.0"
@@ -16166,6 +16357,15 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"tr46@npm:^5.1.0":
version: 5.1.1
resolution: "tr46@npm:5.1.1"
dependencies:
punycode: "npm:^2.3.1"
checksum: 10/833a0e1044574da5790148fd17866d4ddaea89e022de50279967bcd6b28b4ce0d30d59eb3acf9702b60918975b3bad481400337e3a2e6326cffa5c77b874753d
languageName: node
linkType: hard
"trim-right@npm:^1.0.1": "trim-right@npm:^1.0.1":
version: 1.0.1 version: 1.0.1
resolution: "trim-right@npm:1.0.1" resolution: "trim-right@npm:1.0.1"
@@ -16715,6 +16915,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"universalify@npm:^0.2.0":
version: 0.2.0
resolution: "universalify@npm:0.2.0"
checksum: 10/e86134cb12919d177c2353196a4cc09981524ee87abf621f7bc8d249dbbbebaec5e7d1314b96061497981350df786e4c5128dbf442eba104d6e765bc260678b5
languageName: node
linkType: hard
"unpipe@npm:~1.0.0": "unpipe@npm:~1.0.0":
version: 1.0.0 version: 1.0.0
resolution: "unpipe@npm:1.0.0" resolution: "unpipe@npm:1.0.0"
@@ -16786,6 +16993,16 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"url-parse@npm:^1.5.3":
version: 1.5.10
resolution: "url-parse@npm:1.5.10"
dependencies:
querystringify: "npm:^2.1.1"
requires-port: "npm:^1.0.0"
checksum: 10/c9e96bc8c5b34e9f05ddfeffc12f6aadecbb0d971b3cc26015b58d5b44676a99f50d5aeb1e5c9e61fa4d49961ae3ab1ae997369ed44da51b2f5ac010d188e6ad
languageName: node
linkType: hard
"url@npm:0.10.3": "url@npm:0.10.3":
version: 0.10.3 version: 0.10.3
resolution: "url@npm:0.10.3" resolution: "url@npm:0.10.3"
@@ -17138,6 +17355,15 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"w3c-xmlserializer@npm:^5.0.0":
version: 5.0.0
resolution: "w3c-xmlserializer@npm:5.0.0"
dependencies:
xml-name-validator: "npm:^5.0.0"
checksum: 10/d78f59e6b4f924aa53b6dfc56949959229cae7fe05ea9374eb38d11edcec01398b7f5d7a12576bd5acc57ff446abb5c9115cd83b9d882555015437cf858d42f0
languageName: node
linkType: hard
"walk-up-path@npm:^3.0.1": "walk-up-path@npm:^3.0.1":
version: 3.0.1 version: 3.0.1
resolution: "walk-up-path@npm:3.0.1" resolution: "walk-up-path@npm:3.0.1"
@@ -17191,6 +17417,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"webidl-conversions@npm:^7.0.0":
version: 7.0.0
resolution: "webidl-conversions@npm:7.0.0"
checksum: 10/4c4f65472c010eddbe648c11b977d048dd96956a625f7f8b9d64e1b30c3c1f23ea1acfd654648426ce5c743c2108a5a757c0592f02902cf7367adb7d14e67721
languageName: node
linkType: hard
"webpack-cli@npm:4.10.0": "webpack-cli@npm:4.10.0":
version: 4.10.0 version: 4.10.0
resolution: "webpack-cli@npm:4.10.0" resolution: "webpack-cli@npm:4.10.0"
@@ -17283,6 +17516,32 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"whatwg-encoding@npm:^3.1.1":
version: 3.1.1
resolution: "whatwg-encoding@npm:3.1.1"
dependencies:
iconv-lite: "npm:0.6.3"
checksum: 10/bbef815eb67f91487c7f2ef96329743f5fd8357d7d62b1119237d25d41c7e452dff8197235b2d3c031365a17f61d3bb73ca49d0ed1582475aa4a670815e79534
languageName: node
linkType: hard
"whatwg-mimetype@npm:^4.0.0":
version: 4.0.0
resolution: "whatwg-mimetype@npm:4.0.0"
checksum: 10/894a618e2d90bf444b6f309f3ceb6e58cf21b2beaa00c8b333696958c4076f0c7b30b9d33413c9ffff7c5832a0a0c8569e5bb347ef44beded72aeefd0acd62e8
languageName: node
linkType: hard
"whatwg-url@npm:^14.0.0":
version: 14.2.0
resolution: "whatwg-url@npm:14.2.0"
dependencies:
tr46: "npm:^5.1.0"
webidl-conversions: "npm:^7.0.0"
checksum: 10/f0a95b0601c64f417c471536a2d828b4c16fe37c13662483a32f02f183ed0f441616609b0663fb791e524e8cd56d9a86dd7366b1fc5356048ccb09b576495e7c
languageName: node
linkType: hard
"which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": "which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1":
version: 1.1.1 version: 1.1.1
resolution: "which-boxed-primitive@npm:1.1.1" resolution: "which-boxed-primitive@npm:1.1.1"
@@ -17484,6 +17743,21 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"ws@npm:^8.18.0":
version: 8.19.0
resolution: "ws@npm:8.19.0"
peerDependencies:
bufferutil: ^4.0.1
utf-8-validate: ">=5.0.2"
peerDependenciesMeta:
bufferutil:
optional: true
utf-8-validate:
optional: true
checksum: 10/26e4901e93abaf73af9f26a93707c95b4845e91a7a347ec8c569e6e9be7f9df066f6c2b817b2d685544e208207898a750b78461e6e8d810c11a370771450c31b
languageName: node
linkType: hard
"ws@npm:~8.18.3": "ws@npm:~8.18.3":
version: 8.18.3 version: 8.18.3
resolution: "ws@npm:8.18.3" resolution: "ws@npm:8.18.3"
@@ -17528,6 +17802,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"xml-name-validator@npm:^5.0.0":
version: 5.0.0
resolution: "xml-name-validator@npm:5.0.0"
checksum: 10/43f30f3f6786e406dd665acf08cd742d5f8a46486bd72517edb04b27d1bcd1599664c2a4a99fc3f1e56a3194bff588b12f178b7972bc45c8047bdc4c3ac8d4a1
languageName: node
linkType: hard
"xml2js@npm:0.6.2, xml2js@npm:^0.5.0 || ^0.6.2, xml2js@npm:^0.6.2": "xml2js@npm:0.6.2, xml2js@npm:^0.5.0 || ^0.6.2, xml2js@npm:^0.6.2":
version: 0.6.2 version: 0.6.2
resolution: "xml2js@npm:0.6.2" resolution: "xml2js@npm:0.6.2"
@@ -17568,6 +17849,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"xmlchars@npm:^2.2.0":
version: 2.2.0
resolution: "xmlchars@npm:2.2.0"
checksum: 10/4ad5924974efd004a47cce6acf5c0269aee0e62f9a805a426db3337af7bcbd331099df174b024ace4fb18971b8a56de386d2e73a1c4b020e3abd63a4a9b917f1
languageName: node
linkType: hard
"xmldom@npm:0.1.x": "xmldom@npm:0.1.x":
version: 0.1.31 version: 0.1.31
resolution: "xmldom@npm:0.1.31" resolution: "xmldom@npm:0.1.31"
@@ -17582,13 +17870,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"xmlhttprequest@npm:>=1.5.0":
version: 1.8.0
resolution: "xmlhttprequest@npm:1.8.0"
checksum: 10/4f2cc2029f863d425ba8d6ef717de7ee44cd44ceae97df45c122343ecbcd4418559fbb8bdc3fa3678ea8cb24fb31a143ed0e8f7bb302c13185bc4486d81d8399
languageName: node
linkType: hard
"xpath@npm:0.0.32": "xpath@npm:0.0.32":
version: 0.0.32 version: 0.0.32
resolution: "xpath@npm:0.0.32" resolution: "xpath@npm:0.0.32"