mediawiki/extensions/CampaignEvents: main (log #2341862)

sourcepatches

This run took 202 seconds.

From 531cff76bda2e1aef1f738026e0dc14197fdb976 Mon Sep 17 00:00:00 2001
From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org>
Date: Fri, 23 Jan 2026 12:23:02 +0000
Subject: [PATCH] build: Updating dependencies
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

composer:
* mediawiki/mediawiki-codesniffer: 48.0.0 → 49.0.0
* mediawiki/mediawiki-phan-config: 0.17.0 → 0.18.0

npm:
* api-testing: 1.7.1 → 1.7.2
* @wdio/junit-reporter: 9.15.0 → 9.23.2
* @wdio/local-runner: 9.15.0 → 9.23.2
* @wdio/spec-reporter: 9.15.0 → 9.23.2
* lodash: 4.17.21 → 4.17.23
  * https://github.com/advisories/GHSA-xxjr-mmjv-4gpg
* undici: 6.21.3, 7.16.0 → 6.23.0, 7.19.0
  * https://github.com/advisories/GHSA-g9mf-h72j-4rw9

Change-Id: Ifdce7ef87ee0484d22a040179023c077e4f2aff0
---
 composer.json     |   4 +-
 package-lock.json | 613 +++++++++++++++++++++-------------------------
 package.json      |   8 +-
 3 files changed, 285 insertions(+), 340 deletions(-)

diff --git a/composer.json b/composer.json
index c7d9210..93099b7 100644
--- a/composer.json
+++ b/composer.json
@@ -3,8 +3,8 @@
 		"php": ">8.1.7"
 	},
 	"require-dev": {
-		"mediawiki/mediawiki-codesniffer": "48.0.0",
-		"mediawiki/mediawiki-phan-config": "0.17.0",
+		"mediawiki/mediawiki-codesniffer": "49.0.0",
+		"mediawiki/mediawiki-phan-config": "0.18.0",
 		"mediawiki/minus-x": "1.1.3",
 		"php-parallel-lint/php-console-highlighter": "1.0.0",
 		"php-parallel-lint/php-parallel-lint": "1.4.0"
diff --git a/package-lock.json b/package-lock.json
index c0ec1fb..26ff3fd 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,12 +10,12 @@
 				"@vue/test-utils": "^2.4.6",
 				"@vue/vue3-jest": "^29.2.6",
 				"@wdio/cli": "9.18.4",
-				"@wdio/junit-reporter": "9.15.0",
-				"@wdio/local-runner": "9.15.0",
+				"@wdio/junit-reporter": "9.23.2",
+				"@wdio/local-runner": "9.23.2",
 				"@wdio/mocha-framework": "9.15.0",
-				"@wdio/spec-reporter": "9.15.0",
+				"@wdio/spec-reporter": "9.23.2",
 				"@wikimedia/codex": "2.3.2",
-				"api-testing": "1.7.1",
+				"api-testing": "1.7.2",
 				"eslint-config-wikimedia": "0.32.3",
 				"grunt": "1.6.1",
 				"grunt-banana-checker": "0.13.0",
@@ -5093,7 +5093,6 @@
 			"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz",
 			"integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==",
 			"dev": true,
-			"license": "MIT",
 			"engines": {
 				"node": "^14.21.3 || >=16"
 			},
@@ -5147,11 +5146,10 @@
 			"license": "MIT"
 		},
 		"node_modules/@paralleldrive/cuid2": {
-			"version": "2.2.2",
-			"resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz",
-			"integrity": "sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==",
+			"version": "2.3.1",
+			"resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.3.1.tgz",
+			"integrity": "sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@noble/hashes": "^1.1.5"
 			}
@@ -6191,14 +6189,13 @@
 			}
 		},
 		"node_modules/@wdio/dot-reporter": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/dot-reporter/-/dot-reporter-9.15.0.tgz",
-			"integrity": "sha512-dga+nwqZtsruAnERYGXa41O/APPpG6IClXA0gk35zKe24aMez/XgU7ZDHVJ3JYGmr7XTSEGiWXudvthaX/EbSg==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/dot-reporter/-/dot-reporter-9.23.2.tgz",
+			"integrity": "sha512-3+5y7P4GS7UTIgr6zPhxKHMmDSwiNjgdwnWIUYXr2eQLcpnPGhc9GL1IEDgQEAcziXG9BfaKzZQHi+vH89PR5w==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
-				"@wdio/reporter": "9.15.0",
-				"@wdio/types": "9.15.0",
+				"@wdio/reporter": "9.23.2",
+				"@wdio/types": "9.23.2",
 				"chalk": "^5.0.1"
 			},
 			"engines": {
@@ -6206,11 +6203,10 @@
 			}
 		},
 		"node_modules/@wdio/dot-reporter/node_modules/@wdio/types": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.15.0.tgz",
-			"integrity": "sha512-hR0Dm9TsrjtgOLWOjUMYTOB1hWIlnDzFgZt7XGOzI9Ig8Qa+TDfZSFaZukGxqLIZS/eGhxpnunSHaTAXwJIxYA==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.23.2.tgz",
+			"integrity": "sha512-ryfrERGsNp+aCcrTE1rFU6cbmDj8GHZ04R9k52KNt2u1a6bv3Eh5A/cUA0hXuMdEUfsc8ePLYdwQyOLFydZ0ig==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@types/node": "^20.1.0"
 			},
@@ -6241,14 +6237,13 @@
 			}
 		},
 		"node_modules/@wdio/junit-reporter": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/junit-reporter/-/junit-reporter-9.15.0.tgz",
-			"integrity": "sha512-ZulPH628zp/V1IolHtMkLPEmlWeoAa4Go5hAe46wyfB879PHD9bm5RUXZYJvVAphlvvSljpXd4YOqINN0hWVuQ==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/junit-reporter/-/junit-reporter-9.23.2.tgz",
+			"integrity": "sha512-pB5iVEMG2PUNOtdgb274QyWwLDYjinRUhzajCmYMMF4qGBRvnGdH+1+AHZvE/j71QxMXJT1y69QGHsNJmdFbPQ==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
-				"@wdio/reporter": "9.15.0",
-				"@wdio/types": "9.15.0",
+				"@wdio/reporter": "9.23.2",
+				"@wdio/types": "9.23.2",
 				"json-stringify-safe": "^5.0.1",
 				"junit-report-builder": "^5.1.1"
 			},
@@ -6257,11 +6252,10 @@
 			}
 		},
 		"node_modules/@wdio/junit-reporter/node_modules/@wdio/types": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.15.0.tgz",
-			"integrity": "sha512-hR0Dm9TsrjtgOLWOjUMYTOB1hWIlnDzFgZt7XGOzI9Ig8Qa+TDfZSFaZukGxqLIZS/eGhxpnunSHaTAXwJIxYA==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.23.2.tgz",
+			"integrity": "sha512-ryfrERGsNp+aCcrTE1rFU6cbmDj8GHZ04R9k52KNt2u1a6bv3Eh5A/cUA0hXuMdEUfsc8ePLYdwQyOLFydZ0ig==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@types/node": "^20.1.0"
 			},
@@ -6270,18 +6264,19 @@
 			}
 		},
 		"node_modules/@wdio/local-runner": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/local-runner/-/local-runner-9.15.0.tgz",
-			"integrity": "sha512-SbmQpzXSxaLvvjDAJpHvfRq5Df9nfdD3LxOM/L4QytI09rK3Y94Re2QEFIk1MyFmUAuoIgJ99L4TSRw9hhrIbg==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/local-runner/-/local-runner-9.23.2.tgz",
+			"integrity": "sha512-tS8l2iaQc5aQav2LYYXx296F9KpdrU4/dmw5t9n9baXgdu8CKyGEd9orhTFQ7fYR55wFJ/85toQNOvIQHtIZrA==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@types/node": "^20.1.0",
-				"@wdio/logger": "9.15.0",
-				"@wdio/repl": "9.4.4",
-				"@wdio/runner": "9.15.0",
-				"@wdio/types": "9.15.0",
-				"async-exit-hook": "^2.0.1",
+				"@wdio/logger": "9.18.0",
+				"@wdio/repl": "9.16.2",
+				"@wdio/runner": "9.23.2",
+				"@wdio/types": "9.23.2",
+				"@wdio/xvfb": "9.23.2",
+				"exit-hook": "^4.0.0",
+				"expect-webdriverio": "^5.3.4",
 				"split2": "^4.1.0",
 				"stream-buffers": "^3.0.2"
 			},
@@ -6289,28 +6284,11 @@
 				"node": ">=18.20.0"
 			}
 		},
-		"node_modules/@wdio/local-runner/node_modules/@wdio/logger": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-9.15.0.tgz",
-			"integrity": "sha512-3IkaissyOsUQwg8IinkVm1svsvRMGJpFyaSiEhQ0oQXD7mnWrNVFSU9kmeFvbKAtoc4j60FRjU6XqtH94xRceg==",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"chalk": "^5.1.2",
-				"loglevel": "^1.6.0",
-				"loglevel-plugin-prefix": "^0.8.4",
-				"strip-ansi": "^7.1.0"
-			},
-			"engines": {
-				"node": ">=18.20.0"
-			}
-		},
 		"node_modules/@wdio/local-runner/node_modules/@wdio/types": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.15.0.tgz",
-			"integrity": "sha512-hR0Dm9TsrjtgOLWOjUMYTOB1hWIlnDzFgZt7XGOzI9Ig8Qa+TDfZSFaZukGxqLIZS/eGhxpnunSHaTAXwJIxYA==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.23.2.tgz",
+			"integrity": "sha512-ryfrERGsNp+aCcrTE1rFU6cbmDj8GHZ04R9k52KNt2u1a6bv3Eh5A/cUA0hXuMdEUfsc8ePLYdwQyOLFydZ0ig==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@types/node": "^20.1.0"
 			},
@@ -6415,11 +6393,10 @@
 			"license": "MIT"
 		},
 		"node_modules/@wdio/repl": {
-			"version": "9.4.4",
-			"resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-9.4.4.tgz",
-			"integrity": "sha512-kchPRhoG/pCn4KhHGiL/ocNhdpR8OkD2e6sANlSUZ4TGBVi86YSIEjc2yXUwLacHknC/EnQk/SFnqd4MsNjGGg==",
+			"version": "9.16.2",
+			"resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-9.16.2.tgz",
+			"integrity": "sha512-FLTF0VL6+o5BSTCO7yLSXocm3kUnu31zYwzdsz4n9s5YWt83sCtzGZlZpt7TaTzb3jVUfxuHNQDTb8UMkCu0lQ==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@types/node": "^20.1.0"
 			},
@@ -6428,44 +6405,26 @@
 			}
 		},
 		"node_modules/@wdio/reporter": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-9.15.0.tgz",
-			"integrity": "sha512-p120dZr+fUQ7HE54L/RDG/7BfE/LkFORyNaZ/G2KE6gEr8gIyL3sW9kVbTZtYOBW68KgU+CC7x4yxfZCXfRUuw==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-9.23.2.tgz",
+			"integrity": "sha512-+L1knNyQl+Xs+/VkM5JOX/HINe+g3ZVWt0Scsb9DcOCll8xG8jisxArutZLo+UuV6Bm1BzqfJJb/+ae04EuRAQ==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@types/node": "^20.1.0",
-				"@wdio/logger": "9.15.0",
-				"@wdio/types": "9.15.0",
-				"diff": "^7.0.0",
+				"@wdio/logger": "9.18.0",
+				"@wdio/types": "9.23.2",
+				"diff": "^8.0.2",
 				"object-inspect": "^1.12.0"
 			},
 			"engines": {
 				"node": ">=18.20.0"
 			}
 		},
-		"node_modules/@wdio/reporter/node_modules/@wdio/logger": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-9.15.0.tgz",
-			"integrity": "sha512-3IkaissyOsUQwg8IinkVm1svsvRMGJpFyaSiEhQ0oQXD7mnWrNVFSU9kmeFvbKAtoc4j60FRjU6XqtH94xRceg==",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"chalk": "^5.1.2",
-				"loglevel": "^1.6.0",
-				"loglevel-plugin-prefix": "^0.8.4",
-				"strip-ansi": "^7.1.0"
-			},
-			"engines": {
-				"node": ">=18.20.0"
-			}
-		},
 		"node_modules/@wdio/reporter/node_modules/@wdio/types": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.15.0.tgz",
-			"integrity": "sha512-hR0Dm9TsrjtgOLWOjUMYTOB1hWIlnDzFgZt7XGOzI9Ig8Qa+TDfZSFaZukGxqLIZS/eGhxpnunSHaTAXwJIxYA==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.23.2.tgz",
+			"integrity": "sha512-ryfrERGsNp+aCcrTE1rFU6cbmDj8GHZ04R9k52KNt2u1a6bv3Eh5A/cUA0hXuMdEUfsc8ePLYdwQyOLFydZ0ig==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@types/node": "^20.1.0"
 			},
@@ -6474,38 +6433,47 @@
 			}
 		},
 		"node_modules/@wdio/runner": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/runner/-/runner-9.15.0.tgz",
-			"integrity": "sha512-KHDM4L02Aqmmsi83Yum2c026eNqpQysrMPnHiSzZm0+wMmDNLIMwq6xAj/vlBHDiVgrSKho3LlMz7mNyagkkgw==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/runner/-/runner-9.23.2.tgz",
+			"integrity": "sha512-joFHYO4jnDixsBRM6tJ/nVeH15UNIthIAp2Yky+yPsh1HkM+x9gZG5ZT0TnSXw/E2tQRb2yO3d+jsEHedsE0jw==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@types/node": "^20.11.28",
-				"@wdio/config": "9.15.0",
-				"@wdio/dot-reporter": "9.15.0",
-				"@wdio/globals": "9.15.0",
-				"@wdio/logger": "9.15.0",
-				"@wdio/types": "9.15.0",
-				"@wdio/utils": "9.15.0",
+				"@wdio/config": "9.23.2",
+				"@wdio/dot-reporter": "9.23.2",
+				"@wdio/globals": "9.23.0",
+				"@wdio/logger": "9.18.0",
+				"@wdio/types": "9.23.2",
+				"@wdio/utils": "9.23.2",
 				"deepmerge-ts": "^7.0.3",
-				"expect-webdriverio": "^5.1.0",
-				"webdriver": "9.15.0",
-				"webdriverio": "9.15.0"
+				"webdriver": "9.23.2",
+				"webdriverio": "9.23.2"
 			},
 			"engines": {
 				"node": ">=18.20.0"
+			},
+			"peerDependencies": {
+				"expect-webdriverio": "^5.3.4",
+				"webdriverio": "^9.0.0"
+			},
+			"peerDependenciesMeta": {
+				"expect-webdriverio": {
+					"optional": false
+				},
+				"webdriverio": {
+					"optional": false
+				}
 			}
 		},
 		"node_modules/@wdio/runner/node_modules/@wdio/config": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/config/-/config-9.15.0.tgz",
-			"integrity": "sha512-IQzSZx2Y0KdAVWHSdcBLkuUjCmYtOnc1oDY7Psi814wDR7dEPVOuKgMo8ZZ0P1yhioMzqvy5tBemYSzj7CrFTA==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/config/-/config-9.23.2.tgz",
+			"integrity": "sha512-19Z+AIQ1NUpr6ncTumjSthm6A7c3DbaGTp+VCdcyN+vHYOK4WsWIomSk+uSbFosYFQVGRjCaHaeGSnC8GNPGYQ==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
-				"@wdio/logger": "9.15.0",
-				"@wdio/types": "9.15.0",
-				"@wdio/utils": "9.15.0",
+				"@wdio/logger": "9.18.0",
+				"@wdio/types": "9.23.2",
+				"@wdio/utils": "9.23.2",
 				"deepmerge-ts": "^7.0.3",
 				"glob": "^10.2.2",
 				"import-meta-resolve": "^4.0.0"
@@ -6515,48 +6483,37 @@
 			}
 		},
 		"node_modules/@wdio/runner/node_modules/@wdio/globals": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/globals/-/globals-9.15.0.tgz",
-			"integrity": "sha512-4bEnqoHr676x4hyq7yOp+V+wVgclisNeOwMyLPEIJOv+cAAxESzIOdFyiQcbAu7gq+HUIuoWMZGlV9UgDnXh1w==",
+			"version": "9.23.0",
+			"resolved": "https://registry.npmjs.org/@wdio/globals/-/globals-9.23.0.tgz",
+			"integrity": "sha512-OmwPKV8c5ecLqo+EkytN7oUeYfNmRI4uOXGIR1ybP7AK5Zz+l9R0dGfoadEuwi1aZXAL0vwuhtq3p0OL3dfqHQ==",
 			"dev": true,
-			"license": "MIT",
 			"engines": {
 				"node": ">=18.20.0"
 			},
-			"optionalDependencies": {
-				"expect-webdriverio": "^5.1.0",
-				"webdriverio": "9.15.0"
-			}
-		},
-		"node_modules/@wdio/runner/node_modules/@wdio/logger": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-9.15.0.tgz",
-			"integrity": "sha512-3IkaissyOsUQwg8IinkVm1svsvRMGJpFyaSiEhQ0oQXD7mnWrNVFSU9kmeFvbKAtoc4j60FRjU6XqtH94xRceg==",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"chalk": "^5.1.2",
-				"loglevel": "^1.6.0",
-				"loglevel-plugin-prefix": "^0.8.4",
-				"strip-ansi": "^7.1.0"
+			"peerDependencies": {
+				"expect-webdriverio": "^5.3.4",
+				"webdriverio": "^9.0.0"
 			},
-			"engines": {
-				"node": ">=18.20.0"
+			"peerDependenciesMeta": {
+				"expect-webdriverio": {
+					"optional": false
+				},
+				"webdriverio": {
+					"optional": false
+				}
 			}
 		},
 		"node_modules/@wdio/runner/node_modules/@wdio/protocols": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-9.15.0.tgz",
-			"integrity": "sha512-5O7bwiG7t8nmSVOx888YryO/9AQgQ7p/Ecd9rS13UyDQL169HmVKXP0vvJKGH3X+oeE92U1wVrwrIl4Xx3BQ6Q==",
-			"dev": true,
-			"license": "MIT"
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-9.23.2.tgz",
+			"integrity": "sha512-pmCYOYI2N89QCC8IaiHwaWyP0mR8T1iKkEGpoTq2XVihp7VK/lfPvieyeZT5/e28MadYLJsDQ603pbu5J1NRDg==",
+			"dev": true
 		},
 		"node_modules/@wdio/runner/node_modules/@wdio/types": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.15.0.tgz",
-			"integrity": "sha512-hR0Dm9TsrjtgOLWOjUMYTOB1hWIlnDzFgZt7XGOzI9Ig8Qa+TDfZSFaZukGxqLIZS/eGhxpnunSHaTAXwJIxYA==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.23.2.tgz",
+			"integrity": "sha512-ryfrERGsNp+aCcrTE1rFU6cbmDj8GHZ04R9k52KNt2u1a6bv3Eh5A/cUA0hXuMdEUfsc8ePLYdwQyOLFydZ0ig==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@types/node": "^20.1.0"
 			},
@@ -6565,22 +6522,22 @@
 			}
 		},
 		"node_modules/@wdio/runner/node_modules/@wdio/utils": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-9.15.0.tgz",
-			"integrity": "sha512-XuT1PE1nh4wwJfQW6IN4UT6+iv0+Yf4zhgMh5et04OX6tfrIXkWdx2SDimghDtRukp9i85DvIGWjdPEoQFQdaA==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-9.23.2.tgz",
+			"integrity": "sha512-+QfgXUWeA940AXT5l5UlrBKoHBk9GLSQE3BA+7ra1zWuFvv6SHG6M2mwplcPlOlymJMqXy8e7ZgLEoLkXuvC1Q==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@puppeteer/browsers": "^2.2.0",
-				"@wdio/logger": "9.15.0",
-				"@wdio/types": "9.15.0",
+				"@wdio/logger": "9.18.0",
+				"@wdio/types": "9.23.2",
 				"decamelize": "^6.0.0",
 				"deepmerge-ts": "^7.0.3",
-				"edgedriver": "^6.1.1",
-				"geckodriver": "^5.0.0",
+				"edgedriver": "^6.1.2",
+				"geckodriver": "^6.1.0",
 				"get-port": "^7.0.0",
 				"import-meta-resolve": "^4.0.0",
 				"locate-app": "^2.2.24",
+				"mitt": "^3.0.1",
 				"safaridriver": "^1.0.0",
 				"split2": "^4.2.0",
 				"wait-port": "^1.1.0"
@@ -6589,64 +6546,48 @@
 				"node": ">=18.20.0"
 			}
 		},
-		"node_modules/@wdio/runner/node_modules/htmlfy": {
-			"version": "0.6.7",
-			"resolved": "https://registry.npmjs.org/htmlfy/-/htmlfy-0.6.7.tgz",
-			"integrity": "sha512-r8hRd+oIM10lufovN+zr3VKPTYEIvIwqXGucidh2XQufmiw6sbUXFUFjWlfjo3AnefIDTyzykVzQ8IUVuT1peQ==",
-			"dev": true,
-			"license": "MIT"
-		},
-		"node_modules/@wdio/runner/node_modules/serialize-error": {
-			"version": "11.0.3",
-			"resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-11.0.3.tgz",
-			"integrity": "sha512-2G2y++21dhj2R7iHAdd0FIzjGwuKZld+7Pl/bTU6YIkrC2ZMbVUjm+luj6A6V34Rv9XfKJDKpTWu9W4Gse1D9g==",
+		"node_modules/@wdio/runner/node_modules/geckodriver": {
+			"version": "6.1.0",
+			"resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-6.1.0.tgz",
+			"integrity": "sha512-ZRXLa4ZaYTTgUO4Eefw+RsQCleugU2QLb1ME7qTYxxuRj51yAhfnXaItXNs5/vUzfIaDHuZ+YnSF005hfp07nQ==",
 			"dev": true,
-			"license": "MIT",
+			"hasInstallScript": true,
 			"dependencies": {
-				"type-fest": "^2.12.2"
+				"@wdio/logger": "^9.18.0",
+				"@zip.js/zip.js": "^2.8.11",
+				"decamelize": "^6.0.1",
+				"http-proxy-agent": "^7.0.2",
+				"https-proxy-agent": "^7.0.6",
+				"modern-tar": "^0.7.2"
 			},
-			"engines": {
-				"node": ">=14.16"
+			"bin": {
+				"geckodriver": "bin/geckodriver.js"
 			},
-			"funding": {
-				"url": "https://github.com/sponsors/sindresorhus"
-			}
-		},
-		"node_modules/@wdio/runner/node_modules/type-fest": {
-			"version": "2.19.0",
-			"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
-			"integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
-			"dev": true,
-			"license": "(MIT OR CC0-1.0)",
 			"engines": {
-				"node": ">=12.20"
-			},
-			"funding": {
-				"url": "https://github.com/sponsors/sindresorhus"
+				"node": ">=20.0.0"
 			}
 		},
 		"node_modules/@wdio/runner/node_modules/webdriverio": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-9.15.0.tgz",
-			"integrity": "sha512-910g6ktwXdAKGyhgCPGw9BzIKOEBBYMFN1bLwC3bW/3mFlxGHO/n70c7Sg9hrsu9VWTzv6m+1Clf27B9uz4a/Q==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-9.23.2.tgz",
+			"integrity": "sha512-VjfTw1bRJdBrzjoCu7BGThxn1JK2V7mAGvxibaBrCNIayPPQjLhVDNJPOVEiR7txM6zmOUWxhkCDxHjhMYirfQ==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@types/node": "^20.11.30",
 				"@types/sinonjs__fake-timers": "^8.1.5",
-				"@wdio/config": "9.15.0",
-				"@wdio/logger": "9.15.0",
-				"@wdio/protocols": "9.15.0",
-				"@wdio/repl": "9.4.4",
-				"@wdio/types": "9.15.0",
-				"@wdio/utils": "9.15.0",
+				"@wdio/config": "9.23.2",
+				"@wdio/logger": "9.18.0",
+				"@wdio/protocols": "9.23.2",
+				"@wdio/repl": "9.16.2",
+				"@wdio/types": "9.23.2",
+				"@wdio/utils": "9.23.2",
 				"archiver": "^7.0.1",
 				"aria-query": "^5.3.0",
 				"cheerio": "^1.0.0-rc.12",
 				"css-shorthand-properties": "^1.1.1",
 				"css-value": "^0.0.1",
 				"grapheme-splitter": "^1.0.4",
-				"htmlfy": "^0.6.0",
+				"htmlfy": "^0.8.1",
 				"is-plain-obj": "^4.1.0",
 				"jszip": "^3.10.1",
 				"lodash.clonedeep": "^4.5.0",
@@ -6654,9 +6595,9 @@
 				"query-selector-shadow-dom": "^1.0.1",
 				"resq": "^1.11.0",
 				"rgb2hex": "0.2.5",
-				"serialize-error": "^11.0.3",
+				"serialize-error": "^12.0.0",
 				"urlpattern-polyfill": "^10.0.0",
-				"webdriver": "9.15.0"
+				"webdriver": "9.23.2"
 			},
 			"engines": {
 				"node": ">=18.20.0"
@@ -6671,14 +6612,13 @@
 			}
 		},
 		"node_modules/@wdio/spec-reporter": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/spec-reporter/-/spec-reporter-9.15.0.tgz",
-			"integrity": "sha512-xu8uVGyk2HEAvdzPmspxTJMJc3UxGzdKjqNIUVpCQpVYkKOd6zm1RH2Cpdb7gsx2j/+ddYZEVhftFGR9YOQF6g==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/spec-reporter/-/spec-reporter-9.23.2.tgz",
+			"integrity": "sha512-9uwbrOFgPuF5NqixiU9db46HNJERN04beefNh4f4usJSP41Mbru0isps64qKkWSpFJhYl1LZrSGELezxH9bZ6A==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
-				"@wdio/reporter": "9.15.0",
-				"@wdio/types": "9.15.0",
+				"@wdio/reporter": "9.23.2",
+				"@wdio/types": "9.23.2",
 				"chalk": "^5.1.2",
 				"easy-table": "^1.2.0",
 				"pretty-ms": "^9.0.0"
@@ -6688,11 +6628,10 @@
 			}
 		},
 		"node_modules/@wdio/spec-reporter/node_modules/@wdio/types": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.15.0.tgz",
-			"integrity": "sha512-hR0Dm9TsrjtgOLWOjUMYTOB1hWIlnDzFgZt7XGOzI9Ig8Qa+TDfZSFaZukGxqLIZS/eGhxpnunSHaTAXwJIxYA==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.23.2.tgz",
+			"integrity": "sha512-ryfrERGsNp+aCcrTE1rFU6cbmDj8GHZ04R9k52KNt2u1a6bv3Eh5A/cUA0hXuMdEUfsc8ePLYdwQyOLFydZ0ig==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@types/node": "^20.1.0"
 			},
@@ -6739,6 +6678,18 @@
 				"node": ">=18.20.0"
 			}
 		},
+		"node_modules/@wdio/xvfb": {
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/xvfb/-/xvfb-9.23.2.tgz",
+			"integrity": "sha512-48KiET6Phmu7SIQgpTXSn7eRJK6MJdTKib2MLT5WTKIJ+t0OyGKl/ESXi6tzFrGFPzLkvogSIRy8O2sKM0PcbA==",
+			"dev": true,
+			"dependencies": {
+				"@wdio/logger": "9.18.0"
+			},
+			"engines": {
+				"node": ">=18"
+			}
+		},
 		"node_modules/@wikimedia/codex": {
 			"version": "2.3.2",
 			"resolved": "https://registry.npmjs.org/@wikimedia/codex/-/codex-2.3.2.tgz",
@@ -6767,15 +6718,14 @@
 			}
 		},
 		"node_modules/@zip.js/zip.js": {
-			"version": "2.8.2",
-			"resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.8.2.tgz",
-			"integrity": "sha512-PI6UdgpSeVoGvzguKHmy2bwOqI3UYkntLZOCpyJSKIi7234c5aJmQYkJB/P4P2YUJkqhbqvu7iM2/0eJZ178nA==",
+			"version": "2.8.15",
+			"resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.8.15.tgz",
+			"integrity": "sha512-HZKJLFe4eGVgCe9J87PnijY7T1Zn638bEHS+Fm/ygHZozRpefzWcOYfPaP52S8pqk9g4xN3+LzMDl3Lv9dLglA==",
 			"dev": true,
-			"license": "BSD-3-Clause",
 			"engines": {
 				"bun": ">=0.7.0",
 				"deno": ">=1.0.0",
-				"node": ">=16.5.0"
+				"node": ">=18.0.0"
 			}
 		},
 		"node_modules/abab": {
@@ -6970,14 +6920,13 @@
 			}
 		},
 		"node_modules/api-testing": {
-			"version": "1.7.1",
-			"resolved": "https://registry.npmjs.org/api-testing/-/api-testing-1.7.1.tgz",
-			"integrity": "sha512-h6eqLa9uOOpbBXGN6/s91GquV1YprC1XLVtWIRv/25XWFRqHibIBwuXjqcUqFSsU1fgYvfclSMRXuUcCvEmX6A==",
+			"version": "1.7.2",
+			"resolved": "https://registry.npmjs.org/api-testing/-/api-testing-1.7.2.tgz",
+			"integrity": "sha512-W6vgHMjmTUMq8He4pRdpLNjfkBre0N/ygv6tT6jrWZQdZlBWDZHi+0pEg8FxBi0U9QzhUfaATrPZkfnF7YVt3g==",
 			"dev": true,
-			"license": "ISC",
 			"dependencies": {
 				"chai": "4.5.0",
-				"supertest": "7.1.0"
+				"supertest": "7.2.2"
 			},
 			"engines": {
 				"node": ">= 14.18.0"
@@ -7168,8 +7117,7 @@
 			"version": "2.0.6",
 			"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
 			"integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==",
-			"dev": true,
-			"license": "MIT"
+			"dev": true
 		},
 		"node_modules/assertion-error": {
 			"version": "1.1.0",
@@ -7761,7 +7709,6 @@
 			"resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
 			"integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"call-bind-apply-helpers": "^1.0.2",
 				"get-intrinsic": "^1.3.0"
@@ -7954,11 +7901,10 @@
 			}
 		},
 		"node_modules/cheerio/node_modules/undici": {
-			"version": "7.16.0",
-			"resolved": "https://registry.npmjs.org/undici/-/undici-7.16.0.tgz",
-			"integrity": "sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==",
+			"version": "7.19.0",
+			"resolved": "https://registry.npmjs.org/undici/-/undici-7.19.0.tgz",
+			"integrity": "sha512-Heho1hJD81YChi+uS2RkSjcVO+EQLmLSyUlHyp7Y/wFbxQaGb4WXVKD073JytrjXJVkSZVzoE2MCSOKugFGtOQ==",
 			"dev": true,
-			"license": "MIT",
 			"engines": {
 				"node": ">=20.18.1"
 			}
@@ -8220,7 +8166,6 @@
 			"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz",
 			"integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==",
 			"dev": true,
-			"license": "MIT",
 			"funding": {
 				"url": "https://github.com/sponsors/sindresorhus"
 			}
@@ -8307,12 +8252,20 @@
 			"dev": true,
 			"license": "MIT"
 		},
+		"node_modules/cookie-signature": {
+			"version": "1.2.2",
+			"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz",
+			"integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==",
+			"dev": true,
+			"engines": {
+				"node": ">=6.6.0"
+			}
+		},
 		"node_modules/cookiejar": {
 			"version": "2.1.4",
 			"resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz",
 			"integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==",
-			"dev": true,
-			"license": "MIT"
+			"dev": true
 		},
 		"node_modules/core-js-compat": {
 			"version": "3.45.1",
@@ -8939,18 +8892,16 @@
 			"resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz",
 			"integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==",
 			"dev": true,
-			"license": "ISC",
 			"dependencies": {
 				"asap": "^2.0.0",
 				"wrappy": "1"
 			}
 		},
 		"node_modules/diff": {
-			"version": "7.0.0",
-			"resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz",
-			"integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==",
+			"version": "8.0.3",
+			"resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz",
+			"integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==",
 			"dev": true,
-			"license": "BSD-3-Clause",
 			"engines": {
 				"node": ">=0.3.1"
 			}
@@ -10650,6 +10601,18 @@
 				"node": ">= 0.8.0"
 			}
 		},
+		"node_modules/exit-hook": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-4.0.0.tgz",
+			"integrity": "sha512-Fqs7ChZm72y40wKjOFXBKg7nJZvQJmewP5/7LtePDdnah/+FH9Hp5sgMujSCMPXlxOAW2//1jrW9pnsY7o20vQ==",
+			"dev": true,
+			"engines": {
+				"node": ">=18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
 		"node_modules/expand-tilde": {
 			"version": "2.0.2",
 			"resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
@@ -10874,8 +10837,7 @@
 			"version": "2.1.1",
 			"resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
 			"integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
-			"dev": true,
-			"license": "MIT"
+			"dev": true
 		},
 		"node_modules/fast-uri": {
 			"version": "3.1.0",
@@ -11175,11 +11137,10 @@
 			}
 		},
 		"node_modules/form-data": {
-			"version": "4.0.4",
-			"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
-			"integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
+			"version": "4.0.5",
+			"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
+			"integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"asynckit": "^0.4.0",
 				"combined-stream": "^1.0.8",
@@ -11209,7 +11170,6 @@
 			"resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz",
 			"integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@paralleldrive/cuid2": "^2.2.2",
 				"dezalgo": "^1.0.4",
@@ -16555,11 +16515,10 @@
 			}
 		},
 		"node_modules/lodash": {
-			"version": "4.17.21",
-			"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
-			"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
-			"dev": true,
-			"license": "MIT"
+			"version": "4.17.23",
+			"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
+			"integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==",
+			"dev": true
 		},
 		"node_modules/lodash.clonedeep": {
 			"version": "4.5.0",
@@ -16862,7 +16821,6 @@
 			"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
 			"integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
 			"dev": true,
-			"license": "MIT",
 			"engines": {
 				"node": ">= 0.6"
 			}
@@ -16899,7 +16857,6 @@
 			"resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
 			"integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
 			"dev": true,
-			"license": "MIT",
 			"bin": {
 				"mime": "cli.js"
 			},
@@ -17072,11 +17029,10 @@
 			}
 		},
 		"node_modules/mocha/node_modules/diff": {
-			"version": "5.2.0",
-			"resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
-			"integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
+			"version": "5.2.2",
+			"resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz",
+			"integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==",
 			"dev": true,
-			"license": "BSD-3-Clause",
 			"engines": {
 				"node": ">=0.3.1"
 			}
@@ -17242,6 +17198,15 @@
 				"node": ">=10"
 			}
 		},
+		"node_modules/modern-tar": {
+			"version": "0.7.3",
+			"resolved": "https://registry.npmjs.org/modern-tar/-/modern-tar-0.7.3.tgz",
+			"integrity": "sha512-4W79zekKGyYU4JXVmB78DOscMFaJth2gGhgfTl2alWE4rNe3nf4N2pqenQ0rEtIewrnD79M687Ouba3YGTLOvg==",
+			"dev": true,
+			"engines": {
+				"node": ">=18.0.0"
+			}
+		},
 		"node_modules/ms": {
 			"version": "2.1.3",
 			"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -18401,11 +18366,10 @@
 			"license": "MIT"
 		},
 		"node_modules/qs": {
-			"version": "6.14.0",
-			"resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
-			"integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==",
+			"version": "6.14.1",
+			"resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz",
+			"integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==",
 			"dev": true,
-			"license": "BSD-3-Clause",
 			"dependencies": {
 				"side-channel": "^1.1.0"
 			},
@@ -19342,7 +19306,6 @@
 			"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
 			"integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"es-errors": "^1.3.0",
 				"object-inspect": "^1.13.3",
@@ -19362,7 +19325,6 @@
 			"resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
 			"integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"es-errors": "^1.3.0",
 				"object-inspect": "^1.13.3"
@@ -19379,7 +19341,6 @@
 			"resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
 			"integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"call-bound": "^1.0.2",
 				"es-errors": "^1.3.0",
@@ -19398,7 +19359,6 @@
 			"resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
 			"integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"call-bound": "^1.0.2",
 				"es-errors": "^1.3.0",
@@ -20413,37 +20373,34 @@
 			}
 		},
 		"node_modules/superagent": {
-			"version": "9.0.2",
-			"resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz",
-			"integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==",
-			"deprecated": "Please upgrade to superagent v10.2.2+, see release notes at https://github.com/forwardemail/superagent/releases/tag/v10.2.2 - maintenance is supported by Forward Email @ https://forwardemail.net",
+			"version": "10.3.0",
+			"resolved": "https://registry.npmjs.org/superagent/-/superagent-10.3.0.tgz",
+			"integrity": "sha512-B+4Ik7ROgVKrQsXTV0Jwp2u+PXYLSlqtDAhYnkkD+zn3yg8s/zjA2MeGayPoY/KICrbitwneDHrjSotxKL+0XQ==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
-				"component-emitter": "^1.3.0",
+				"component-emitter": "^1.3.1",
 				"cookiejar": "^2.1.4",
-				"debug": "^4.3.4",
+				"debug": "^4.3.7",
 				"fast-safe-stringify": "^2.1.1",
-				"form-data": "^4.0.0",
-				"formidable": "^3.5.1",
+				"form-data": "^4.0.5",
+				"formidable": "^3.5.4",
 				"methods": "^1.1.2",
 				"mime": "2.6.0",
-				"qs": "^6.11.0"
+				"qs": "^6.14.1"
 			},
 			"engines": {
 				"node": ">=14.18.0"
 			}
 		},
 		"node_modules/supertest": {
-			"version": "7.1.0",
-			"resolved": "https://registry.npmjs.org/supertest/-/supertest-7.1.0.tgz",
-			"integrity": "sha512-5QeSO8hSrKghtcWEoPiO036fxH0Ii2wVQfFZSP0oqQhmjk8bOLhDFXr4JrvaFmPuEWUoq4znY3uSi8UzLKxGqw==",
-			"deprecated": "Please upgrade to supertest v7.1.3+, see release notes at https://github.com/forwardemail/supertest/releases/tag/v7.1.3 - maintenance is supported by Forward Email @ https://forwardemail.net",
+			"version": "7.2.2",
+			"resolved": "https://registry.npmjs.org/supertest/-/supertest-7.2.2.tgz",
+			"integrity": "sha512-oK8WG9diS3DlhdUkcFn4tkNIiIbBx9lI2ClF8K+b2/m8Eyv47LSawxUzZQSNKUrVb2KsqeTDCcjAAVPYaSLVTA==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
+				"cookie-signature": "^1.2.2",
 				"methods": "^1.1.2",
-				"superagent": "^9.0.1"
+				"superagent": "^10.3.0"
 			},
 			"engines": {
 				"node": ">=14.18.0"
@@ -20931,11 +20888,10 @@
 			}
 		},
 		"node_modules/undici": {
-			"version": "6.21.3",
-			"resolved": "https://registry.npmjs.org/undici/-/undici-6.21.3.tgz",
-			"integrity": "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==",
+			"version": "6.23.0",
+			"resolved": "https://registry.npmjs.org/undici/-/undici-6.23.0.tgz",
+			"integrity": "sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==",
 			"dev": true,
-			"license": "MIT",
 			"engines": {
 				"node": ">=18.17"
 			}
@@ -21357,21 +21313,21 @@
 			}
 		},
 		"node_modules/webdriver": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/webdriver/-/webdriver-9.15.0.tgz",
-			"integrity": "sha512-JCW5xvhZtL6kjbckdePgVYMOlvWbh22F1VFkIf9pw3prwXI2EHED5Eq/nfDnNfHiqr0AfFKWmIDPziSafrVv4Q==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/webdriver/-/webdriver-9.23.2.tgz",
+			"integrity": "sha512-HZy3eydZbmex0pbyLwHaDsAyZ+S+V4XQTdGK/nAOi4uPa74U6yT9vXqtb+3B+5/LDM7L8kTD6Z3b1y4gB4pmTw==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@types/node": "^20.1.0",
 				"@types/ws": "^8.5.3",
-				"@wdio/config": "9.15.0",
-				"@wdio/logger": "9.15.0",
-				"@wdio/protocols": "9.15.0",
-				"@wdio/types": "9.15.0",
-				"@wdio/utils": "9.15.0",
+				"@wdio/config": "9.23.2",
+				"@wdio/logger": "9.18.0",
+				"@wdio/protocols": "9.23.2",
+				"@wdio/types": "9.23.2",
+				"@wdio/utils": "9.23.2",
 				"deepmerge-ts": "^7.0.3",
-				"undici": "^6.20.1",
+				"https-proxy-agent": "^7.0.6",
+				"undici": "^6.21.3",
 				"ws": "^8.8.0"
 			},
 			"engines": {
@@ -21379,15 +21335,14 @@
 			}
 		},
 		"node_modules/webdriver/node_modules/@wdio/config": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/config/-/config-9.15.0.tgz",
-			"integrity": "sha512-IQzSZx2Y0KdAVWHSdcBLkuUjCmYtOnc1oDY7Psi814wDR7dEPVOuKgMo8ZZ0P1yhioMzqvy5tBemYSzj7CrFTA==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/config/-/config-9.23.2.tgz",
+			"integrity": "sha512-19Z+AIQ1NUpr6ncTumjSthm6A7c3DbaGTp+VCdcyN+vHYOK4WsWIomSk+uSbFosYFQVGRjCaHaeGSnC8GNPGYQ==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
-				"@wdio/logger": "9.15.0",
-				"@wdio/types": "9.15.0",
-				"@wdio/utils": "9.15.0",
+				"@wdio/logger": "9.18.0",
+				"@wdio/types": "9.23.2",
+				"@wdio/utils": "9.23.2",
 				"deepmerge-ts": "^7.0.3",
 				"glob": "^10.2.2",
 				"import-meta-resolve": "^4.0.0"
@@ -21396,35 +21351,17 @@
 				"node": ">=18.20.0"
 			}
 		},
-		"node_modules/webdriver/node_modules/@wdio/logger": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-9.15.0.tgz",
-			"integrity": "sha512-3IkaissyOsUQwg8IinkVm1svsvRMGJpFyaSiEhQ0oQXD7mnWrNVFSU9kmeFvbKAtoc4j60FRjU6XqtH94xRceg==",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"chalk": "^5.1.2",
-				"loglevel": "^1.6.0",
-				"loglevel-plugin-prefix": "^0.8.4",
-				"strip-ansi": "^7.1.0"
-			},
-			"engines": {
-				"node": ">=18.20.0"
-			}
-		},
 		"node_modules/webdriver/node_modules/@wdio/protocols": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-9.15.0.tgz",
-			"integrity": "sha512-5O7bwiG7t8nmSVOx888YryO/9AQgQ7p/Ecd9rS13UyDQL169HmVKXP0vvJKGH3X+oeE92U1wVrwrIl4Xx3BQ6Q==",
-			"dev": true,
-			"license": "MIT"
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-9.23.2.tgz",
+			"integrity": "sha512-pmCYOYI2N89QCC8IaiHwaWyP0mR8T1iKkEGpoTq2XVihp7VK/lfPvieyeZT5/e28MadYLJsDQ603pbu5J1NRDg==",
+			"dev": true
 		},
 		"node_modules/webdriver/node_modules/@wdio/types": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.15.0.tgz",
-			"integrity": "sha512-hR0Dm9TsrjtgOLWOjUMYTOB1hWIlnDzFgZt7XGOzI9Ig8Qa+TDfZSFaZukGxqLIZS/eGhxpnunSHaTAXwJIxYA==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.23.2.tgz",
+			"integrity": "sha512-ryfrERGsNp+aCcrTE1rFU6cbmDj8GHZ04R9k52KNt2u1a6bv3Eh5A/cUA0hXuMdEUfsc8ePLYdwQyOLFydZ0ig==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@types/node": "^20.1.0"
 			},
@@ -21433,22 +21370,22 @@
 			}
 		},
 		"node_modules/webdriver/node_modules/@wdio/utils": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-9.15.0.tgz",
-			"integrity": "sha512-XuT1PE1nh4wwJfQW6IN4UT6+iv0+Yf4zhgMh5et04OX6tfrIXkWdx2SDimghDtRukp9i85DvIGWjdPEoQFQdaA==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-9.23.2.tgz",
+			"integrity": "sha512-+QfgXUWeA940AXT5l5UlrBKoHBk9GLSQE3BA+7ra1zWuFvv6SHG6M2mwplcPlOlymJMqXy8e7ZgLEoLkXuvC1Q==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@puppeteer/browsers": "^2.2.0",
-				"@wdio/logger": "9.15.0",
-				"@wdio/types": "9.15.0",
+				"@wdio/logger": "9.18.0",
+				"@wdio/types": "9.23.2",
 				"decamelize": "^6.0.0",
 				"deepmerge-ts": "^7.0.3",
-				"edgedriver": "^6.1.1",
-				"geckodriver": "^5.0.0",
+				"edgedriver": "^6.1.2",
+				"geckodriver": "^6.1.0",
 				"get-port": "^7.0.0",
 				"import-meta-resolve": "^4.0.0",
 				"locate-app": "^2.2.24",
+				"mitt": "^3.0.1",
 				"safaridriver": "^1.0.0",
 				"split2": "^4.2.0",
 				"wait-port": "^1.1.0"
@@ -21457,6 +21394,27 @@
 				"node": ">=18.20.0"
 			}
 		},
+		"node_modules/webdriver/node_modules/geckodriver": {
+			"version": "6.1.0",
+			"resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-6.1.0.tgz",
+			"integrity": "sha512-ZRXLa4ZaYTTgUO4Eefw+RsQCleugU2QLb1ME7qTYxxuRj51yAhfnXaItXNs5/vUzfIaDHuZ+YnSF005hfp07nQ==",
+			"dev": true,
+			"hasInstallScript": true,
+			"dependencies": {
+				"@wdio/logger": "^9.18.0",
+				"@zip.js/zip.js": "^2.8.11",
+				"decamelize": "^6.0.1",
+				"http-proxy-agent": "^7.0.2",
+				"https-proxy-agent": "^7.0.6",
+				"modern-tar": "^0.7.2"
+			},
+			"bin": {
+				"geckodriver": "bin/geckodriver.js"
+			},
+			"engines": {
+				"node": ">=20.0.0"
+			}
+		},
 		"node_modules/webdriverio": {
 			"version": "9.18.4",
 			"resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-9.18.4.tgz",
@@ -21502,19 +21460,6 @@
 				}
 			}
 		},
-		"node_modules/webdriverio/node_modules/@wdio/repl": {
-			"version": "9.16.2",
-			"resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-9.16.2.tgz",
-			"integrity": "sha512-FLTF0VL6+o5BSTCO7yLSXocm3kUnu31zYwzdsz4n9s5YWt83sCtzGZlZpt7TaTzb3jVUfxuHNQDTb8UMkCu0lQ==",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"@types/node": "^20.1.0"
-			},
-			"engines": {
-				"node": ">=18.20.0"
-			}
-		},
 		"node_modules/webdriverio/node_modules/webdriver": {
 			"version": "9.18.0",
 			"resolved": "https://registry.npmjs.org/webdriver/-/webdriver-9.18.0.tgz",
diff --git a/package.json b/package.json
index 42543fc..95bf0a6 100644
--- a/package.json
+++ b/package.json
@@ -14,12 +14,12 @@
 		"@vue/test-utils": "^2.4.6",
 		"@vue/vue3-jest": "^29.2.6",
 		"@wdio/cli": "9.18.4",
-		"@wdio/junit-reporter": "9.15.0",
-		"@wdio/local-runner": "9.15.0",
+		"@wdio/junit-reporter": "9.23.2",
+		"@wdio/local-runner": "9.23.2",
 		"@wdio/mocha-framework": "9.15.0",
-		"@wdio/spec-reporter": "9.15.0",
+		"@wdio/spec-reporter": "9.23.2",
 		"@wikimedia/codex": "2.3.2",
-		"api-testing": "1.7.1",
+		"api-testing": "1.7.2",
 		"eslint-config-wikimedia": "0.32.3",
 		"grunt": "1.6.1",
 		"grunt-banana-checker": "0.13.0",
-- 
2.47.3

$ date
--- stdout ---
Fri Jan 23 12:20:06 UTC 2026

--- end ---
$ git clone file:///srv/git/mediawiki-extensions-CampaignEvents.git /src/repo --depth=1 -b master
--- stderr ---
Cloning into '/src/repo'...
--- stdout ---

--- end ---
$ git config user.name libraryupgrader
--- stdout ---

--- end ---
$ git config user.email tools.libraryupgrader@tools.wmflabs.org
--- stdout ---

--- end ---
$ git submodule update --init
--- stdout ---

--- end ---
$ grr init
--- stdout ---
Installed commit-msg hook.

--- end ---
$ git show-ref refs/heads/master
--- stdout ---
e4e37d5909d8a03a13ff99572c61dbcd0cb24cd0 refs/heads/master

--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {
    "@wdio/dot-reporter": {
      "name": "@wdio/dot-reporter",
      "severity": "low",
      "isDirect": false,
      "via": [
        "@wdio/reporter"
      ],
      "effects": [
        "@wdio/runner"
      ],
      "range": "8.40.6 - 8.43.0 || 9.1.0 - 9.17.0",
      "nodes": [
        "node_modules/@wdio/dot-reporter"
      ],
      "fixAvailable": {
        "name": "@wdio/local-runner",
        "version": "9.23.2",
        "isSemVerMajor": false
      }
    },
    "@wdio/junit-reporter": {
      "name": "@wdio/junit-reporter",
      "severity": "low",
      "isDirect": true,
      "via": [
        "@wdio/reporter"
      ],
      "effects": [],
      "range": "8.40.6 - 8.43.0 || 9.1.0 - 9.17.0",
      "nodes": [
        "node_modules/@wdio/junit-reporter"
      ],
      "fixAvailable": {
        "name": "@wdio/junit-reporter",
        "version": "9.23.2",
        "isSemVerMajor": false
      }
    },
    "@wdio/local-runner": {
      "name": "@wdio/local-runner",
      "severity": "low",
      "isDirect": true,
      "via": [
        "@wdio/runner"
      ],
      "effects": [],
      "range": "9.6.2 - 9.17.0",
      "nodes": [
        "node_modules/@wdio/local-runner"
      ],
      "fixAvailable": {
        "name": "@wdio/local-runner",
        "version": "9.23.2",
        "isSemVerMajor": false
      }
    },
    "@wdio/reporter": {
      "name": "@wdio/reporter",
      "severity": "low",
      "isDirect": false,
      "via": [
        "diff"
      ],
      "effects": [
        "@wdio/dot-reporter",
        "@wdio/junit-reporter",
        "@wdio/spec-reporter"
      ],
      "range": "8.40.6 - 8.43.0 || 9.1.0 - 9.17.0",
      "nodes": [
        "node_modules/@wdio/reporter"
      ],
      "fixAvailable": {
        "name": "@wdio/local-runner",
        "version": "9.23.2",
        "isSemVerMajor": false
      }
    },
    "@wdio/runner": {
      "name": "@wdio/runner",
      "severity": "low",
      "isDirect": false,
      "via": [
        "@wdio/dot-reporter"
      ],
      "effects": [
        "@wdio/local-runner"
      ],
      "range": "9.6.2 - 9.17.0",
      "nodes": [
        "node_modules/@wdio/runner"
      ],
      "fixAvailable": {
        "name": "@wdio/local-runner",
        "version": "9.23.2",
        "isSemVerMajor": false
      }
    },
    "@wdio/spec-reporter": {
      "name": "@wdio/spec-reporter",
      "severity": "low",
      "isDirect": true,
      "via": [
        "@wdio/reporter"
      ],
      "effects": [],
      "range": "8.40.6 - 8.43.0 || 9.1.0 - 9.17.0",
      "nodes": [
        "node_modules/@wdio/spec-reporter"
      ],
      "fixAvailable": {
        "name": "@wdio/spec-reporter",
        "version": "9.23.2",
        "isSemVerMajor": false
      }
    },
    "diff": {
      "name": "diff",
      "severity": "low",
      "isDirect": false,
      "via": [
        {
          "source": 1112490,
          "name": "diff",
          "dependency": "diff",
          "title": "jsdiff has a Denial of Service vulnerability in parsePatch and applyPatch",
          "url": "https://github.com/advisories/GHSA-73rr-hh4g-fpgx",
          "severity": "low",
          "cwe": [
            "CWE-400",
            "CWE-1333"
          ],
          "cvss": {
            "score": 0,
            "vectorString": null
          },
          "range": ">=5.0.0 <5.2.2"
        },
        {
          "source": 1112491,
          "name": "diff",
          "dependency": "diff",
          "title": "jsdiff has a Denial of Service vulnerability in parsePatch and applyPatch",
          "url": "https://github.com/advisories/GHSA-73rr-hh4g-fpgx",
          "severity": "low",
          "cwe": [
            "CWE-400",
            "CWE-1333"
          ],
          "cvss": {
            "score": 0,
            "vectorString": null
          },
          "range": ">=6.0.0 <8.0.3"
        }
      ],
      "effects": [
        "@wdio/reporter"
      ],
      "range": "5.0.0 - 5.2.1 || 6.0.0 - 8.0.2",
      "nodes": [
        "node_modules/diff",
        "node_modules/mocha/node_modules/diff"
      ],
      "fixAvailable": {
        "name": "@wdio/local-runner",
        "version": "9.23.2",
        "isSemVerMajor": false
      }
    },
    "lodash": {
      "name": "lodash",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1112455,
          "name": "lodash",
          "dependency": "lodash",
          "title": "Lodash has Prototype Pollution Vulnerability in `_.unset` and `_.omit` functions",
          "url": "https://github.com/advisories/GHSA-xxjr-mmjv-4gpg",
          "severity": "moderate",
          "cwe": [
            "CWE-1321"
          ],
          "cvss": {
            "score": 6.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L"
          },
          "range": ">=4.0.0 <=4.17.22"
        }
      ],
      "effects": [],
      "range": "4.0.0 - 4.17.21",
      "nodes": [
        "node_modules/lodash"
      ],
      "fixAvailable": true
    },
    "qs": {
      "name": "qs",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1111755,
          "name": "qs",
          "dependency": "qs",
          "title": "qs's arrayLimit bypass in its bracket notation allows DoS via memory exhaustion",
          "url": "https://github.com/advisories/GHSA-6rw7-vpxm-498p",
          "severity": "high",
          "cwe": [
            "CWE-20"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": "<6.14.1"
        }
      ],
      "effects": [],
      "range": "<6.14.1",
      "nodes": [
        "node_modules/qs"
      ],
      "fixAvailable": true
    },
    "undici": {
      "name": "undici",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1112496,
          "name": "undici",
          "dependency": "undici",
          "title": "Undici has an unbounded decompression chain in HTTP responses on Node.js Fetch API via Content-Encoding leads to resource exhaustion",
          "url": "https://github.com/advisories/GHSA-g9mf-h72j-4rw9",
          "severity": "moderate",
          "cwe": [
            "CWE-770"
          ],
          "cvss": {
            "score": 5.9,
            "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": "<6.23.0"
        },
        {
          "source": 1112497,
          "name": "undici",
          "dependency": "undici",
          "title": "Undici has an unbounded decompression chain in HTTP responses on Node.js Fetch API via Content-Encoding leads to resource exhaustion",
          "url": "https://github.com/advisories/GHSA-g9mf-h72j-4rw9",
          "severity": "moderate",
          "cwe": [
            "CWE-770"
          ],
          "cvss": {
            "score": 5.9,
            "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": ">=7.0.0 <7.18.2"
        }
      ],
      "effects": [],
      "range": "<6.23.0 || >=7.0.0 <7.18.2",
      "nodes": [
        "node_modules/cheerio/node_modules/undici",
        "node_modules/undici"
      ],
      "fixAvailable": true
    }
  },
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 7,
      "moderate": 2,
      "high": 1,
      "critical": 0,
      "total": 10
    },
    "dependencies": {
      "prod": 1,
      "dev": 1573,
      "optional": 37,
      "peer": 1,
      "peerOptional": 0,
      "total": 1573
    }
  }
}

--- end ---
$ /usr/bin/composer install
--- stderr ---
No composer.lock file present. Updating dependencies to latest instead of installing from lock file. See https://getcomposer.org/install for more information.
Loading composer repositories with package information
Updating dependencies
Lock file operations: 38 installs, 0 updates, 0 removals
  - Locking composer/pcre (3.3.2)
  - Locking composer/semver (3.4.4)
  - Locking composer/spdx-licenses (1.5.9)
  - Locking composer/xdebug-handler (3.0.5)
  - Locking dealerdirect/phpcodesniffer-composer-installer (v1.2.0)
  - Locking doctrine/deprecations (1.1.5)
  - Locking felixfbecker/advanced-json-rpc (v3.2.1)
  - Locking mediawiki/mediawiki-codesniffer (v48.0.0)
  - Locking mediawiki/mediawiki-phan-config (0.17.0)
  - Locking mediawiki/minus-x (1.1.3)
  - Locking mediawiki/phan-taint-check-plugin (7.0.0)
  - Locking microsoft/tolerant-php-parser (v0.1.2)
  - Locking netresearch/jsonmapper (v4.5.0)
  - Locking phan/phan (5.5.1)
  - Locking php-parallel-lint/php-console-color (v1.0.1)
  - Locking php-parallel-lint/php-console-highlighter (v1.0.0)
  - Locking php-parallel-lint/php-parallel-lint (v1.4.0)
  - Locking phpcsstandards/phpcsextra (1.4.0)
  - Locking phpcsstandards/phpcsutils (1.1.1)
  - Locking phpdocumentor/reflection-common (2.2.0)
  - Locking phpdocumentor/reflection-docblock (5.6.6)
  - Locking phpdocumentor/type-resolver (1.12.0)
  - Locking phpstan/phpdoc-parser (2.3.1)
  - Locking psr/container (2.0.2)
  - Locking psr/log (3.0.2)
  - Locking sabre/event (5.1.7)
  - Locking squizlabs/php_codesniffer (3.13.2)
  - Locking symfony/console (v7.4.3)
  - Locking symfony/deprecation-contracts (v3.6.0)
  - Locking symfony/polyfill-ctype (v1.33.0)
  - Locking symfony/polyfill-intl-grapheme (v1.33.0)
  - Locking symfony/polyfill-intl-normalizer (v1.33.0)
  - Locking symfony/polyfill-mbstring (v1.33.0)
  - Locking symfony/polyfill-php80 (v1.33.0)
  - Locking symfony/service-contracts (v3.6.1)
  - Locking symfony/string (v8.0.1)
  - Locking tysonandre/var_representation_polyfill (0.1.3)
  - Locking webmozart/assert (2.1.2)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 38 installs, 0 updates, 0 removals
    0 [>---------------------------]    0 [->--------------------------]
  - Installing squizlabs/php_codesniffer (3.13.2): Extracting archive
  - Installing dealerdirect/phpcodesniffer-composer-installer (v1.2.0): Extracting archive
  - Installing composer/pcre (3.3.2): Extracting archive
  - Installing phpcsstandards/phpcsutils (1.1.1): Extracting archive
  - Installing phpcsstandards/phpcsextra (1.4.0): Extracting archive
  - Installing symfony/polyfill-mbstring (v1.33.0): Extracting archive
  - Installing composer/spdx-licenses (1.5.9): Extracting archive
  - Installing composer/semver (3.4.4): Extracting archive
  - Installing mediawiki/mediawiki-codesniffer (v48.0.0): Extracting archive
  - Installing tysonandre/var_representation_polyfill (0.1.3): Extracting archive
  - Installing symfony/polyfill-php80 (v1.33.0): Extracting archive
  - Installing symfony/polyfill-intl-normalizer (v1.33.0): Extracting archive
  - Installing symfony/polyfill-intl-grapheme (v1.33.0): Extracting archive
  - Installing symfony/polyfill-ctype (v1.33.0): Extracting archive
  - Installing symfony/string (v8.0.1): Extracting archive
  - Installing symfony/deprecation-contracts (v3.6.0): Extracting archive
  - Installing psr/container (2.0.2): Extracting archive
  - Installing symfony/service-contracts (v3.6.1): Extracting archive
  - Installing symfony/console (v7.4.3): Extracting archive
  - Installing sabre/event (5.1.7): Extracting archive
  - Installing netresearch/jsonmapper (v4.5.0): Extracting archive
  - Installing microsoft/tolerant-php-parser (v0.1.2): Extracting archive
  - Installing webmozart/assert (2.1.2): Extracting archive
  - Installing phpstan/phpdoc-parser (2.3.1): Extracting archive
  - Installing phpdocumentor/reflection-common (2.2.0): Extracting archive
  - Installing doctrine/deprecations (1.1.5): Extracting archive
  - Installing phpdocumentor/type-resolver (1.12.0): Extracting archive
  - Installing phpdocumentor/reflection-docblock (5.6.6): Extracting archive
  - Installing felixfbecker/advanced-json-rpc (v3.2.1): Extracting archive
  - Installing psr/log (3.0.2): Extracting archive
  - Installing composer/xdebug-handler (3.0.5): Extracting archive
  - Installing phan/phan (5.5.1): Extracting archive
  - Installing mediawiki/phan-taint-check-plugin (7.0.0): Extracting archive
  - Installing mediawiki/mediawiki-phan-config (0.17.0): Extracting archive
  - Installing mediawiki/minus-x (1.1.3): Extracting archive
  - Installing php-parallel-lint/php-console-color (v1.0.1): Extracting archive
  - Installing php-parallel-lint/php-console-highlighter (v1.0.0): Extracting archive
  - Installing php-parallel-lint/php-parallel-lint (v1.4.0): Extracting archive
  0/36 [>---------------------------]   0%
 28/36 [=====================>------]  77%
 36/36 [============================] 100%
1 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating autoload files
17 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
--- stdout ---
PHP CodeSniffer Config installed_paths set to ../../mediawiki/mediawiki-codesniffer,../../phpcsstandards/phpcsextra,../../phpcsstandards/phpcsutils

--- end ---
Upgrading n:api-testing from 1.7.1 -> 1.7.2
$ /usr/bin/npm install
--- stderr ---
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex@2.3.2',
npm WARN EBADENGINE   required: { node: '>=20.19.1', npm: '>=10.8.2' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex-icons@2.3.2',
npm WARN EBADENGINE   required: { node: '>=20.19.1', npm: '>=10.8.2' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN deprecated osenv@0.1.5: This package is no longer supported.
npm WARN deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm WARN deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated abab@2.0.6: Use your platform's native atob() and btoa() methods instead
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@8.1.0: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.1.7: Glob versions prior to v9 are no longer supported
npm WARN deprecated domexception@4.0.0: Use your platform's native DOMException instead
npm WARN deprecated node-domexception@1.0.0: Use your platform's native DOMException instead
npm WARN deprecated eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other options.
--- stdout ---

added 1548 packages, and audited 1549 packages in 27s

221 packages are looking for funding
  run `npm fund` for details

9 vulnerabilities (7 low, 2 moderate)

To address issues that do not require attention, run:
  npm audit fix

To address all issues, run:
  npm audit fix --force

Run `npm audit` for details.

--- end ---
$ package-lock-lint /src/repo/package-lock.json
--- stdout ---
Checking /src/repo/package-lock.json

--- end ---
$ /usr/bin/npm ci
--- stderr ---
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex@2.3.2',
npm WARN EBADENGINE   required: { node: '>=20.19.1', npm: '>=10.8.2' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex-icons@2.3.2',
npm WARN EBADENGINE   required: { node: '>=20.19.1', npm: '>=10.8.2' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN deprecated osenv@0.1.5: This package is no longer supported.
npm WARN deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm WARN deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated abab@2.0.6: Use your platform's native atob() and btoa() methods instead
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@8.1.0: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.1.7: Glob versions prior to v9 are no longer supported
npm WARN deprecated domexception@4.0.0: Use your platform's native DOMException instead
npm WARN deprecated node-domexception@1.0.0: Use your platform's native DOMException instead
npm WARN deprecated eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other options.
--- stdout ---

added 1548 packages, and audited 1549 packages in 32s

221 packages are looking for funding
  run `npm fund` for details

9 vulnerabilities (7 low, 2 moderate)

To address issues that do not require attention, run:
  npm audit fix

To address all issues, run:
  npm audit fix --force

Run `npm audit` for details.

--- end ---
$ /usr/bin/npm test
--- stderr ---
[baseline-browser-mapping] The data in this module is over two months old.  To ensure accurate Baseline data, please update: `npm i baseline-browser-mapping@latest -D`
[baseline-browser-mapping] The data in this module is over two months old.  To ensure accurate Baseline data, please update: `npm i baseline-browser-mapping@latest -D`
[baseline-browser-mapping] The data in this module is over two months old.  To ensure accurate Baseline data, please update: `npm i baseline-browser-mapping@latest -D`
[baseline-browser-mapping] The data in this module is over two months old.  To ensure accurate Baseline data, please update: `npm i baseline-browser-mapping@latest -D`
PASS tests/jest/ext.campaignEvents.specialPages/eventdetails/components/DeleteContributionDialog.test.js
PASS tests/jest/ext.campaignEvents.specialPages/eventdetails/components/ContributionsActionsApp.test.js
PASS tests/jest/ext.campaignEvents.specialPages/eventdetails/components/AddContributionDialog.test.js
PASS tests/jest/ext.campaignEvents.postEdit/components/App.test.js
PASS tests/jest/ext.campaignEvents.postEdit/components/EditAssociationDialog.test.js

Test Suites: 5 passed, 5 total
Tests:       47 passed, 47 total
Snapshots:   0 total
Time:        6.685 s
Ran all test suites.
--- stdout ---

> test
> grunt test && npm run test:unit

Running "eslint:all" (eslint) task

Running "stylelint:all" (stylelint) task
>> Linted 18 files without errors

Running "banana:CampaignEvents" (banana) task
>> 2 message directories checked.

Done.

> test:unit
> jest

-------------------------------------------------------------------|---------|----------|---------|---------|-------------------
File                                                               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------------------------------------------------------|---------|----------|---------|---------|-------------------
All files                                                          |   10.67 |     9.54 |   14.02 |   10.66 |                   
 resources                                                         |       0 |        0 |       0 |       0 |                   
  TimeZoneConverter.js                                             |       0 |        0 |       0 |       0 | 1-109             
 resources/ext.campaignEvents.eventpage                            |       0 |        0 |       0 |       0 |                   
  ConfirmUnregistrationDialog.js                                   |       0 |      100 |       0 |       0 | 1-33              
  EnableRegistrationDialog.js                                      |       0 |      100 |       0 |       0 | 1-34              
  EventQuestions.js                                                |       0 |        0 |       0 |       0 | 1-218             
  ManageRegistrationWidget.js                                      |       0 |        0 |       0 |       0 | 1-66              
  ParticipantRegistrationDialog.js                                 |       0 |        0 |       0 |       0 | 1-280             
  index.js                                                         |       0 |        0 |       0 |       0 | 4-325             
 resources/ext.campaignEvents.postEdit                             |       0 |        0 |       0 |       0 |                   
  index.js                                                         |       0 |        0 |       0 |       0 | 1-39              
 resources/ext.campaignEvents.postEdit/components                  |   96.22 |      100 |   85.71 |   96.15 |                   
  App.vue                                                          |    90.9 |      100 |   71.42 |    90.9 | 46-50             
  EditAssociationDialog.vue                                        |     100 |      100 |     100 |     100 |                   
 resources/ext.campaignEvents.specialPages                         |       0 |        0 |       0 |       0 |                   
  dispatcher.js                                                    |       0 |        0 |       0 |       0 | 1-19              
 resources/ext.campaignEvents.specialPages/editeventregistration   |       0 |        0 |       0 |       0 |                   
  OrganizerSelectionFieldEnhancer.js                               |       0 |        0 |       0 |       0 | 1-110             
  TimeFieldsEnhancer.js                                            |       0 |        0 |       0 |       0 | 1-198             
  index.js                                                         |       0 |      100 |       0 |       0 | 1-12              
 resources/ext.campaignEvents.specialPages/eventdetails            |       0 |        0 |       0 |       0 |                   
  EmailManager.js                                                  |       0 |        0 |       0 |       0 | 1-275             
  EventContributions.js                                            |       0 |        0 |       0 |       0 | 1-35              
  OrganizersLoader.js                                              |       0 |        0 |       0 |       0 | 1-55              
  ParticipantsManager.js                                           |       0 |        0 |       0 |       0 | 1-756             
  RemoveParticipantDialog.js                                       |       0 |      100 |       0 |       0 | 1-52              
  ScrollDownObserver.js                                            |       0 |        0 |       0 |       0 | 1-53              
  index.js                                                         |       0 |        0 |       0 |       0 | 1-38              
 resources/ext.campaignEvents.specialPages/eventdetails/components |   89.21 |    85.71 |   81.25 |   89.21 |                   
  AddContributionDialog.vue                                        |   91.66 |     87.5 |   78.57 |   91.66 | 52,99-108,128     
  ContributionsActionsApp.vue                                      |   81.57 |       75 |   76.92 |   81.57 | 22-27,33,88       
  DeleteContributionDialog.vue                                     |     100 |      100 |     100 |     100 |                   
 resources/ext.campaignEvents.specialPages/eventlists              |       0 |        0 |       0 |       0 |                   
  ConfirmEventDeletionDialog.js                                    |       0 |      100 |       0 |       0 | 1-43              
  DateTimeWidgetsEnhancer.js                                       |       0 |        0 |       0 |       0 | 1-65              
  EventAccordionWatcher.js                                         |       0 |        0 |       0 |       0 | 1-43              
  EventKebabMenu.js                                                |       0 |        0 |       0 |       0 | 1-137             
  FilterEventsWidget.js                                            |       0 |      100 |       0 |       0 | 1-38              
  index.js                                                         |       0 |        0 |       0 |       0 | 2-69              
-------------------------------------------------------------------|---------|----------|---------|---------|-------------------

--- end ---
Upgrading c:mediawiki/mediawiki-codesniffer from 48.0.0 -> 49.0.0
Upgrading c:mediawiki/mediawiki-phan-config from 0.17.0 -> 0.18.0
$ /usr/bin/composer update
--- stderr ---
Loading composer repositories with package information
Updating dependencies
Lock file operations: 0 installs, 6 updates, 0 removals
  - Upgrading mediawiki/mediawiki-codesniffer (v48.0.0 => v49.0.0)
  - Upgrading mediawiki/mediawiki-phan-config (0.17.0 => 0.18.0)
  - Upgrading mediawiki/phan-taint-check-plugin (7.0.0 => 8.0.0)
  - Upgrading phan/phan (5.5.1 => 5.5.2)
  - Upgrading phpcsstandards/phpcsutils (1.1.1 => 1.2.2)
  - Upgrading squizlabs/php_codesniffer (3.13.2 => 3.13.5)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 0 installs, 6 updates, 0 removals
    0 [>---------------------------]    0 [->--------------------------]
  - Upgrading squizlabs/php_codesniffer (3.13.2 => 3.13.5): Extracting archive
  - Upgrading phpcsstandards/phpcsutils (1.1.1 => 1.2.2): Extracting archive
  - Upgrading mediawiki/mediawiki-codesniffer (v48.0.0 => v49.0.0): Extracting archive
  - Upgrading phan/phan (5.5.1 => 5.5.2): Extracting archive
  - Upgrading mediawiki/phan-taint-check-plugin (7.0.0 => 8.0.0): Extracting archive
  - Upgrading mediawiki/mediawiki-phan-config (0.17.0 => 0.18.0): Extracting archive
 0/6 [>---------------------------]   0%
 4/6 [==================>---------]  66%
 5/6 [=======================>----]  83%
 6/6 [============================] 100%
Generating autoload files
17 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
No security vulnerability advisories found.
--- stdout ---
PHP CodeSniffer Config installed_paths set to ../../mediawiki/mediawiki-codesniffer,../../phpcsstandards/phpcsextra,../../phpcsstandards/phpcsutils

--- end ---
$ vendor/bin/phpcs --report=json
--- stdout ---
{"totals":{"errors":0,"warnings":0,"fixable":0},"files":{"\/src\/repo\/src\/Questions\/UnknownQuestionOptionException.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Questions\/UnknownQuestionException.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/TrackingTool\/ToolNotFoundException.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/TrackingTool\/InvalidToolURLException.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Hooks\/CampaignEventsRegistrationFormLoadHook.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Topics\/WikimediaTopicRegistry.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Hooks\/CampaignEventsGetAllEventsTabsHook.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Topics\/EmptyTopicRegistry.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Invitation\/InvitationListNotFoundException.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/PolicyMessagesLookup.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Organizers\/Organizer.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Topics\/ITopicRegistry.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/MWEntity\/UnexpectedInterwikiException.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Hooks\/Handlers\/UserMergeContributionUserChangesHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/EventContribution\/UpdateUserContributionRecordsJob.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Organizers\/Roles.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Address\/Address.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Hooks\/Handlers\/TitleMoveHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/TrackingTool\/TrackingToolAssociation.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/MWEntity\/UnexpectedSectionAnchorException.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Hooks\/Handlers\/SchemaChangesHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Hooks\/CampaignEventsGetPolicyMessageForRegistrationHook.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/EventContribution\/UpdatePageContributionRecordsJob.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/MWEntity\/MWPermissionsLookup.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Hooks\/Handlers\/ArticleViewHeaderHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/MWEntity\/MWPageProxy.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/MWEntity\/CampaignsPageFormatter.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Organizers\/RoleFormatter.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/MWEntity\/PageNotFoundException.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Hooks\/CampaignEventsHookRunner.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/MediaWikiEventIngress\/EventPageEventIngress.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Hooks\/ResourceLoaderCallbacks.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Address\/CountryProvider.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/MWEntity\/InvalidTitleStringException.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/EventContribution\/EventContributionSummary.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Event\/Store\/EventWikisStore.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/TrackingTool\/Tool\/TrackingTool.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Event\/Store\/IEventStore.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/MWEntity\/InvalidEventPageException.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Invitation\/InvitationListGenerator.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Questions\/EventQuestionsStore.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Widget\/TextWithIconWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Hooks\/Handlers\/EchoHooksHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/ListOwnEventsForEditHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/ListEventsByOrganizerHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Notifications\/UserNotifier.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Questions\/ParticipantAnswersStore.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/EventContribution\/EventContributionJob.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Pager\/EventsPagerFactory.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Invitation\/InvitationList.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/EventIDParamTrait.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Event\/Store\/IEventLookup.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/GetParticipantQuestionsHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Questions\/EventAggregatedAnswers.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Questions\/EventAggregatedAnswersStore.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Event\/InvalidEventDataException.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/MWEntity\/UserLinker.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/EventContribution\/EventContributionValidator.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/FrontendModules\/FrontendModulesFactory.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/ListOrganizersHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/MWEntity\/UnexpectedVirtualNamespaceException.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/MWEntity\/CampaignsCentralUserLookup.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Special\/SpecialEditEventRegistration.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Utils.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Hooks\/CampaignEventsRegistrationFormSubmitHook.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Hooks\/Handlers\/PostEditHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/MWEntity\/WikiLookup.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/MWEntity\/PageAuthorLookup.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/CancelEventRegistrationHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Hooks\/CampaignEventsGetPolicyMessageForRegistrationFormHook.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/SetOrganizersHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Hooks\/Handlers\/ContributionUserChangesHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Special\/InvitationFeatureAccessTrait.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/MWEntity\/CentralUserNotFoundException.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/MWEntity\/CentralUser.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/ListEventsByParticipantHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/PolicyMessagesLookupTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/TrackingTool\/TrackingToolRegistry.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Hooks\/Handlers\/GetPreferencesHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/MWEntity\/HiddenCentralUserException.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Hooks\/CampaignEventsGetEventDetailsHook.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Event\/DeleteEventCommand.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Special\/SpecialGenerateInvitationList.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Invitation\/WorklistParser.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Special\/AbstractEventRegistrationSpecialPageTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/RemoveParticipantsFromEventHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/MWEntity\/PageURLResolver.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Pager\/InvitationsListPager.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Address\/AddressStore.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Hooks\/Handlers\/TitleMoveHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Hooks\/Handlers\/CentralAuthContributionUserChangesHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/UpdateEventRegistrationHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Time\/FormattedTime.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Special\/SpecialMyInvitationLists.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Messaging\/CampaignsUserMailer.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/FrontendModules\/ResponseStatisticsModule.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/AbstractEditEventRegistrationHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/DeleteEventContributionHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/FailStatusUtilTrait.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Organizers\/RoleFormatterTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Event\/EventRegistration.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Special\/SpecialInvitationList.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/MWEntity\/CampaignsPageFactory.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/EventContributionsHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/EventContribution\/EventContributionComputeMetricsDatabaseTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Messaging\/EmailUsersJob.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/EventContribution\/EventContributionComputeMetrics.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/EmailUsersHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Invitation\/PotentialInviteesFinderTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Organizers\/OrganizersStore.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Rest\/GetParticipantQuestionsHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/GetOwnRegistrationInfoHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Event\/ExistingEventRegistration.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Pager\/OngoingEventsListPager.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/MWEntity\/WikiLookupTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Notifications\/RegistrationNotificationPresentationModel.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Organizers\/OrganizersStoreTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Rest\/GetOwnRegistrationInfoHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Rest\/ListOrganizersHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Rest\/EventContributionsHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/MWEntity\/PageURLResolverTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Address\/AddressTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/EventContribution\/EventContribution.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Rest\/EditEventRegistrationHandlerTestTrait.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Time\/EventTimeFormatter.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Hooks\/Handlers\/ArticleViewHeaderHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/AbstractListEventsByUserHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Participants\/ParticipantsStore.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Notifications\/RegistrationNotificationPresentationModelTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/GetEventRegistrationHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/FrontendModules\/EventContributionsModule.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Event\/PageEventLookupTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Participants\/Participant.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Time\/EventTimeFormatterTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Formatters\/EventFormatter.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/EventContributionUpdateTestHelperTrait.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/TrackingTool\/Tool\/WikiEduDashboard.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/CampaignEventsSchemaTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/CampaignEvents.namespaces.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Rest\/DeleteEventContributionHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/RegisterForEventHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Topics\/WikimediaTopicRegistryTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Event\/EventTypesRegistry.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/CampaignEventsServicesTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/EventPage\/EventPageCacheUpdater.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/EventContribution\/EventContributionJobTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/maintenance\/AggregateParticipantAnswers.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Special\/SpecialEventDetails.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Participants\/UnregisterParticipantCommandTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Special\/SpecialRegisterForEvent.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Permissions\/PermissionChecker.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Hooks\/Handlers\/CentralAuthContributionUserChangesHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/EventContribution\/EventContributionStore.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/FrontendModules\/ClickwrapFormModule.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Rest\/ListEventsByParticipantHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Event\/EventRegistrationUnitTestBase.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/DeleteEventRegistrationHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/TrackingTool\/TrackingToolEventWatcher.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/EventPage\/EventPageDecoratorFactory.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/EnableEventRegistrationHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Questions\/EventQuestionsStoreTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/maintenance\/FindPotentialInvitees.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Special\/SpecialEnableEventRegistration.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Special\/SpecialMyEvents.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/GetFormattedTimeHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Messaging\/CampaignsUserMailerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/UtilsTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Event\/EventFactory.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/TrackingTool\/TrackingToolUpdater.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Event\/Store\/EventTopicsStoreTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Event\/ExistingEventRegistrationTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/maintenance\/UpdateUTCTimestamps.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/MWEntity\/CampaignsCentralUserLookupTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/MediaWikiEventIngress\/ContributionAssociationPageEventIngress.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Event\/EventRegistrationTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Rest\/EmailUsersHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Questions\/EventAggregatedAnswersStoreTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/FrontendModules\/EmailParticipantsModule.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Rest\/RegisterForEventHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/ListParticipantsHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Special\/SpecialAllEvents.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Invitation\/FindPotentialInviteesJob.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/TrackingTool\/Tool\/WikiEduDashboardTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Event\/PageEventLookup.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Maintenance\/AggregateParticipantAnswersTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Event\/DeleteEventCommandTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Questions\/EventQuestionsRegistry.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Questions\/InvalidAnswerDataException.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Special\/ChangeRegistrationSpecialPageBase.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/TrackingTool\/TrackingToolAssociationTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/EventContribution\/EventContributionValidatorTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Address\/AddressStoreTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Maintenance\/FindPotentialInviteesTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/EventContribution\/EventContributionTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Rest\/GetEventRegistrationHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Questions\/Answer.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Invitation\/PotentialInviteesFinder.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Rest\/RemoveParticipantsFromEventHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/CampaignEvents.alias.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Event\/EventTypesRegistryTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/MWEntity\/CampaignsPageFactoryTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Special\/SpecialCancelEventRegistration.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Invitation\/WorklistTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Topics\/EmptyTopicRegistryTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Address\/CountryProviderTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/EventContribution\/EventContributionComputeMetricsTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Rest\/ListOwnEventsForEditHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Invitation\/Worklist.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/MWEntity\/MWPageProxyTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Event\/EditEventCommand.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/CampaignEventsExtensionJsonTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Participants\/RegisterParticipantCommandTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Rest\/SetOrganizersHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Maintenance\/UpdateUTCTimestampsTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/FrontendModules\/EventDetailsParticipantsModule.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Rest\/ListParticipantsHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Invitation\/InvitationListStore.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/EventContribution\/UpdateUserContributionRecordsJobTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Organizers\/OrganizersStoreTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Rest\/CSRFTestHelperTrait.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Special\/SpecialDeleteEventRegistration.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/EventPage\/EventPageCacheUpdaterTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Rest\/EnableEventRegistrationHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/InvitationListTestHelperTrait.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Rest\/DeleteEventRegistrationHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Time\/FormattedTimeTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/TrackingTool\/TrackingToolRegistryTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Formatters\/EventFormatterTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Rest\/CancelEventRegistrationHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Rest\/GetFormattedTimeHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Participants\/ParticipantsStoreTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/EventContribution\/UpdatePageContributionRecordsJobTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/TrackingTool\/TrackingToolUpdaterTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/.phan\/config.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Hooks\/Handlers\/ContributionUserChangesHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Invitation\/InvitationListGeneratorTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Questions\/ParticipantAnswersStoreTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/TrackingTool\/Tool\/TrackingToolTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/MediaWikiEventIngress\/ContributionAssociationPageEventIngressTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Pager\/EventsListPager.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Config\/CommunityConfiguration\/Schemas\/CampaignEventsSchema.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/EventContribution\/EventContributionStoreTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Pager\/ListPagersTestHelperTrait.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Hooks\/Handlers\/UserMergeContributionUserChangesHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Permissions\/PermissionCheckerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Pager\/OngoingEventsListPagerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Special\/AbstractEventRegistrationSpecialPage.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/EventPage\/EventPageDecorator.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Database\/CampaignsDatabaseHelper.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Pager\/EventsListPagerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Pager\/EventContributionsPager.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Rest\/UpdateEventRegistrationHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/EventPage\/EventPageDecoratorTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/FrontendModules\/EventDetailsModule.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Event\/Store\/EventStore.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Invitation\/WorklistParserTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Participants\/UnregisterParticipantCommand.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Event\/Store\/EventNotFoundException.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Rest\/ListEventsByOrganizerHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Pager\/EventPagerTrait.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/MediaWikiEventIngress\/ContributionAssociationPageEventIngressTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Event\/Store\/EventTopicsStore.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Event\/Store\/EventStoreTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Questions\/EventQuestionsRegistryTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/ServiceWiring.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Participants\/RegisterParticipantCommand.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Event\/Store\/EventWikisStoreTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Event\/EventFactoryTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/MediaWikiEventIngress\/EventPageEventIngressTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Hooks\/CampaignEventsHookRunnerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Pager\/EventsTablePager.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Hooks\/Handlers\/ContributionUserChangesHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/CampaignEventsServices.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/MWEntity\/UserNotGlobalException.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/TrackingTool\/TrackingToolEventWatcherTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/TrackingTool\/TrackingToolUpdaterTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Invitation\/FindPotentialInviteesJobTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Event\/EditEventCommandTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/MWEntity\/MWPermissionsLookupTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Invitation\/InvitationListStoreTest.php":{"errors":0,"warnings":0,"messages":[]}}}

--- end ---
$ /usr/bin/composer install
--- stderr ---
Installing dependencies from lock file (including require-dev)
Verifying lock file contents can be installed on current platform.
Nothing to install, update or remove
Generating autoload files
17 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
--- stdout ---

--- end ---
$ /usr/bin/composer test
--- stderr ---
> parallel-lint . --exclude node_modules --exclude vendor
> phpcs -sp --cache
> minus-x check .
--- stdout ---
PHP 8.4.11 | 10 parallel jobs
............................................................  60/280 ( 21%)
............................................................ 120/280 ( 42%)
............................................................ 180/280 ( 64%)
............................................................ 240/280 ( 85%)
........................................                     280/280 (100%)


Checked 280 files in 0.9 seconds
No syntax error found
........................................................ 56 / 56 (100%)


Time: 638ms; Memory: 20MB

MinusX
======
Processing /src/repo...
.............................................................
.............................................................
.............................................................
.............................................................
.............................................................
.............................................................
.............................................................
.............................................................
.............................................................
.............................................................
.............................................................
...............................
All good!

--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {
    "@wdio/dot-reporter": {
      "name": "@wdio/dot-reporter",
      "severity": "low",
      "isDirect": false,
      "via": [
        "@wdio/reporter"
      ],
      "effects": [
        "@wdio/runner"
      ],
      "range": "8.40.6 - 8.43.0 || 9.1.0 - 9.17.0",
      "nodes": [
        "node_modules/@wdio/dot-reporter"
      ],
      "fixAvailable": {
        "name": "@wdio/local-runner",
        "version": "9.23.2",
        "isSemVerMajor": false
      }
    },
    "@wdio/junit-reporter": {
      "name": "@wdio/junit-reporter",
      "severity": "low",
      "isDirect": true,
      "via": [
        "@wdio/reporter"
      ],
      "effects": [],
      "range": "8.40.6 - 8.43.0 || 9.1.0 - 9.17.0",
      "nodes": [
        "node_modules/@wdio/junit-reporter"
      ],
      "fixAvailable": {
        "name": "@wdio/junit-reporter",
        "version": "9.23.2",
        "isSemVerMajor": false
      }
    },
    "@wdio/local-runner": {
      "name": "@wdio/local-runner",
      "severity": "low",
      "isDirect": true,
      "via": [
        "@wdio/runner"
      ],
      "effects": [],
      "range": "9.6.2 - 9.17.0",
      "nodes": [
        "node_modules/@wdio/local-runner"
      ],
      "fixAvailable": {
        "name": "@wdio/local-runner",
        "version": "9.23.2",
        "isSemVerMajor": false
      }
    },
    "@wdio/reporter": {
      "name": "@wdio/reporter",
      "severity": "low",
      "isDirect": false,
      "via": [
        "diff"
      ],
      "effects": [
        "@wdio/dot-reporter",
        "@wdio/junit-reporter",
        "@wdio/spec-reporter"
      ],
      "range": "8.40.6 - 8.43.0 || 9.1.0 - 9.17.0",
      "nodes": [
        "node_modules/@wdio/reporter"
      ],
      "fixAvailable": {
        "name": "@wdio/local-runner",
        "version": "9.23.2",
        "isSemVerMajor": false
      }
    },
    "@wdio/runner": {
      "name": "@wdio/runner",
      "severity": "low",
      "isDirect": false,
      "via": [
        "@wdio/dot-reporter"
      ],
      "effects": [
        "@wdio/local-runner"
      ],
      "range": "9.6.2 - 9.17.0",
      "nodes": [
        "node_modules/@wdio/runner"
      ],
      "fixAvailable": {
        "name": "@wdio/local-runner",
        "version": "9.23.2",
        "isSemVerMajor": false
      }
    },
    "@wdio/spec-reporter": {
      "name": "@wdio/spec-reporter",
      "severity": "low",
      "isDirect": true,
      "via": [
        "@wdio/reporter"
      ],
      "effects": [],
      "range": "8.40.6 - 8.43.0 || 9.1.0 - 9.17.0",
      "nodes": [
        "node_modules/@wdio/spec-reporter"
      ],
      "fixAvailable": {
        "name": "@wdio/spec-reporter",
        "version": "9.23.2",
        "isSemVerMajor": false
      }
    },
    "diff": {
      "name": "diff",
      "severity": "low",
      "isDirect": false,
      "via": [
        {
          "source": 1112490,
          "name": "diff",
          "dependency": "diff",
          "title": "jsdiff has a Denial of Service vulnerability in parsePatch and applyPatch",
          "url": "https://github.com/advisories/GHSA-73rr-hh4g-fpgx",
          "severity": "low",
          "cwe": [
            "CWE-400",
            "CWE-1333"
          ],
          "cvss": {
            "score": 0,
            "vectorString": null
          },
          "range": ">=5.0.0 <5.2.2"
        },
        {
          "source": 1112491,
          "name": "diff",
          "dependency": "diff",
          "title": "jsdiff has a Denial of Service vulnerability in parsePatch and applyPatch",
          "url": "https://github.com/advisories/GHSA-73rr-hh4g-fpgx",
          "severity": "low",
          "cwe": [
            "CWE-400",
            "CWE-1333"
          ],
          "cvss": {
            "score": 0,
            "vectorString": null
          },
          "range": ">=6.0.0 <8.0.3"
        }
      ],
      "effects": [
        "@wdio/reporter"
      ],
      "range": "5.0.0 - 5.2.1 || 6.0.0 - 8.0.2",
      "nodes": [
        "node_modules/diff",
        "node_modules/mocha/node_modules/diff"
      ],
      "fixAvailable": {
        "name": "@wdio/local-runner",
        "version": "9.23.2",
        "isSemVerMajor": false
      }
    },
    "lodash": {
      "name": "lodash",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1112455,
          "name": "lodash",
          "dependency": "lodash",
          "title": "Lodash has Prototype Pollution Vulnerability in `_.unset` and `_.omit` functions",
          "url": "https://github.com/advisories/GHSA-xxjr-mmjv-4gpg",
          "severity": "moderate",
          "cwe": [
            "CWE-1321"
          ],
          "cvss": {
            "score": 6.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L"
          },
          "range": ">=4.0.0 <=4.17.22"
        }
      ],
      "effects": [],
      "range": "4.0.0 - 4.17.21",
      "nodes": [
        "node_modules/lodash"
      ],
      "fixAvailable": true
    },
    "undici": {
      "name": "undici",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1112496,
          "name": "undici",
          "dependency": "undici",
          "title": "Undici has an unbounded decompression chain in HTTP responses on Node.js Fetch API via Content-Encoding leads to resource exhaustion",
          "url": "https://github.com/advisories/GHSA-g9mf-h72j-4rw9",
          "severity": "moderate",
          "cwe": [
            "CWE-770"
          ],
          "cvss": {
            "score": 5.9,
            "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": "<6.23.0"
        },
        {
          "source": 1112497,
          "name": "undici",
          "dependency": "undici",
          "title": "Undici has an unbounded decompression chain in HTTP responses on Node.js Fetch API via Content-Encoding leads to resource exhaustion",
          "url": "https://github.com/advisories/GHSA-g9mf-h72j-4rw9",
          "severity": "moderate",
          "cwe": [
            "CWE-770"
          ],
          "cvss": {
            "score": 5.9,
            "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": ">=7.0.0 <7.18.2"
        }
      ],
      "effects": [],
      "range": "<6.23.0 || >=7.0.0 <7.18.2",
      "nodes": [
        "node_modules/cheerio/node_modules/undici",
        "node_modules/undici"
      ],
      "fixAvailable": true
    }
  },
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 7,
      "moderate": 2,
      "high": 0,
      "critical": 0,
      "total": 9
    },
    "dependencies": {
      "prod": 1,
      "dev": 1574,
      "optional": 37,
      "peer": 1,
      "peerOptional": 0,
      "total": 1574
    }
  }
}

--- end ---
Attempting to npm audit fix
$ /usr/bin/npm audit fix --dry-run --only=dev --json
--- stderr ---
npm WARN invalid config only="dev" set in command line options
npm WARN invalid config Must be one of: null, prod, production
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex@2.3.2',
npm WARN EBADENGINE   required: { node: '>=20.19.1', npm: '>=10.8.2' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex-icons@2.3.2',
npm WARN EBADENGINE   required: { node: '>=20.19.1', npm: '>=10.8.2' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
--- stdout ---
{
  "added": 26,
  "removed": 0,
  "changed": 4,
  "audited": 1575,
  "funding": 221,
  "audit": {
    "auditReportVersion": 2,
    "vulnerabilities": {
      "@wdio/dot-reporter": {
        "name": "@wdio/dot-reporter",
        "severity": "low",
        "isDirect": false,
        "via": [
          "@wdio/reporter"
        ],
        "effects": [
          "@wdio/runner"
        ],
        "range": "8.40.6 - 8.43.0 || 9.1.0 - 9.17.0",
        "nodes": [
          "node_modules/@wdio/dot-reporter"
        ],
        "fixAvailable": {
          "name": "@wdio/local-runner",
          "version": "9.23.2",
          "isSemVerMajor": false
        }
      },
      "@wdio/junit-reporter": {
        "name": "@wdio/junit-reporter",
        "severity": "low",
        "isDirect": true,
        "via": [
          "@wdio/reporter"
        ],
        "effects": [],
        "range": "8.40.6 - 8.43.0 || 9.1.0 - 9.17.0",
        "nodes": [
          "node_modules/@wdio/junit-reporter"
        ],
        "fixAvailable": {
          "name": "@wdio/junit-reporter",
          "version": "9.23.2",
          "isSemVerMajor": false
        }
      },
      "@wdio/local-runner": {
        "name": "@wdio/local-runner",
        "severity": "low",
        "isDirect": true,
        "via": [
          "@wdio/runner"
        ],
        "effects": [],
        "range": "9.6.2 - 9.17.0",
        "nodes": [
          "node_modules/@wdio/local-runner"
        ],
        "fixAvailable": {
          "name": "@wdio/local-runner",
          "version": "9.23.2",
          "isSemVerMajor": false
        }
      },
      "@wdio/reporter": {
        "name": "@wdio/reporter",
        "severity": "low",
        "isDirect": false,
        "via": [
          "diff"
        ],
        "effects": [
          "@wdio/dot-reporter",
          "@wdio/junit-reporter",
          "@wdio/spec-reporter"
        ],
        "range": "8.40.6 - 8.43.0 || 9.1.0 - 9.17.0",
        "nodes": [
          "node_modules/@wdio/reporter"
        ],
        "fixAvailable": {
          "name": "@wdio/local-runner",
          "version": "9.23.2",
          "isSemVerMajor": false
        }
      },
      "@wdio/runner": {
        "name": "@wdio/runner",
        "severity": "low",
        "isDirect": false,
        "via": [
          "@wdio/dot-reporter"
        ],
        "effects": [
          "@wdio/local-runner"
        ],
        "range": "9.6.2 - 9.17.0",
        "nodes": [
          "node_modules/@wdio/runner"
        ],
        "fixAvailable": {
          "name": "@wdio/local-runner",
          "version": "9.23.2",
          "isSemVerMajor": false
        }
      },
      "@wdio/spec-reporter": {
        "name": "@wdio/spec-reporter",
        "severity": "low",
        "isDirect": true,
        "via": [
          "@wdio/reporter"
        ],
        "effects": [],
        "range": "8.40.6 - 8.43.0 || 9.1.0 - 9.17.0",
        "nodes": [
          "node_modules/@wdio/spec-reporter"
        ],
        "fixAvailable": {
          "name": "@wdio/spec-reporter",
          "version": "9.23.2",
          "isSemVerMajor": false
        }
      },
      "diff": {
        "name": "diff",
        "severity": "low",
        "isDirect": false,
        "via": [
          {
            "source": 1112490,
            "name": "diff",
            "dependency": "diff",
            "title": "jsdiff has a Denial of Service vulnerability in parsePatch and applyPatch",
            "url": "https://github.com/advisories/GHSA-73rr-hh4g-fpgx",
            "severity": "low",
            "cwe": [
              "CWE-400",
              "CWE-1333"
            ],
            "cvss": {
              "score": 0,
              "vectorString": null
            },
            "range": ">=5.0.0 <5.2.2"
          },
          {
            "source": 1112491,
            "name": "diff",
            "dependency": "diff",
            "title": "jsdiff has a Denial of Service vulnerability in parsePatch and applyPatch",
            "url": "https://github.com/advisories/GHSA-73rr-hh4g-fpgx",
            "severity": "low",
            "cwe": [
              "CWE-400",
              "CWE-1333"
            ],
            "cvss": {
              "score": 0,
              "vectorString": null
            },
            "range": ">=6.0.0 <8.0.3"
          }
        ],
        "effects": [
          "@wdio/reporter"
        ],
        "range": "5.0.0 - 5.2.1 || 6.0.0 - 8.0.2",
        "nodes": [
          "",
          "node_modules/diff"
        ],
        "fixAvailable": {
          "name": "@wdio/local-runner",
          "version": "9.23.2",
          "isSemVerMajor": false
        }
      },
      "lodash": {
        "name": "lodash",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          {
            "source": 1112455,
            "name": "lodash",
            "dependency": "lodash",
            "title": "Lodash has Prototype Pollution Vulnerability in `_.unset` and `_.omit` functions",
            "url": "https://github.com/advisories/GHSA-xxjr-mmjv-4gpg",
            "severity": "moderate",
            "cwe": [
              "CWE-1321"
            ],
            "cvss": {
              "score": 6.5,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L"
            },
            "range": ">=4.0.0 <=4.17.22"
          }
        ],
        "effects": [],
        "range": "4.0.0 - 4.17.21",
        "nodes": [
          ""
        ],
        "fixAvailable": true
      },
      "undici": {
        "name": "undici",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          {
            "source": 1112496,
            "name": "undici",
            "dependency": "undici",
            "title": "Undici has an unbounded decompression chain in HTTP responses on Node.js Fetch API via Content-Encoding leads to resource exhaustion",
            "url": "https://github.com/advisories/GHSA-g9mf-h72j-4rw9",
            "severity": "moderate",
            "cwe": [
              "CWE-770"
            ],
            "cvss": {
              "score": 5.9,
              "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H"
            },
            "range": "<6.23.0"
          },
          {
            "source": 1112497,
            "name": "undici",
            "dependency": "undici",
            "title": "Undici has an unbounded decompression chain in HTTP responses on Node.js Fetch API via Content-Encoding leads to resource exhaustion",
            "url": "https://github.com/advisories/GHSA-g9mf-h72j-4rw9",
            "severity": "moderate",
            "cwe": [
              "CWE-770"
            ],
            "cvss": {
              "score": 5.9,
              "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H"
            },
            "range": ">=7.0.0 <7.18.2"
          }
        ],
        "effects": [],
        "range": "<6.23.0 || >=7.0.0 <7.18.2",
        "nodes": [
          "",
          ""
        ],
        "fixAvailable": true
      }
    },
    "metadata": {
      "vulnerabilities": {
        "info": 0,
        "low": 7,
        "moderate": 2,
        "high": 0,
        "critical": 0,
        "total": 9
      },
      "dependencies": {
        "prod": 1,
        "dev": 1574,
        "optional": 37,
        "peer": 1,
        "peerOptional": 0,
        "total": 1574
      }
    }
  }
}

--- end ---
{"added": 26, "removed": 0, "changed": 4, "audited": 1575, "funding": 221, "audit": {"auditReportVersion": 2, "vulnerabilities": {"@wdio/dot-reporter": {"name": "@wdio/dot-reporter", "severity": "low", "isDirect": false, "via": ["@wdio/reporter"], "effects": ["@wdio/runner"], "range": "8.40.6 - 8.43.0 || 9.1.0 - 9.17.0", "nodes": ["node_modules/@wdio/dot-reporter"], "fixAvailable": {"name": "@wdio/local-runner", "version": "9.23.2", "isSemVerMajor": false}}, "@wdio/junit-reporter": {"name": "@wdio/junit-reporter", "severity": "low", "isDirect": true, "via": ["@wdio/reporter"], "effects": [], "range": "8.40.6 - 8.43.0 || 9.1.0 - 9.17.0", "nodes": ["node_modules/@wdio/junit-reporter"], "fixAvailable": {"name": "@wdio/junit-reporter", "version": "9.23.2", "isSemVerMajor": false}}, "@wdio/local-runner": {"name": "@wdio/local-runner", "severity": "low", "isDirect": true, "via": ["@wdio/runner"], "effects": [], "range": "9.6.2 - 9.17.0", "nodes": ["node_modules/@wdio/local-runner"], "fixAvailable": {"name": "@wdio/local-runner", "version": "9.23.2", "isSemVerMajor": false}}, "@wdio/reporter": {"name": "@wdio/reporter", "severity": "low", "isDirect": false, "via": ["diff"], "effects": ["@wdio/dot-reporter", "@wdio/junit-reporter", "@wdio/spec-reporter"], "range": "8.40.6 - 8.43.0 || 9.1.0 - 9.17.0", "nodes": ["node_modules/@wdio/reporter"], "fixAvailable": {"name": "@wdio/local-runner", "version": "9.23.2", "isSemVerMajor": false}}, "@wdio/runner": {"name": "@wdio/runner", "severity": "low", "isDirect": false, "via": ["@wdio/dot-reporter"], "effects": ["@wdio/local-runner"], "range": "9.6.2 - 9.17.0", "nodes": ["node_modules/@wdio/runner"], "fixAvailable": {"name": "@wdio/local-runner", "version": "9.23.2", "isSemVerMajor": false}}, "@wdio/spec-reporter": {"name": "@wdio/spec-reporter", "severity": "low", "isDirect": true, "via": ["@wdio/reporter"], "effects": [], "range": "8.40.6 - 8.43.0 || 9.1.0 - 9.17.0", "nodes": ["node_modules/@wdio/spec-reporter"], "fixAvailable": {"name": "@wdio/spec-reporter", "version": "9.23.2", "isSemVerMajor": false}}, "diff": {"name": "diff", "severity": "low", "isDirect": false, "via": [{"source": 1112490, "name": "diff", "dependency": "diff", "title": "jsdiff has a Denial of Service vulnerability in parsePatch and applyPatch", "url": "https://github.com/advisories/GHSA-73rr-hh4g-fpgx", "severity": "low", "cwe": ["CWE-400", "CWE-1333"], "cvss": {"score": 0, "vectorString": null}, "range": ">=5.0.0 <5.2.2"}, {"source": 1112491, "name": "diff", "dependency": "diff", "title": "jsdiff has a Denial of Service vulnerability in parsePatch and applyPatch", "url": "https://github.com/advisories/GHSA-73rr-hh4g-fpgx", "severity": "low", "cwe": ["CWE-400", "CWE-1333"], "cvss": {"score": 0, "vectorString": null}, "range": ">=6.0.0 <8.0.3"}], "effects": ["@wdio/reporter"], "range": "5.0.0 - 5.2.1 || 6.0.0 - 8.0.2", "nodes": ["", "node_modules/diff"], "fixAvailable": {"name": "@wdio/local-runner", "version": "9.23.2", "isSemVerMajor": false}}, "lodash": {"name": "lodash", "severity": "moderate", "isDirect": false, "via": [{"source": 1112455, "name": "lodash", "dependency": "lodash", "title": "Lodash has Prototype Pollution Vulnerability in `_.unset` and `_.omit` functions", "url": "https://github.com/advisories/GHSA-xxjr-mmjv-4gpg", "severity": "moderate", "cwe": ["CWE-1321"], "cvss": {"score": 6.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L"}, "range": ">=4.0.0 <=4.17.22"}], "effects": [], "range": "4.0.0 - 4.17.21", "nodes": [""], "fixAvailable": true}, "undici": {"name": "undici", "severity": "moderate", "isDirect": false, "via": [{"source": 1112496, "name": "undici", "dependency": "undici", "title": "Undici has an unbounded decompression chain in HTTP responses on Node.js Fetch API via Content-Encoding leads to resource exhaustion", "url": "https://github.com/advisories/GHSA-g9mf-h72j-4rw9", "severity": "moderate", "cwe": ["CWE-770"], "cvss": {"score": 5.9, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": "<6.23.0"}, {"source": 1112497, "name": "undici", "dependency": "undici", "title": "Undici has an unbounded decompression chain in HTTP responses on Node.js Fetch API via Content-Encoding leads to resource exhaustion", "url": "https://github.com/advisories/GHSA-g9mf-h72j-4rw9", "severity": "moderate", "cwe": ["CWE-770"], "cvss": {"score": 5.9, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": ">=7.0.0 <7.18.2"}], "effects": [], "range": "<6.23.0 || >=7.0.0 <7.18.2", "nodes": ["", ""], "fixAvailable": true}}, "metadata": {"vulnerabilities": {"info": 0, "low": 7, "moderate": 2, "high": 0, "critical": 0, "total": 9}, "dependencies": {"prod": 1, "dev": 1574, "optional": 37, "peer": 1, "peerOptional": 0, "total": 1574}}}}
{}
Upgrading n:@wdio/junit-reporter from 9.15.0 -> 9.23.2
{}
Upgrading n:@wdio/local-runner from 9.15.0 -> 9.23.2
{}
Upgrading n:@wdio/spec-reporter from 9.15.0 -> 9.23.2
$ /usr/bin/npm audit fix --only=dev
--- stderr ---
npm WARN invalid config only="dev" set in command line options
npm WARN invalid config Must be one of: null, prod, production
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex@2.3.2',
npm WARN EBADENGINE   required: { node: '>=20.19.1', npm: '>=10.8.2' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex-icons@2.3.2',
npm WARN EBADENGINE   required: { node: '>=20.19.1', npm: '>=10.8.2' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
--- stdout ---

added 5 packages, removed 8 packages, changed 29 packages, and audited 1546 packages in 7s

220 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

--- end ---
Verifying that tests still pass
$ /usr/bin/npm ci
--- stderr ---
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex@2.3.2',
npm WARN EBADENGINE   required: { node: '>=20.19.1', npm: '>=10.8.2' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex-icons@2.3.2',
npm WARN EBADENGINE   required: { node: '>=20.19.1', npm: '>=10.8.2' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN deprecated osenv@0.1.5: This package is no longer supported.
npm WARN deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm WARN deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated abab@2.0.6: Use your platform's native atob() and btoa() methods instead
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@8.1.0: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.1.7: Glob versions prior to v9 are no longer supported
npm WARN deprecated domexception@4.0.0: Use your platform's native DOMException instead
npm WARN deprecated node-domexception@1.0.0: Use your platform's native DOMException instead
npm WARN deprecated eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other options.
--- stdout ---

added 1545 packages, and audited 1546 packages in 30s

220 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

--- end ---
$ /usr/bin/npm test
--- stderr ---
[baseline-browser-mapping] The data in this module is over two months old.  To ensure accurate Baseline data, please update: `npm i baseline-browser-mapping@latest -D`
[baseline-browser-mapping] The data in this module is over two months old.  To ensure accurate Baseline data, please update: `npm i baseline-browser-mapping@latest -D`
[baseline-browser-mapping] The data in this module is over two months old.  To ensure accurate Baseline data, please update: `npm i baseline-browser-mapping@latest -D`
[baseline-browser-mapping] The data in this module is over two months old.  To ensure accurate Baseline data, please update: `npm i baseline-browser-mapping@latest -D`
PASS tests/jest/ext.campaignEvents.specialPages/eventdetails/components/AddContributionDialog.test.js
PASS tests/jest/ext.campaignEvents.specialPages/eventdetails/components/DeleteContributionDialog.test.js
PASS tests/jest/ext.campaignEvents.specialPages/eventdetails/components/ContributionsActionsApp.test.js
PASS tests/jest/ext.campaignEvents.postEdit/components/App.test.js
PASS tests/jest/ext.campaignEvents.postEdit/components/EditAssociationDialog.test.js

Test Suites: 5 passed, 5 total
Tests:       47 passed, 47 total
Snapshots:   0 total
Time:        4.597 s
Ran all test suites.
--- stdout ---

> test
> grunt test && npm run test:unit

Running "eslint:all" (eslint) task

Running "stylelint:all" (stylelint) task
>> Linted 18 files without errors

Running "banana:CampaignEvents" (banana) task
>> 2 message directories checked.

Done.

> test:unit
> jest

-------------------------------------------------------------------|---------|----------|---------|---------|-------------------
File                                                               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------------------------------------------------------|---------|----------|---------|---------|-------------------
All files                                                          |   10.67 |     9.54 |   14.02 |   10.66 |                   
 resources                                                         |       0 |        0 |       0 |       0 |                   
  TimeZoneConverter.js                                             |       0 |        0 |       0 |       0 | 1-109             
 resources/ext.campaignEvents.eventpage                            |       0 |        0 |       0 |       0 |                   
  ConfirmUnregistrationDialog.js                                   |       0 |      100 |       0 |       0 | 1-33              
  EnableRegistrationDialog.js                                      |       0 |      100 |       0 |       0 | 1-34              
  EventQuestions.js                                                |       0 |        0 |       0 |       0 | 1-218             
  ManageRegistrationWidget.js                                      |       0 |        0 |       0 |       0 | 1-66              
  ParticipantRegistrationDialog.js                                 |       0 |        0 |       0 |       0 | 1-280             
  index.js                                                         |       0 |        0 |       0 |       0 | 4-325             
 resources/ext.campaignEvents.postEdit                             |       0 |        0 |       0 |       0 |                   
  index.js                                                         |       0 |        0 |       0 |       0 | 1-39              
 resources/ext.campaignEvents.postEdit/components                  |   96.22 |      100 |   85.71 |   96.15 |                   
  App.vue                                                          |    90.9 |      100 |   71.42 |    90.9 | 46-50             
  EditAssociationDialog.vue                                        |     100 |      100 |     100 |     100 |                   
 resources/ext.campaignEvents.specialPages                         |       0 |        0 |       0 |       0 |                   
  dispatcher.js                                                    |       0 |        0 |       0 |       0 | 1-19              
 resources/ext.campaignEvents.specialPages/editeventregistration   |       0 |        0 |       0 |       0 |                   
  OrganizerSelectionFieldEnhancer.js                               |       0 |        0 |       0 |       0 | 1-110             
  TimeFieldsEnhancer.js                                            |       0 |        0 |       0 |       0 | 1-198             
  index.js                                                         |       0 |      100 |       0 |       0 | 1-12              
 resources/ext.campaignEvents.specialPages/eventdetails            |       0 |        0 |       0 |       0 |                   
  EmailManager.js                                                  |       0 |        0 |       0 |       0 | 1-275             
  EventContributions.js                                            |       0 |        0 |       0 |       0 | 1-35              
  OrganizersLoader.js                                              |       0 |        0 |       0 |       0 | 1-55              
  ParticipantsManager.js                                           |       0 |        0 |       0 |       0 | 1-756             
  RemoveParticipantDialog.js                                       |       0 |      100 |       0 |       0 | 1-52              
  ScrollDownObserver.js                                            |       0 |        0 |       0 |       0 | 1-53              
  index.js                                                         |       0 |        0 |       0 |       0 | 1-38              
 resources/ext.campaignEvents.specialPages/eventdetails/components |   89.21 |    85.71 |   81.25 |   89.21 |                   
  AddContributionDialog.vue                                        |   91.66 |     87.5 |   78.57 |   91.66 | 52,99-108,128     
  ContributionsActionsApp.vue                                      |   81.57 |       75 |   76.92 |   81.57 | 22-27,33,88       
  DeleteContributionDialog.vue                                     |     100 |      100 |     100 |     100 |                   
 resources/ext.campaignEvents.specialPages/eventlists              |       0 |        0 |       0 |       0 |                   
  ConfirmEventDeletionDialog.js                                    |       0 |      100 |       0 |       0 | 1-43              
  DateTimeWidgetsEnhancer.js                                       |       0 |        0 |       0 |       0 | 1-65              
  EventAccordionWatcher.js                                         |       0 |        0 |       0 |       0 | 1-43              
  EventKebabMenu.js                                                |       0 |        0 |       0 |       0 | 1-137             
  FilterEventsWidget.js                                            |       0 |      100 |       0 |       0 | 1-38              
  index.js                                                         |       0 |        0 |       0 |       0 | 2-69              
-------------------------------------------------------------------|---------|----------|---------|---------|-------------------

--- end ---
{"1112455": {"source": 1112455, "name": "lodash", "dependency": "lodash", "title": "Lodash has Prototype Pollution Vulnerability in `_.unset` and `_.omit` functions", "url": "https://github.com/advisories/GHSA-xxjr-mmjv-4gpg", "severity": "moderate", "cwe": ["CWE-1321"], "cvss": {"score": 6.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L"}, "range": ">=4.0.0 <=4.17.22"}}
Upgrading n:lodash from 4.17.21 -> 4.17.23
{"1112496": {"source": 1112496, "name": "undici", "dependency": "undici", "title": "Undici has an unbounded decompression chain in HTTP responses on Node.js Fetch API via Content-Encoding leads to resource exhaustion", "url": "https://github.com/advisories/GHSA-g9mf-h72j-4rw9", "severity": "moderate", "cwe": ["CWE-770"], "cvss": {"score": 5.9, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": "<6.23.0"}, "1112497": {"source": 1112497, "name": "undici", "dependency": "undici", "title": "Undici has an unbounded decompression chain in HTTP responses on Node.js Fetch API via Content-Encoding leads to resource exhaustion", "url": "https://github.com/advisories/GHSA-g9mf-h72j-4rw9", "severity": "moderate", "cwe": ["CWE-770"], "cvss": {"score": 5.9, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": ">=7.0.0 <7.18.2"}}
Upgrading n:undici from 6.21.3, 7.16.0 -> 6.23.0, 7.19.0
$ package-lock-lint /src/repo/package-lock.json
--- stdout ---
Checking /src/repo/package-lock.json

--- end ---
build: Updating dependencies

composer:
* mediawiki/mediawiki-codesniffer: 48.0.0 → 49.0.0
* mediawiki/mediawiki-phan-config: 0.17.0 → 0.18.0

npm:
* api-testing: 1.7.1 → 1.7.2
* @wdio/junit-reporter: 9.15.0 → 9.23.2
* @wdio/local-runner: 9.15.0 → 9.23.2
* @wdio/spec-reporter: 9.15.0 → 9.23.2
* lodash: 4.17.21 → 4.17.23
  * https://github.com/advisories/GHSA-xxjr-mmjv-4gpg
* undici: 6.21.3, 7.16.0 → 6.23.0, 7.19.0
  * https://github.com/advisories/GHSA-g9mf-h72j-4rw9


$ git add .
--- stdout ---

--- end ---
$ git commit -F /tmp/tmpcryw8iic
--- stdout ---
[master 531cff7] build: Updating dependencies
 3 files changed, 285 insertions(+), 340 deletions(-)

--- end ---
$ git format-patch HEAD~1 --stdout
--- stdout ---
From 531cff76bda2e1aef1f738026e0dc14197fdb976 Mon Sep 17 00:00:00 2001
From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org>
Date: Fri, 23 Jan 2026 12:23:02 +0000
Subject: [PATCH] build: Updating dependencies
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

composer:
* mediawiki/mediawiki-codesniffer: 48.0.0 → 49.0.0
* mediawiki/mediawiki-phan-config: 0.17.0 → 0.18.0

npm:
* api-testing: 1.7.1 → 1.7.2
* @wdio/junit-reporter: 9.15.0 → 9.23.2
* @wdio/local-runner: 9.15.0 → 9.23.2
* @wdio/spec-reporter: 9.15.0 → 9.23.2
* lodash: 4.17.21 → 4.17.23
  * https://github.com/advisories/GHSA-xxjr-mmjv-4gpg
* undici: 6.21.3, 7.16.0 → 6.23.0, 7.19.0
  * https://github.com/advisories/GHSA-g9mf-h72j-4rw9

Change-Id: Ifdce7ef87ee0484d22a040179023c077e4f2aff0
---
 composer.json     |   4 +-
 package-lock.json | 613 +++++++++++++++++++++-------------------------
 package.json      |   8 +-
 3 files changed, 285 insertions(+), 340 deletions(-)

diff --git a/composer.json b/composer.json
index c7d9210..93099b7 100644
--- a/composer.json
+++ b/composer.json
@@ -3,8 +3,8 @@
 		"php": ">8.1.7"
 	},
 	"require-dev": {
-		"mediawiki/mediawiki-codesniffer": "48.0.0",
-		"mediawiki/mediawiki-phan-config": "0.17.0",
+		"mediawiki/mediawiki-codesniffer": "49.0.0",
+		"mediawiki/mediawiki-phan-config": "0.18.0",
 		"mediawiki/minus-x": "1.1.3",
 		"php-parallel-lint/php-console-highlighter": "1.0.0",
 		"php-parallel-lint/php-parallel-lint": "1.4.0"
diff --git a/package-lock.json b/package-lock.json
index c0ec1fb..26ff3fd 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,12 +10,12 @@
 				"@vue/test-utils": "^2.4.6",
 				"@vue/vue3-jest": "^29.2.6",
 				"@wdio/cli": "9.18.4",
-				"@wdio/junit-reporter": "9.15.0",
-				"@wdio/local-runner": "9.15.0",
+				"@wdio/junit-reporter": "9.23.2",
+				"@wdio/local-runner": "9.23.2",
 				"@wdio/mocha-framework": "9.15.0",
-				"@wdio/spec-reporter": "9.15.0",
+				"@wdio/spec-reporter": "9.23.2",
 				"@wikimedia/codex": "2.3.2",
-				"api-testing": "1.7.1",
+				"api-testing": "1.7.2",
 				"eslint-config-wikimedia": "0.32.3",
 				"grunt": "1.6.1",
 				"grunt-banana-checker": "0.13.0",
@@ -5093,7 +5093,6 @@
 			"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz",
 			"integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==",
 			"dev": true,
-			"license": "MIT",
 			"engines": {
 				"node": "^14.21.3 || >=16"
 			},
@@ -5147,11 +5146,10 @@
 			"license": "MIT"
 		},
 		"node_modules/@paralleldrive/cuid2": {
-			"version": "2.2.2",
-			"resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz",
-			"integrity": "sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==",
+			"version": "2.3.1",
+			"resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.3.1.tgz",
+			"integrity": "sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@noble/hashes": "^1.1.5"
 			}
@@ -6191,14 +6189,13 @@
 			}
 		},
 		"node_modules/@wdio/dot-reporter": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/dot-reporter/-/dot-reporter-9.15.0.tgz",
-			"integrity": "sha512-dga+nwqZtsruAnERYGXa41O/APPpG6IClXA0gk35zKe24aMez/XgU7ZDHVJ3JYGmr7XTSEGiWXudvthaX/EbSg==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/dot-reporter/-/dot-reporter-9.23.2.tgz",
+			"integrity": "sha512-3+5y7P4GS7UTIgr6zPhxKHMmDSwiNjgdwnWIUYXr2eQLcpnPGhc9GL1IEDgQEAcziXG9BfaKzZQHi+vH89PR5w==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
-				"@wdio/reporter": "9.15.0",
-				"@wdio/types": "9.15.0",
+				"@wdio/reporter": "9.23.2",
+				"@wdio/types": "9.23.2",
 				"chalk": "^5.0.1"
 			},
 			"engines": {
@@ -6206,11 +6203,10 @@
 			}
 		},
 		"node_modules/@wdio/dot-reporter/node_modules/@wdio/types": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.15.0.tgz",
-			"integrity": "sha512-hR0Dm9TsrjtgOLWOjUMYTOB1hWIlnDzFgZt7XGOzI9Ig8Qa+TDfZSFaZukGxqLIZS/eGhxpnunSHaTAXwJIxYA==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.23.2.tgz",
+			"integrity": "sha512-ryfrERGsNp+aCcrTE1rFU6cbmDj8GHZ04R9k52KNt2u1a6bv3Eh5A/cUA0hXuMdEUfsc8ePLYdwQyOLFydZ0ig==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@types/node": "^20.1.0"
 			},
@@ -6241,14 +6237,13 @@
 			}
 		},
 		"node_modules/@wdio/junit-reporter": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/junit-reporter/-/junit-reporter-9.15.0.tgz",
-			"integrity": "sha512-ZulPH628zp/V1IolHtMkLPEmlWeoAa4Go5hAe46wyfB879PHD9bm5RUXZYJvVAphlvvSljpXd4YOqINN0hWVuQ==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/junit-reporter/-/junit-reporter-9.23.2.tgz",
+			"integrity": "sha512-pB5iVEMG2PUNOtdgb274QyWwLDYjinRUhzajCmYMMF4qGBRvnGdH+1+AHZvE/j71QxMXJT1y69QGHsNJmdFbPQ==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
-				"@wdio/reporter": "9.15.0",
-				"@wdio/types": "9.15.0",
+				"@wdio/reporter": "9.23.2",
+				"@wdio/types": "9.23.2",
 				"json-stringify-safe": "^5.0.1",
 				"junit-report-builder": "^5.1.1"
 			},
@@ -6257,11 +6252,10 @@
 			}
 		},
 		"node_modules/@wdio/junit-reporter/node_modules/@wdio/types": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.15.0.tgz",
-			"integrity": "sha512-hR0Dm9TsrjtgOLWOjUMYTOB1hWIlnDzFgZt7XGOzI9Ig8Qa+TDfZSFaZukGxqLIZS/eGhxpnunSHaTAXwJIxYA==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.23.2.tgz",
+			"integrity": "sha512-ryfrERGsNp+aCcrTE1rFU6cbmDj8GHZ04R9k52KNt2u1a6bv3Eh5A/cUA0hXuMdEUfsc8ePLYdwQyOLFydZ0ig==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@types/node": "^20.1.0"
 			},
@@ -6270,18 +6264,19 @@
 			}
 		},
 		"node_modules/@wdio/local-runner": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/local-runner/-/local-runner-9.15.0.tgz",
-			"integrity": "sha512-SbmQpzXSxaLvvjDAJpHvfRq5Df9nfdD3LxOM/L4QytI09rK3Y94Re2QEFIk1MyFmUAuoIgJ99L4TSRw9hhrIbg==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/local-runner/-/local-runner-9.23.2.tgz",
+			"integrity": "sha512-tS8l2iaQc5aQav2LYYXx296F9KpdrU4/dmw5t9n9baXgdu8CKyGEd9orhTFQ7fYR55wFJ/85toQNOvIQHtIZrA==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@types/node": "^20.1.0",
-				"@wdio/logger": "9.15.0",
-				"@wdio/repl": "9.4.4",
-				"@wdio/runner": "9.15.0",
-				"@wdio/types": "9.15.0",
-				"async-exit-hook": "^2.0.1",
+				"@wdio/logger": "9.18.0",
+				"@wdio/repl": "9.16.2",
+				"@wdio/runner": "9.23.2",
+				"@wdio/types": "9.23.2",
+				"@wdio/xvfb": "9.23.2",
+				"exit-hook": "^4.0.0",
+				"expect-webdriverio": "^5.3.4",
 				"split2": "^4.1.0",
 				"stream-buffers": "^3.0.2"
 			},
@@ -6289,28 +6284,11 @@
 				"node": ">=18.20.0"
 			}
 		},
-		"node_modules/@wdio/local-runner/node_modules/@wdio/logger": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-9.15.0.tgz",
-			"integrity": "sha512-3IkaissyOsUQwg8IinkVm1svsvRMGJpFyaSiEhQ0oQXD7mnWrNVFSU9kmeFvbKAtoc4j60FRjU6XqtH94xRceg==",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"chalk": "^5.1.2",
-				"loglevel": "^1.6.0",
-				"loglevel-plugin-prefix": "^0.8.4",
-				"strip-ansi": "^7.1.0"
-			},
-			"engines": {
-				"node": ">=18.20.0"
-			}
-		},
 		"node_modules/@wdio/local-runner/node_modules/@wdio/types": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.15.0.tgz",
-			"integrity": "sha512-hR0Dm9TsrjtgOLWOjUMYTOB1hWIlnDzFgZt7XGOzI9Ig8Qa+TDfZSFaZukGxqLIZS/eGhxpnunSHaTAXwJIxYA==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.23.2.tgz",
+			"integrity": "sha512-ryfrERGsNp+aCcrTE1rFU6cbmDj8GHZ04R9k52KNt2u1a6bv3Eh5A/cUA0hXuMdEUfsc8ePLYdwQyOLFydZ0ig==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@types/node": "^20.1.0"
 			},
@@ -6415,11 +6393,10 @@
 			"license": "MIT"
 		},
 		"node_modules/@wdio/repl": {
-			"version": "9.4.4",
-			"resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-9.4.4.tgz",
-			"integrity": "sha512-kchPRhoG/pCn4KhHGiL/ocNhdpR8OkD2e6sANlSUZ4TGBVi86YSIEjc2yXUwLacHknC/EnQk/SFnqd4MsNjGGg==",
+			"version": "9.16.2",
+			"resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-9.16.2.tgz",
+			"integrity": "sha512-FLTF0VL6+o5BSTCO7yLSXocm3kUnu31zYwzdsz4n9s5YWt83sCtzGZlZpt7TaTzb3jVUfxuHNQDTb8UMkCu0lQ==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@types/node": "^20.1.0"
 			},
@@ -6428,44 +6405,26 @@
 			}
 		},
 		"node_modules/@wdio/reporter": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-9.15.0.tgz",
-			"integrity": "sha512-p120dZr+fUQ7HE54L/RDG/7BfE/LkFORyNaZ/G2KE6gEr8gIyL3sW9kVbTZtYOBW68KgU+CC7x4yxfZCXfRUuw==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-9.23.2.tgz",
+			"integrity": "sha512-+L1knNyQl+Xs+/VkM5JOX/HINe+g3ZVWt0Scsb9DcOCll8xG8jisxArutZLo+UuV6Bm1BzqfJJb/+ae04EuRAQ==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@types/node": "^20.1.0",
-				"@wdio/logger": "9.15.0",
-				"@wdio/types": "9.15.0",
-				"diff": "^7.0.0",
+				"@wdio/logger": "9.18.0",
+				"@wdio/types": "9.23.2",
+				"diff": "^8.0.2",
 				"object-inspect": "^1.12.0"
 			},
 			"engines": {
 				"node": ">=18.20.0"
 			}
 		},
-		"node_modules/@wdio/reporter/node_modules/@wdio/logger": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-9.15.0.tgz",
-			"integrity": "sha512-3IkaissyOsUQwg8IinkVm1svsvRMGJpFyaSiEhQ0oQXD7mnWrNVFSU9kmeFvbKAtoc4j60FRjU6XqtH94xRceg==",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"chalk": "^5.1.2",
-				"loglevel": "^1.6.0",
-				"loglevel-plugin-prefix": "^0.8.4",
-				"strip-ansi": "^7.1.0"
-			},
-			"engines": {
-				"node": ">=18.20.0"
-			}
-		},
 		"node_modules/@wdio/reporter/node_modules/@wdio/types": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.15.0.tgz",
-			"integrity": "sha512-hR0Dm9TsrjtgOLWOjUMYTOB1hWIlnDzFgZt7XGOzI9Ig8Qa+TDfZSFaZukGxqLIZS/eGhxpnunSHaTAXwJIxYA==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.23.2.tgz",
+			"integrity": "sha512-ryfrERGsNp+aCcrTE1rFU6cbmDj8GHZ04R9k52KNt2u1a6bv3Eh5A/cUA0hXuMdEUfsc8ePLYdwQyOLFydZ0ig==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@types/node": "^20.1.0"
 			},
@@ -6474,38 +6433,47 @@
 			}
 		},
 		"node_modules/@wdio/runner": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/runner/-/runner-9.15.0.tgz",
-			"integrity": "sha512-KHDM4L02Aqmmsi83Yum2c026eNqpQysrMPnHiSzZm0+wMmDNLIMwq6xAj/vlBHDiVgrSKho3LlMz7mNyagkkgw==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/runner/-/runner-9.23.2.tgz",
+			"integrity": "sha512-joFHYO4jnDixsBRM6tJ/nVeH15UNIthIAp2Yky+yPsh1HkM+x9gZG5ZT0TnSXw/E2tQRb2yO3d+jsEHedsE0jw==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@types/node": "^20.11.28",
-				"@wdio/config": "9.15.0",
-				"@wdio/dot-reporter": "9.15.0",
-				"@wdio/globals": "9.15.0",
-				"@wdio/logger": "9.15.0",
-				"@wdio/types": "9.15.0",
-				"@wdio/utils": "9.15.0",
+				"@wdio/config": "9.23.2",
+				"@wdio/dot-reporter": "9.23.2",
+				"@wdio/globals": "9.23.0",
+				"@wdio/logger": "9.18.0",
+				"@wdio/types": "9.23.2",
+				"@wdio/utils": "9.23.2",
 				"deepmerge-ts": "^7.0.3",
-				"expect-webdriverio": "^5.1.0",
-				"webdriver": "9.15.0",
-				"webdriverio": "9.15.0"
+				"webdriver": "9.23.2",
+				"webdriverio": "9.23.2"
 			},
 			"engines": {
 				"node": ">=18.20.0"
+			},
+			"peerDependencies": {
+				"expect-webdriverio": "^5.3.4",
+				"webdriverio": "^9.0.0"
+			},
+			"peerDependenciesMeta": {
+				"expect-webdriverio": {
+					"optional": false
+				},
+				"webdriverio": {
+					"optional": false
+				}
 			}
 		},
 		"node_modules/@wdio/runner/node_modules/@wdio/config": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/config/-/config-9.15.0.tgz",
-			"integrity": "sha512-IQzSZx2Y0KdAVWHSdcBLkuUjCmYtOnc1oDY7Psi814wDR7dEPVOuKgMo8ZZ0P1yhioMzqvy5tBemYSzj7CrFTA==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/config/-/config-9.23.2.tgz",
+			"integrity": "sha512-19Z+AIQ1NUpr6ncTumjSthm6A7c3DbaGTp+VCdcyN+vHYOK4WsWIomSk+uSbFosYFQVGRjCaHaeGSnC8GNPGYQ==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
-				"@wdio/logger": "9.15.0",
-				"@wdio/types": "9.15.0",
-				"@wdio/utils": "9.15.0",
+				"@wdio/logger": "9.18.0",
+				"@wdio/types": "9.23.2",
+				"@wdio/utils": "9.23.2",
 				"deepmerge-ts": "^7.0.3",
 				"glob": "^10.2.2",
 				"import-meta-resolve": "^4.0.0"
@@ -6515,48 +6483,37 @@
 			}
 		},
 		"node_modules/@wdio/runner/node_modules/@wdio/globals": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/globals/-/globals-9.15.0.tgz",
-			"integrity": "sha512-4bEnqoHr676x4hyq7yOp+V+wVgclisNeOwMyLPEIJOv+cAAxESzIOdFyiQcbAu7gq+HUIuoWMZGlV9UgDnXh1w==",
+			"version": "9.23.0",
+			"resolved": "https://registry.npmjs.org/@wdio/globals/-/globals-9.23.0.tgz",
+			"integrity": "sha512-OmwPKV8c5ecLqo+EkytN7oUeYfNmRI4uOXGIR1ybP7AK5Zz+l9R0dGfoadEuwi1aZXAL0vwuhtq3p0OL3dfqHQ==",
 			"dev": true,
-			"license": "MIT",
 			"engines": {
 				"node": ">=18.20.0"
 			},
-			"optionalDependencies": {
-				"expect-webdriverio": "^5.1.0",
-				"webdriverio": "9.15.0"
-			}
-		},
-		"node_modules/@wdio/runner/node_modules/@wdio/logger": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-9.15.0.tgz",
-			"integrity": "sha512-3IkaissyOsUQwg8IinkVm1svsvRMGJpFyaSiEhQ0oQXD7mnWrNVFSU9kmeFvbKAtoc4j60FRjU6XqtH94xRceg==",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"chalk": "^5.1.2",
-				"loglevel": "^1.6.0",
-				"loglevel-plugin-prefix": "^0.8.4",
-				"strip-ansi": "^7.1.0"
+			"peerDependencies": {
+				"expect-webdriverio": "^5.3.4",
+				"webdriverio": "^9.0.0"
 			},
-			"engines": {
-				"node": ">=18.20.0"
+			"peerDependenciesMeta": {
+				"expect-webdriverio": {
+					"optional": false
+				},
+				"webdriverio": {
+					"optional": false
+				}
 			}
 		},
 		"node_modules/@wdio/runner/node_modules/@wdio/protocols": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-9.15.0.tgz",
-			"integrity": "sha512-5O7bwiG7t8nmSVOx888YryO/9AQgQ7p/Ecd9rS13UyDQL169HmVKXP0vvJKGH3X+oeE92U1wVrwrIl4Xx3BQ6Q==",
-			"dev": true,
-			"license": "MIT"
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-9.23.2.tgz",
+			"integrity": "sha512-pmCYOYI2N89QCC8IaiHwaWyP0mR8T1iKkEGpoTq2XVihp7VK/lfPvieyeZT5/e28MadYLJsDQ603pbu5J1NRDg==",
+			"dev": true
 		},
 		"node_modules/@wdio/runner/node_modules/@wdio/types": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.15.0.tgz",
-			"integrity": "sha512-hR0Dm9TsrjtgOLWOjUMYTOB1hWIlnDzFgZt7XGOzI9Ig8Qa+TDfZSFaZukGxqLIZS/eGhxpnunSHaTAXwJIxYA==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.23.2.tgz",
+			"integrity": "sha512-ryfrERGsNp+aCcrTE1rFU6cbmDj8GHZ04R9k52KNt2u1a6bv3Eh5A/cUA0hXuMdEUfsc8ePLYdwQyOLFydZ0ig==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@types/node": "^20.1.0"
 			},
@@ -6565,22 +6522,22 @@
 			}
 		},
 		"node_modules/@wdio/runner/node_modules/@wdio/utils": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-9.15.0.tgz",
-			"integrity": "sha512-XuT1PE1nh4wwJfQW6IN4UT6+iv0+Yf4zhgMh5et04OX6tfrIXkWdx2SDimghDtRukp9i85DvIGWjdPEoQFQdaA==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-9.23.2.tgz",
+			"integrity": "sha512-+QfgXUWeA940AXT5l5UlrBKoHBk9GLSQE3BA+7ra1zWuFvv6SHG6M2mwplcPlOlymJMqXy8e7ZgLEoLkXuvC1Q==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@puppeteer/browsers": "^2.2.0",
-				"@wdio/logger": "9.15.0",
-				"@wdio/types": "9.15.0",
+				"@wdio/logger": "9.18.0",
+				"@wdio/types": "9.23.2",
 				"decamelize": "^6.0.0",
 				"deepmerge-ts": "^7.0.3",
-				"edgedriver": "^6.1.1",
-				"geckodriver": "^5.0.0",
+				"edgedriver": "^6.1.2",
+				"geckodriver": "^6.1.0",
 				"get-port": "^7.0.0",
 				"import-meta-resolve": "^4.0.0",
 				"locate-app": "^2.2.24",
+				"mitt": "^3.0.1",
 				"safaridriver": "^1.0.0",
 				"split2": "^4.2.0",
 				"wait-port": "^1.1.0"
@@ -6589,64 +6546,48 @@
 				"node": ">=18.20.0"
 			}
 		},
-		"node_modules/@wdio/runner/node_modules/htmlfy": {
-			"version": "0.6.7",
-			"resolved": "https://registry.npmjs.org/htmlfy/-/htmlfy-0.6.7.tgz",
-			"integrity": "sha512-r8hRd+oIM10lufovN+zr3VKPTYEIvIwqXGucidh2XQufmiw6sbUXFUFjWlfjo3AnefIDTyzykVzQ8IUVuT1peQ==",
-			"dev": true,
-			"license": "MIT"
-		},
-		"node_modules/@wdio/runner/node_modules/serialize-error": {
-			"version": "11.0.3",
-			"resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-11.0.3.tgz",
-			"integrity": "sha512-2G2y++21dhj2R7iHAdd0FIzjGwuKZld+7Pl/bTU6YIkrC2ZMbVUjm+luj6A6V34Rv9XfKJDKpTWu9W4Gse1D9g==",
+		"node_modules/@wdio/runner/node_modules/geckodriver": {
+			"version": "6.1.0",
+			"resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-6.1.0.tgz",
+			"integrity": "sha512-ZRXLa4ZaYTTgUO4Eefw+RsQCleugU2QLb1ME7qTYxxuRj51yAhfnXaItXNs5/vUzfIaDHuZ+YnSF005hfp07nQ==",
 			"dev": true,
-			"license": "MIT",
+			"hasInstallScript": true,
 			"dependencies": {
-				"type-fest": "^2.12.2"
+				"@wdio/logger": "^9.18.0",
+				"@zip.js/zip.js": "^2.8.11",
+				"decamelize": "^6.0.1",
+				"http-proxy-agent": "^7.0.2",
+				"https-proxy-agent": "^7.0.6",
+				"modern-tar": "^0.7.2"
 			},
-			"engines": {
-				"node": ">=14.16"
+			"bin": {
+				"geckodriver": "bin/geckodriver.js"
 			},
-			"funding": {
-				"url": "https://github.com/sponsors/sindresorhus"
-			}
-		},
-		"node_modules/@wdio/runner/node_modules/type-fest": {
-			"version": "2.19.0",
-			"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
-			"integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
-			"dev": true,
-			"license": "(MIT OR CC0-1.0)",
 			"engines": {
-				"node": ">=12.20"
-			},
-			"funding": {
-				"url": "https://github.com/sponsors/sindresorhus"
+				"node": ">=20.0.0"
 			}
 		},
 		"node_modules/@wdio/runner/node_modules/webdriverio": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-9.15.0.tgz",
-			"integrity": "sha512-910g6ktwXdAKGyhgCPGw9BzIKOEBBYMFN1bLwC3bW/3mFlxGHO/n70c7Sg9hrsu9VWTzv6m+1Clf27B9uz4a/Q==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-9.23.2.tgz",
+			"integrity": "sha512-VjfTw1bRJdBrzjoCu7BGThxn1JK2V7mAGvxibaBrCNIayPPQjLhVDNJPOVEiR7txM6zmOUWxhkCDxHjhMYirfQ==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@types/node": "^20.11.30",
 				"@types/sinonjs__fake-timers": "^8.1.5",
-				"@wdio/config": "9.15.0",
-				"@wdio/logger": "9.15.0",
-				"@wdio/protocols": "9.15.0",
-				"@wdio/repl": "9.4.4",
-				"@wdio/types": "9.15.0",
-				"@wdio/utils": "9.15.0",
+				"@wdio/config": "9.23.2",
+				"@wdio/logger": "9.18.0",
+				"@wdio/protocols": "9.23.2",
+				"@wdio/repl": "9.16.2",
+				"@wdio/types": "9.23.2",
+				"@wdio/utils": "9.23.2",
 				"archiver": "^7.0.1",
 				"aria-query": "^5.3.0",
 				"cheerio": "^1.0.0-rc.12",
 				"css-shorthand-properties": "^1.1.1",
 				"css-value": "^0.0.1",
 				"grapheme-splitter": "^1.0.4",
-				"htmlfy": "^0.6.0",
+				"htmlfy": "^0.8.1",
 				"is-plain-obj": "^4.1.0",
 				"jszip": "^3.10.1",
 				"lodash.clonedeep": "^4.5.0",
@@ -6654,9 +6595,9 @@
 				"query-selector-shadow-dom": "^1.0.1",
 				"resq": "^1.11.0",
 				"rgb2hex": "0.2.5",
-				"serialize-error": "^11.0.3",
+				"serialize-error": "^12.0.0",
 				"urlpattern-polyfill": "^10.0.0",
-				"webdriver": "9.15.0"
+				"webdriver": "9.23.2"
 			},
 			"engines": {
 				"node": ">=18.20.0"
@@ -6671,14 +6612,13 @@
 			}
 		},
 		"node_modules/@wdio/spec-reporter": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/spec-reporter/-/spec-reporter-9.15.0.tgz",
-			"integrity": "sha512-xu8uVGyk2HEAvdzPmspxTJMJc3UxGzdKjqNIUVpCQpVYkKOd6zm1RH2Cpdb7gsx2j/+ddYZEVhftFGR9YOQF6g==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/spec-reporter/-/spec-reporter-9.23.2.tgz",
+			"integrity": "sha512-9uwbrOFgPuF5NqixiU9db46HNJERN04beefNh4f4usJSP41Mbru0isps64qKkWSpFJhYl1LZrSGELezxH9bZ6A==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
-				"@wdio/reporter": "9.15.0",
-				"@wdio/types": "9.15.0",
+				"@wdio/reporter": "9.23.2",
+				"@wdio/types": "9.23.2",
 				"chalk": "^5.1.2",
 				"easy-table": "^1.2.0",
 				"pretty-ms": "^9.0.0"
@@ -6688,11 +6628,10 @@
 			}
 		},
 		"node_modules/@wdio/spec-reporter/node_modules/@wdio/types": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.15.0.tgz",
-			"integrity": "sha512-hR0Dm9TsrjtgOLWOjUMYTOB1hWIlnDzFgZt7XGOzI9Ig8Qa+TDfZSFaZukGxqLIZS/eGhxpnunSHaTAXwJIxYA==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.23.2.tgz",
+			"integrity": "sha512-ryfrERGsNp+aCcrTE1rFU6cbmDj8GHZ04R9k52KNt2u1a6bv3Eh5A/cUA0hXuMdEUfsc8ePLYdwQyOLFydZ0ig==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@types/node": "^20.1.0"
 			},
@@ -6739,6 +6678,18 @@
 				"node": ">=18.20.0"
 			}
 		},
+		"node_modules/@wdio/xvfb": {
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/xvfb/-/xvfb-9.23.2.tgz",
+			"integrity": "sha512-48KiET6Phmu7SIQgpTXSn7eRJK6MJdTKib2MLT5WTKIJ+t0OyGKl/ESXi6tzFrGFPzLkvogSIRy8O2sKM0PcbA==",
+			"dev": true,
+			"dependencies": {
+				"@wdio/logger": "9.18.0"
+			},
+			"engines": {
+				"node": ">=18"
+			}
+		},
 		"node_modules/@wikimedia/codex": {
 			"version": "2.3.2",
 			"resolved": "https://registry.npmjs.org/@wikimedia/codex/-/codex-2.3.2.tgz",
@@ -6767,15 +6718,14 @@
 			}
 		},
 		"node_modules/@zip.js/zip.js": {
-			"version": "2.8.2",
-			"resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.8.2.tgz",
-			"integrity": "sha512-PI6UdgpSeVoGvzguKHmy2bwOqI3UYkntLZOCpyJSKIi7234c5aJmQYkJB/P4P2YUJkqhbqvu7iM2/0eJZ178nA==",
+			"version": "2.8.15",
+			"resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.8.15.tgz",
+			"integrity": "sha512-HZKJLFe4eGVgCe9J87PnijY7T1Zn638bEHS+Fm/ygHZozRpefzWcOYfPaP52S8pqk9g4xN3+LzMDl3Lv9dLglA==",
 			"dev": true,
-			"license": "BSD-3-Clause",
 			"engines": {
 				"bun": ">=0.7.0",
 				"deno": ">=1.0.0",
-				"node": ">=16.5.0"
+				"node": ">=18.0.0"
 			}
 		},
 		"node_modules/abab": {
@@ -6970,14 +6920,13 @@
 			}
 		},
 		"node_modules/api-testing": {
-			"version": "1.7.1",
-			"resolved": "https://registry.npmjs.org/api-testing/-/api-testing-1.7.1.tgz",
-			"integrity": "sha512-h6eqLa9uOOpbBXGN6/s91GquV1YprC1XLVtWIRv/25XWFRqHibIBwuXjqcUqFSsU1fgYvfclSMRXuUcCvEmX6A==",
+			"version": "1.7.2",
+			"resolved": "https://registry.npmjs.org/api-testing/-/api-testing-1.7.2.tgz",
+			"integrity": "sha512-W6vgHMjmTUMq8He4pRdpLNjfkBre0N/ygv6tT6jrWZQdZlBWDZHi+0pEg8FxBi0U9QzhUfaATrPZkfnF7YVt3g==",
 			"dev": true,
-			"license": "ISC",
 			"dependencies": {
 				"chai": "4.5.0",
-				"supertest": "7.1.0"
+				"supertest": "7.2.2"
 			},
 			"engines": {
 				"node": ">= 14.18.0"
@@ -7168,8 +7117,7 @@
 			"version": "2.0.6",
 			"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
 			"integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==",
-			"dev": true,
-			"license": "MIT"
+			"dev": true
 		},
 		"node_modules/assertion-error": {
 			"version": "1.1.0",
@@ -7761,7 +7709,6 @@
 			"resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
 			"integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"call-bind-apply-helpers": "^1.0.2",
 				"get-intrinsic": "^1.3.0"
@@ -7954,11 +7901,10 @@
 			}
 		},
 		"node_modules/cheerio/node_modules/undici": {
-			"version": "7.16.0",
-			"resolved": "https://registry.npmjs.org/undici/-/undici-7.16.0.tgz",
-			"integrity": "sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==",
+			"version": "7.19.0",
+			"resolved": "https://registry.npmjs.org/undici/-/undici-7.19.0.tgz",
+			"integrity": "sha512-Heho1hJD81YChi+uS2RkSjcVO+EQLmLSyUlHyp7Y/wFbxQaGb4WXVKD073JytrjXJVkSZVzoE2MCSOKugFGtOQ==",
 			"dev": true,
-			"license": "MIT",
 			"engines": {
 				"node": ">=20.18.1"
 			}
@@ -8220,7 +8166,6 @@
 			"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz",
 			"integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==",
 			"dev": true,
-			"license": "MIT",
 			"funding": {
 				"url": "https://github.com/sponsors/sindresorhus"
 			}
@@ -8307,12 +8252,20 @@
 			"dev": true,
 			"license": "MIT"
 		},
+		"node_modules/cookie-signature": {
+			"version": "1.2.2",
+			"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz",
+			"integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==",
+			"dev": true,
+			"engines": {
+				"node": ">=6.6.0"
+			}
+		},
 		"node_modules/cookiejar": {
 			"version": "2.1.4",
 			"resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz",
 			"integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==",
-			"dev": true,
-			"license": "MIT"
+			"dev": true
 		},
 		"node_modules/core-js-compat": {
 			"version": "3.45.1",
@@ -8939,18 +8892,16 @@
 			"resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz",
 			"integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==",
 			"dev": true,
-			"license": "ISC",
 			"dependencies": {
 				"asap": "^2.0.0",
 				"wrappy": "1"
 			}
 		},
 		"node_modules/diff": {
-			"version": "7.0.0",
-			"resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz",
-			"integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==",
+			"version": "8.0.3",
+			"resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz",
+			"integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==",
 			"dev": true,
-			"license": "BSD-3-Clause",
 			"engines": {
 				"node": ">=0.3.1"
 			}
@@ -10650,6 +10601,18 @@
 				"node": ">= 0.8.0"
 			}
 		},
+		"node_modules/exit-hook": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-4.0.0.tgz",
+			"integrity": "sha512-Fqs7ChZm72y40wKjOFXBKg7nJZvQJmewP5/7LtePDdnah/+FH9Hp5sgMujSCMPXlxOAW2//1jrW9pnsY7o20vQ==",
+			"dev": true,
+			"engines": {
+				"node": ">=18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
 		"node_modules/expand-tilde": {
 			"version": "2.0.2",
 			"resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
@@ -10874,8 +10837,7 @@
 			"version": "2.1.1",
 			"resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
 			"integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
-			"dev": true,
-			"license": "MIT"
+			"dev": true
 		},
 		"node_modules/fast-uri": {
 			"version": "3.1.0",
@@ -11175,11 +11137,10 @@
 			}
 		},
 		"node_modules/form-data": {
-			"version": "4.0.4",
-			"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
-			"integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
+			"version": "4.0.5",
+			"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
+			"integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"asynckit": "^0.4.0",
 				"combined-stream": "^1.0.8",
@@ -11209,7 +11170,6 @@
 			"resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz",
 			"integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@paralleldrive/cuid2": "^2.2.2",
 				"dezalgo": "^1.0.4",
@@ -16555,11 +16515,10 @@
 			}
 		},
 		"node_modules/lodash": {
-			"version": "4.17.21",
-			"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
-			"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
-			"dev": true,
-			"license": "MIT"
+			"version": "4.17.23",
+			"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
+			"integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==",
+			"dev": true
 		},
 		"node_modules/lodash.clonedeep": {
 			"version": "4.5.0",
@@ -16862,7 +16821,6 @@
 			"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
 			"integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
 			"dev": true,
-			"license": "MIT",
 			"engines": {
 				"node": ">= 0.6"
 			}
@@ -16899,7 +16857,6 @@
 			"resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
 			"integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
 			"dev": true,
-			"license": "MIT",
 			"bin": {
 				"mime": "cli.js"
 			},
@@ -17072,11 +17029,10 @@
 			}
 		},
 		"node_modules/mocha/node_modules/diff": {
-			"version": "5.2.0",
-			"resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
-			"integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
+			"version": "5.2.2",
+			"resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz",
+			"integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==",
 			"dev": true,
-			"license": "BSD-3-Clause",
 			"engines": {
 				"node": ">=0.3.1"
 			}
@@ -17242,6 +17198,15 @@
 				"node": ">=10"
 			}
 		},
+		"node_modules/modern-tar": {
+			"version": "0.7.3",
+			"resolved": "https://registry.npmjs.org/modern-tar/-/modern-tar-0.7.3.tgz",
+			"integrity": "sha512-4W79zekKGyYU4JXVmB78DOscMFaJth2gGhgfTl2alWE4rNe3nf4N2pqenQ0rEtIewrnD79M687Ouba3YGTLOvg==",
+			"dev": true,
+			"engines": {
+				"node": ">=18.0.0"
+			}
+		},
 		"node_modules/ms": {
 			"version": "2.1.3",
 			"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -18401,11 +18366,10 @@
 			"license": "MIT"
 		},
 		"node_modules/qs": {
-			"version": "6.14.0",
-			"resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
-			"integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==",
+			"version": "6.14.1",
+			"resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz",
+			"integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==",
 			"dev": true,
-			"license": "BSD-3-Clause",
 			"dependencies": {
 				"side-channel": "^1.1.0"
 			},
@@ -19342,7 +19306,6 @@
 			"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
 			"integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"es-errors": "^1.3.0",
 				"object-inspect": "^1.13.3",
@@ -19362,7 +19325,6 @@
 			"resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
 			"integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"es-errors": "^1.3.0",
 				"object-inspect": "^1.13.3"
@@ -19379,7 +19341,6 @@
 			"resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
 			"integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"call-bound": "^1.0.2",
 				"es-errors": "^1.3.0",
@@ -19398,7 +19359,6 @@
 			"resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
 			"integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"call-bound": "^1.0.2",
 				"es-errors": "^1.3.0",
@@ -20413,37 +20373,34 @@
 			}
 		},
 		"node_modules/superagent": {
-			"version": "9.0.2",
-			"resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz",
-			"integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==",
-			"deprecated": "Please upgrade to superagent v10.2.2+, see release notes at https://github.com/forwardemail/superagent/releases/tag/v10.2.2 - maintenance is supported by Forward Email @ https://forwardemail.net",
+			"version": "10.3.0",
+			"resolved": "https://registry.npmjs.org/superagent/-/superagent-10.3.0.tgz",
+			"integrity": "sha512-B+4Ik7ROgVKrQsXTV0Jwp2u+PXYLSlqtDAhYnkkD+zn3yg8s/zjA2MeGayPoY/KICrbitwneDHrjSotxKL+0XQ==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
-				"component-emitter": "^1.3.0",
+				"component-emitter": "^1.3.1",
 				"cookiejar": "^2.1.4",
-				"debug": "^4.3.4",
+				"debug": "^4.3.7",
 				"fast-safe-stringify": "^2.1.1",
-				"form-data": "^4.0.0",
-				"formidable": "^3.5.1",
+				"form-data": "^4.0.5",
+				"formidable": "^3.5.4",
 				"methods": "^1.1.2",
 				"mime": "2.6.0",
-				"qs": "^6.11.0"
+				"qs": "^6.14.1"
 			},
 			"engines": {
 				"node": ">=14.18.0"
 			}
 		},
 		"node_modules/supertest": {
-			"version": "7.1.0",
-			"resolved": "https://registry.npmjs.org/supertest/-/supertest-7.1.0.tgz",
-			"integrity": "sha512-5QeSO8hSrKghtcWEoPiO036fxH0Ii2wVQfFZSP0oqQhmjk8bOLhDFXr4JrvaFmPuEWUoq4znY3uSi8UzLKxGqw==",
-			"deprecated": "Please upgrade to supertest v7.1.3+, see release notes at https://github.com/forwardemail/supertest/releases/tag/v7.1.3 - maintenance is supported by Forward Email @ https://forwardemail.net",
+			"version": "7.2.2",
+			"resolved": "https://registry.npmjs.org/supertest/-/supertest-7.2.2.tgz",
+			"integrity": "sha512-oK8WG9diS3DlhdUkcFn4tkNIiIbBx9lI2ClF8K+b2/m8Eyv47LSawxUzZQSNKUrVb2KsqeTDCcjAAVPYaSLVTA==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
+				"cookie-signature": "^1.2.2",
 				"methods": "^1.1.2",
-				"superagent": "^9.0.1"
+				"superagent": "^10.3.0"
 			},
 			"engines": {
 				"node": ">=14.18.0"
@@ -20931,11 +20888,10 @@
 			}
 		},
 		"node_modules/undici": {
-			"version": "6.21.3",
-			"resolved": "https://registry.npmjs.org/undici/-/undici-6.21.3.tgz",
-			"integrity": "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==",
+			"version": "6.23.0",
+			"resolved": "https://registry.npmjs.org/undici/-/undici-6.23.0.tgz",
+			"integrity": "sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==",
 			"dev": true,
-			"license": "MIT",
 			"engines": {
 				"node": ">=18.17"
 			}
@@ -21357,21 +21313,21 @@
 			}
 		},
 		"node_modules/webdriver": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/webdriver/-/webdriver-9.15.0.tgz",
-			"integrity": "sha512-JCW5xvhZtL6kjbckdePgVYMOlvWbh22F1VFkIf9pw3prwXI2EHED5Eq/nfDnNfHiqr0AfFKWmIDPziSafrVv4Q==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/webdriver/-/webdriver-9.23.2.tgz",
+			"integrity": "sha512-HZy3eydZbmex0pbyLwHaDsAyZ+S+V4XQTdGK/nAOi4uPa74U6yT9vXqtb+3B+5/LDM7L8kTD6Z3b1y4gB4pmTw==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@types/node": "^20.1.0",
 				"@types/ws": "^8.5.3",
-				"@wdio/config": "9.15.0",
-				"@wdio/logger": "9.15.0",
-				"@wdio/protocols": "9.15.0",
-				"@wdio/types": "9.15.0",
-				"@wdio/utils": "9.15.0",
+				"@wdio/config": "9.23.2",
+				"@wdio/logger": "9.18.0",
+				"@wdio/protocols": "9.23.2",
+				"@wdio/types": "9.23.2",
+				"@wdio/utils": "9.23.2",
 				"deepmerge-ts": "^7.0.3",
-				"undici": "^6.20.1",
+				"https-proxy-agent": "^7.0.6",
+				"undici": "^6.21.3",
 				"ws": "^8.8.0"
 			},
 			"engines": {
@@ -21379,15 +21335,14 @@
 			}
 		},
 		"node_modules/webdriver/node_modules/@wdio/config": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/config/-/config-9.15.0.tgz",
-			"integrity": "sha512-IQzSZx2Y0KdAVWHSdcBLkuUjCmYtOnc1oDY7Psi814wDR7dEPVOuKgMo8ZZ0P1yhioMzqvy5tBemYSzj7CrFTA==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/config/-/config-9.23.2.tgz",
+			"integrity": "sha512-19Z+AIQ1NUpr6ncTumjSthm6A7c3DbaGTp+VCdcyN+vHYOK4WsWIomSk+uSbFosYFQVGRjCaHaeGSnC8GNPGYQ==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
-				"@wdio/logger": "9.15.0",
-				"@wdio/types": "9.15.0",
-				"@wdio/utils": "9.15.0",
+				"@wdio/logger": "9.18.0",
+				"@wdio/types": "9.23.2",
+				"@wdio/utils": "9.23.2",
 				"deepmerge-ts": "^7.0.3",
 				"glob": "^10.2.2",
 				"import-meta-resolve": "^4.0.0"
@@ -21396,35 +21351,17 @@
 				"node": ">=18.20.0"
 			}
 		},
-		"node_modules/webdriver/node_modules/@wdio/logger": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-9.15.0.tgz",
-			"integrity": "sha512-3IkaissyOsUQwg8IinkVm1svsvRMGJpFyaSiEhQ0oQXD7mnWrNVFSU9kmeFvbKAtoc4j60FRjU6XqtH94xRceg==",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"chalk": "^5.1.2",
-				"loglevel": "^1.6.0",
-				"loglevel-plugin-prefix": "^0.8.4",
-				"strip-ansi": "^7.1.0"
-			},
-			"engines": {
-				"node": ">=18.20.0"
-			}
-		},
 		"node_modules/webdriver/node_modules/@wdio/protocols": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-9.15.0.tgz",
-			"integrity": "sha512-5O7bwiG7t8nmSVOx888YryO/9AQgQ7p/Ecd9rS13UyDQL169HmVKXP0vvJKGH3X+oeE92U1wVrwrIl4Xx3BQ6Q==",
-			"dev": true,
-			"license": "MIT"
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-9.23.2.tgz",
+			"integrity": "sha512-pmCYOYI2N89QCC8IaiHwaWyP0mR8T1iKkEGpoTq2XVihp7VK/lfPvieyeZT5/e28MadYLJsDQ603pbu5J1NRDg==",
+			"dev": true
 		},
 		"node_modules/webdriver/node_modules/@wdio/types": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.15.0.tgz",
-			"integrity": "sha512-hR0Dm9TsrjtgOLWOjUMYTOB1hWIlnDzFgZt7XGOzI9Ig8Qa+TDfZSFaZukGxqLIZS/eGhxpnunSHaTAXwJIxYA==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.23.2.tgz",
+			"integrity": "sha512-ryfrERGsNp+aCcrTE1rFU6cbmDj8GHZ04R9k52KNt2u1a6bv3Eh5A/cUA0hXuMdEUfsc8ePLYdwQyOLFydZ0ig==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@types/node": "^20.1.0"
 			},
@@ -21433,22 +21370,22 @@
 			}
 		},
 		"node_modules/webdriver/node_modules/@wdio/utils": {
-			"version": "9.15.0",
-			"resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-9.15.0.tgz",
-			"integrity": "sha512-XuT1PE1nh4wwJfQW6IN4UT6+iv0+Yf4zhgMh5et04OX6tfrIXkWdx2SDimghDtRukp9i85DvIGWjdPEoQFQdaA==",
+			"version": "9.23.2",
+			"resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-9.23.2.tgz",
+			"integrity": "sha512-+QfgXUWeA940AXT5l5UlrBKoHBk9GLSQE3BA+7ra1zWuFvv6SHG6M2mwplcPlOlymJMqXy8e7ZgLEoLkXuvC1Q==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@puppeteer/browsers": "^2.2.0",
-				"@wdio/logger": "9.15.0",
-				"@wdio/types": "9.15.0",
+				"@wdio/logger": "9.18.0",
+				"@wdio/types": "9.23.2",
 				"decamelize": "^6.0.0",
 				"deepmerge-ts": "^7.0.3",
-				"edgedriver": "^6.1.1",
-				"geckodriver": "^5.0.0",
+				"edgedriver": "^6.1.2",
+				"geckodriver": "^6.1.0",
 				"get-port": "^7.0.0",
 				"import-meta-resolve": "^4.0.0",
 				"locate-app": "^2.2.24",
+				"mitt": "^3.0.1",
 				"safaridriver": "^1.0.0",
 				"split2": "^4.2.0",
 				"wait-port": "^1.1.0"
@@ -21457,6 +21394,27 @@
 				"node": ">=18.20.0"
 			}
 		},
+		"node_modules/webdriver/node_modules/geckodriver": {
+			"version": "6.1.0",
+			"resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-6.1.0.tgz",
+			"integrity": "sha512-ZRXLa4ZaYTTgUO4Eefw+RsQCleugU2QLb1ME7qTYxxuRj51yAhfnXaItXNs5/vUzfIaDHuZ+YnSF005hfp07nQ==",
+			"dev": true,
+			"hasInstallScript": true,
+			"dependencies": {
+				"@wdio/logger": "^9.18.0",
+				"@zip.js/zip.js": "^2.8.11",
+				"decamelize": "^6.0.1",
+				"http-proxy-agent": "^7.0.2",
+				"https-proxy-agent": "^7.0.6",
+				"modern-tar": "^0.7.2"
+			},
+			"bin": {
+				"geckodriver": "bin/geckodriver.js"
+			},
+			"engines": {
+				"node": ">=20.0.0"
+			}
+		},
 		"node_modules/webdriverio": {
 			"version": "9.18.4",
 			"resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-9.18.4.tgz",
@@ -21502,19 +21460,6 @@
 				}
 			}
 		},
-		"node_modules/webdriverio/node_modules/@wdio/repl": {
-			"version": "9.16.2",
-			"resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-9.16.2.tgz",
-			"integrity": "sha512-FLTF0VL6+o5BSTCO7yLSXocm3kUnu31zYwzdsz4n9s5YWt83sCtzGZlZpt7TaTzb3jVUfxuHNQDTb8UMkCu0lQ==",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"@types/node": "^20.1.0"
-			},
-			"engines": {
-				"node": ">=18.20.0"
-			}
-		},
 		"node_modules/webdriverio/node_modules/webdriver": {
 			"version": "9.18.0",
 			"resolved": "https://registry.npmjs.org/webdriver/-/webdriver-9.18.0.tgz",
diff --git a/package.json b/package.json
index 42543fc..95bf0a6 100644
--- a/package.json
+++ b/package.json
@@ -14,12 +14,12 @@
 		"@vue/test-utils": "^2.4.6",
 		"@vue/vue3-jest": "^29.2.6",
 		"@wdio/cli": "9.18.4",
-		"@wdio/junit-reporter": "9.15.0",
-		"@wdio/local-runner": "9.15.0",
+		"@wdio/junit-reporter": "9.23.2",
+		"@wdio/local-runner": "9.23.2",
 		"@wdio/mocha-framework": "9.15.0",
-		"@wdio/spec-reporter": "9.15.0",
+		"@wdio/spec-reporter": "9.23.2",
 		"@wikimedia/codex": "2.3.2",
-		"api-testing": "1.7.1",
+		"api-testing": "1.7.2",
 		"eslint-config-wikimedia": "0.32.3",
 		"grunt": "1.6.1",
 		"grunt-banana-checker": "0.13.0",
-- 
2.47.3


--- end ---
Source code is licensed under the AGPL.