1diff --git a/Rnwood.Smtp4dev/ClientApp/package-lock.json b/Rnwood.Smtp4dev/ClientApp/package-lock.json
2index be143b7..6e8b0b4 100644
3--- a/Rnwood.Smtp4dev/ClientApp/package-lock.json
4+++ b/Rnwood.Smtp4dev/ClientApp/package-lock.json
5@@ -20,7 +20,8 @@
6 "@microsoft/signalr": "^8.0.0",
7 "@types/jest": "^29.5.12",
8 "@types/sanitize-html": "^2.11.0",
9- "@typescript-eslint/parser": "^8.0.0",
10+ "@typescript-eslint/eslint-plugin": "^8.31.1",
11+ "@typescript-eslint/parser": "^8.31.1",
12 "@vitejs/plugin-vue": "^5.0.4",
13 "@vue/eslint-config-typescript": "^13.0.0",
14 "@vue/vue3-jest": "^29.2.6",
15@@ -2937,7 +2938,8 @@
16 "version": "7.0.15",
17 "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
18 "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
19- "dev": true
20+ "dev": true,
21+ "peer": true
22 },
23 "node_modules/@types/lodash": {
24 "version": "4.17.0",
25@@ -2993,12 +2995,6 @@
26 "entities": "^4.4.0"
27 }
28 },
29- "node_modules/@types/semver": {
30- "version": "7.5.8",
31- "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
32- "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
33- "dev": true
34- },
35 "node_modules/@types/stack-utils": {
36 "version": "2.0.3",
37 "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz",
38@@ -3039,84 +3035,59 @@
39 "dev": true
40 },
41 "node_modules/@typescript-eslint/eslint-plugin": {
42- "version": "7.6.0",
43- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.6.0.tgz",
44- "integrity": "sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==",
45+ "version": "8.31.1",
46+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.31.1.tgz",
47+ "integrity": "sha512-oUlH4h1ABavI4F0Xnl8/fOtML/eu8nI2A1nYd+f+55XI0BLu+RIqKoCiZKNo6DtqZBEQm5aNKA20G3Z5w3R6GQ==",
48 "dev": true,
49+ "license": "MIT",
50 "dependencies": {
51 "@eslint-community/regexpp": "^4.10.0",
52- "@typescript-eslint/scope-manager": "7.6.0",
53- "@typescript-eslint/type-utils": "7.6.0",
54- "@typescript-eslint/utils": "7.6.0",
55- "@typescript-eslint/visitor-keys": "7.6.0",
56- "debug": "^4.3.4",
57+ "@typescript-eslint/scope-manager": "8.31.1",
58+ "@typescript-eslint/type-utils": "8.31.1",
59+ "@typescript-eslint/utils": "8.31.1",
60+ "@typescript-eslint/visitor-keys": "8.31.1",
61 "graphemer": "^1.4.0",
62 "ignore": "^5.3.1",
63 "natural-compare": "^1.4.0",
64- "semver": "^7.6.0",
65- "ts-api-utils": "^1.3.0"
66+ "ts-api-utils": "^2.0.1"
67 },
68 "engines": {
69- "node": "^18.18.0 || >=20.0.0"
70+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
71 },
72 "funding": {
73 "type": "opencollective",
74 "url": "https://opencollective.com/typescript-eslint"
75 },
76 "peerDependencies": {
77- "@typescript-eslint/parser": "^7.0.0",
78- "eslint": "^8.56.0"
79- },
80- "peerDependenciesMeta": {
81- "typescript": {
82- "optional": true
83- }
84+ "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0",
85+ "eslint": "^8.57.0 || ^9.0.0",
86+ "typescript": ">=4.8.4 <5.9.0"
87 }
88 },
89- "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": {
90- "version": "6.0.0",
91- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
92- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
93+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/ts-api-utils": {
94+ "version": "2.1.0",
95+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
96+ "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
97 "dev": true,
98- "dependencies": {
99- "yallist": "^4.0.0"
100- },
101+ "license": "MIT",
102 "engines": {
103- "node": ">=10"
104- }
105- },
106- "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": {
107- "version": "7.6.0",
108- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
109- "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
110- "dev": true,
111- "dependencies": {
112- "lru-cache": "^6.0.0"
113- },
114- "bin": {
115- "semver": "bin/semver.js"
116+ "node": ">=18.12"
117 },
118- "engines": {
119- "node": ">=10"
120+ "peerDependencies": {
121+ "typescript": ">=4.8.4"
122 }
123 },
124- "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": {
125- "version": "4.0.0",
126- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
127- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
128- "dev": true
129- },
130 "node_modules/@typescript-eslint/parser": {
131- "version": "8.31.0",
132- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.31.0.tgz",
133- "integrity": "sha512-67kYYShjBR0jNI5vsf/c3WG4u+zDnCTHTPqVMQguffaWWFs7artgwKmfwdifl+r6XyM5LYLas/dInj2T0SgJyw==",
134+ "version": "8.31.1",
135+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.31.1.tgz",
136+ "integrity": "sha512-oU/OtYVydhXnumd0BobL9rkJg7wFJ9bFFPmSmB/bf/XWN85hlViji59ko6bSKBXyseT9V8l+CN1nwmlbiN0G7Q==",
137 "dev": true,
138 "license": "MIT",
139 "dependencies": {
140- "@typescript-eslint/scope-manager": "8.31.0",
141- "@typescript-eslint/types": "8.31.0",
142- "@typescript-eslint/typescript-estree": "8.31.0",
143- "@typescript-eslint/visitor-keys": "8.31.0",
144+ "@typescript-eslint/scope-manager": "8.31.1",
145+ "@typescript-eslint/types": "8.31.1",
146+ "@typescript-eslint/typescript-estree": "8.31.1",
147+ "@typescript-eslint/visitor-keys": "8.31.1",
148 "debug": "^4.3.4"
149 },
150 "engines": {
151@@ -3131,15 +3102,15 @@
152 "typescript": ">=4.8.4 <5.9.0"
153 }
154 },
155- "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": {
156- "version": "8.31.0",
157- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.31.0.tgz",
158- "integrity": "sha512-knO8UyF78Nt8O/B64i7TlGXod69ko7z6vJD9uhSlm0qkAbGeRUSudcm0+K/4CrRjrpiHfBCjMWlc08Vav1xwcw==",
159+ "node_modules/@typescript-eslint/scope-manager": {
160+ "version": "8.31.1",
161+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.31.1.tgz",
162+ "integrity": "sha512-BMNLOElPxrtNQMIsFHE+3P0Yf1z0dJqV9zLdDxN/xLlWMlXK/ApEsVEKzpizg9oal8bAT5Sc7+ocal7AC1HCVw==",
163 "dev": true,
164 "license": "MIT",
165 "dependencies": {
166- "@typescript-eslint/types": "8.31.0",
167- "@typescript-eslint/visitor-keys": "8.31.0"
168+ "@typescript-eslint/types": "8.31.1",
169+ "@typescript-eslint/visitor-keys": "8.31.1"
170 },
171 "engines": {
172 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
173@@ -3149,34 +3120,16 @@
174 "url": "https://opencollective.com/typescript-eslint"
175 }
176 },
177- "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": {
178- "version": "8.31.0",
179- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.31.0.tgz",
180- "integrity": "sha512-Ch8oSjVyYyJxPQk8pMiP2FFGYatqXQfQIaMp+TpuuLlDachRWpUAeEu1u9B/v/8LToehUIWyiKcA/w5hUFRKuQ==",
181- "dev": true,
182- "license": "MIT",
183- "engines": {
184- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
185- },
186- "funding": {
187- "type": "opencollective",
188- "url": "https://opencollective.com/typescript-eslint"
189- }
190- },
191- "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": {
192- "version": "8.31.0",
193- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.31.0.tgz",
194- "integrity": "sha512-xLmgn4Yl46xi6aDSZ9KkyfhhtnYI15/CvHbpOy/eR5NWhK/BK8wc709KKwhAR0m4ZKRP7h07bm4BWUYOCuRpQQ==",
195+ "node_modules/@typescript-eslint/type-utils": {
196+ "version": "8.31.1",
197+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.31.1.tgz",
198+ "integrity": "sha512-fNaT/m9n0+dpSp8G/iOQ05GoHYXbxw81x+yvr7TArTuZuCA6VVKbqWYVZrV5dVagpDTtj/O8k5HBEE/p/HM5LA==",
199 "dev": true,
200 "license": "MIT",
201 "dependencies": {
202- "@typescript-eslint/types": "8.31.0",
203- "@typescript-eslint/visitor-keys": "8.31.0",
204+ "@typescript-eslint/typescript-estree": "8.31.1",
205+ "@typescript-eslint/utils": "8.31.1",
206 "debug": "^4.3.4",
207- "fast-glob": "^3.3.2",
208- "is-glob": "^4.0.3",
209- "minimatch": "^9.0.4",
210- "semver": "^7.6.0",
211 "ts-api-utils": "^2.0.1"
212 },
213 "engines": {
214@@ -3187,80 +3140,11 @@
215 "url": "https://opencollective.com/typescript-eslint"
216 },
217 "peerDependencies": {
218+ "eslint": "^8.57.0 || ^9.0.0",
219 "typescript": ">=4.8.4 <5.9.0"
220 }
221 },
222- "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": {
223- "version": "8.31.0",
224- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.31.0.tgz",
225- "integrity": "sha512-QcGHmlRHWOl93o64ZUMNewCdwKGU6WItOU52H0djgNmn1EOrhVudrDzXz4OycCRSCPwFCDrE2iIt5vmuUdHxuQ==",
226- "dev": true,
227- "license": "MIT",
228- "dependencies": {
229- "@typescript-eslint/types": "8.31.0",
230- "eslint-visitor-keys": "^4.2.0"
231- },
232- "engines": {
233- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
234- },
235- "funding": {
236- "type": "opencollective",
237- "url": "https://opencollective.com/typescript-eslint"
238- }
239- },
240- "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": {
241- "version": "2.0.1",
242- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
243- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
244- "dev": true,
245- "license": "MIT",
246- "dependencies": {
247- "balanced-match": "^1.0.0"
248- }
249- },
250- "node_modules/@typescript-eslint/parser/node_modules/eslint-visitor-keys": {
251- "version": "4.2.0",
252- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
253- "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
254- "dev": true,
255- "license": "Apache-2.0",
256- "engines": {
257- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
258- },
259- "funding": {
260- "url": "https://opencollective.com/eslint"
261- }
262- },
263- "node_modules/@typescript-eslint/parser/node_modules/minimatch": {
264- "version": "9.0.5",
265- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
266- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
267- "dev": true,
268- "license": "ISC",
269- "dependencies": {
270- "brace-expansion": "^2.0.1"
271- },
272- "engines": {
273- "node": ">=16 || 14 >=14.17"
274- },
275- "funding": {
276- "url": "https://github.com/sponsors/isaacs"
277- }
278- },
279- "node_modules/@typescript-eslint/parser/node_modules/semver": {
280- "version": "7.7.1",
281- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
282- "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
283- "dev": true,
284- "license": "ISC",
285- "bin": {
286- "semver": "bin/semver.js"
287- },
288- "engines": {
289- "node": ">=10"
290- }
291- },
292- "node_modules/@typescript-eslint/parser/node_modules/ts-api-utils": {
293+ "node_modules/@typescript-eslint/type-utils/node_modules/ts-api-utils": {
294 "version": "2.1.0",
295 "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
296 "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
297@@ -3273,57 +3157,14 @@
298 "typescript": ">=4.8.4"
299 }
300 },
301- "node_modules/@typescript-eslint/scope-manager": {
302- "version": "7.6.0",
303- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz",
304- "integrity": "sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==",
305- "dev": true,
306- "dependencies": {
307- "@typescript-eslint/types": "7.6.0",
308- "@typescript-eslint/visitor-keys": "7.6.0"
309- },
310- "engines": {
311- "node": "^18.18.0 || >=20.0.0"
312- },
313- "funding": {
314- "type": "opencollective",
315- "url": "https://opencollective.com/typescript-eslint"
316- }
317- },
318- "node_modules/@typescript-eslint/type-utils": {
319- "version": "7.6.0",
320- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.6.0.tgz",
321- "integrity": "sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==",
322- "dev": true,
323- "dependencies": {
324- "@typescript-eslint/typescript-estree": "7.6.0",
325- "@typescript-eslint/utils": "7.6.0",
326- "debug": "^4.3.4",
327- "ts-api-utils": "^1.3.0"
328- },
329- "engines": {
330- "node": "^18.18.0 || >=20.0.0"
331- },
332- "funding": {
333- "type": "opencollective",
334- "url": "https://opencollective.com/typescript-eslint"
335- },
336- "peerDependencies": {
337- "eslint": "^8.56.0"
338- },
339- "peerDependenciesMeta": {
340- "typescript": {
341- "optional": true
342- }
343- }
344- },
345 "node_modules/@typescript-eslint/types": {
346- "version": "7.6.0",
347- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.6.0.tgz",
348- "integrity": "sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==",
349+ "version": "8.31.1",
350+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.31.1.tgz",
351+ "integrity": "sha512-SfepaEFUDQYRoA70DD9GtytljBePSj17qPxFHA/h3eg6lPTqGJ5mWOtbXCk1YrVU1cTJRd14nhaXWFu0l2troQ==",
352 "dev": true,
353+ "license": "MIT",
354 "engines": {
355- "node": "^18.18.0 || >=20.0.0"
356+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
357 },
358 "funding": {
359 "type": "opencollective",
360@@ -3331,31 +3172,30 @@
361 }
362 },
363 "node_modules/@typescript-eslint/typescript-estree": {
364- "version": "7.6.0",
365- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz",
366- "integrity": "sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==",
367+ "version": "8.31.1",
368+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.31.1.tgz",
369+ "integrity": "sha512-kaA0ueLe2v7KunYOyWYtlf/QhhZb7+qh4Yw6Ni5kgukMIG+iP773tjgBiLWIXYumWCwEq3nLW+TUywEp8uEeag==",
370 "dev": true,
371+ "license": "MIT",
372 "dependencies": {
373- "@typescript-eslint/types": "7.6.0",
374- "@typescript-eslint/visitor-keys": "7.6.0",
375+ "@typescript-eslint/types": "8.31.1",
376+ "@typescript-eslint/visitor-keys": "8.31.1",
377 "debug": "^4.3.4",
378- "globby": "^11.1.0",
379+ "fast-glob": "^3.3.2",
380 "is-glob": "^4.0.3",
381 "minimatch": "^9.0.4",
382 "semver": "^7.6.0",
383- "ts-api-utils": "^1.3.0"
384+ "ts-api-utils": "^2.0.1"
385 },
386 "engines": {
387- "node": "^18.18.0 || >=20.0.0"
388+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
389 },
390 "funding": {
391 "type": "opencollective",
392 "url": "https://opencollective.com/typescript-eslint"
393 },
394- "peerDependenciesMeta": {
395- "typescript": {
396- "optional": true
397- }
398+ "peerDependencies": {
399+ "typescript": ">=4.8.4 <5.9.0"
400 }
401 },
402 "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
403@@ -3363,27 +3203,17 @@
404 "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
405 "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
406 "dev": true,
407+ "license": "MIT",
408 "dependencies": {
409 "balanced-match": "^1.0.0"
410 }
411 },
412- "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": {
413- "version": "6.0.0",
414- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
415- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
416- "dev": true,
417- "dependencies": {
418- "yallist": "^4.0.0"
419- },
420- "engines": {
421- "node": ">=10"
422- }
423- },
424 "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
425- "version": "9.0.4",
426- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
427- "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
428+ "version": "9.0.5",
429+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
430+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
431 "dev": true,
432+ "license": "ISC",
433 "dependencies": {
434 "brace-expansion": "^2.0.1"
435 },
436@@ -3395,13 +3225,11 @@
437 }
438 },
439 "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
440- "version": "7.6.0",
441- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
442- "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
443+ "version": "7.7.1",
444+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
445+ "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
446 "dev": true,
447- "dependencies": {
448- "lru-cache": "^6.0.0"
449- },
450+ "license": "ISC",
451 "bin": {
452 "semver": "bin/semver.js"
453 },
454@@ -3409,85 +3237,72 @@
455 "node": ">=10"
456 }
457 },
458- "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": {
459- "version": "4.0.0",
460- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
461- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
462- "dev": true
463+ "node_modules/@typescript-eslint/typescript-estree/node_modules/ts-api-utils": {
464+ "version": "2.1.0",
465+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
466+ "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
467+ "dev": true,
468+ "license": "MIT",
469+ "engines": {
470+ "node": ">=18.12"
471+ },
472+ "peerDependencies": {
473+ "typescript": ">=4.8.4"
474+ }
475 },
476 "node_modules/@typescript-eslint/utils": {
477- "version": "7.6.0",
478- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.6.0.tgz",
479- "integrity": "sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==",
480+ "version": "8.31.1",
481+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.31.1.tgz",
482+ "integrity": "sha512-2DSI4SNfF5T4oRveQ4nUrSjUqjMND0nLq9rEkz0gfGr3tg0S5KB6DhwR+WZPCjzkZl3cH+4x2ce3EsL50FubjQ==",
483 "dev": true,
484+ "license": "MIT",
485 "dependencies": {
486 "@eslint-community/eslint-utils": "^4.4.0",
487- "@types/json-schema": "^7.0.15",
488- "@types/semver": "^7.5.8",
489- "@typescript-eslint/scope-manager": "7.6.0",
490- "@typescript-eslint/types": "7.6.0",
491- "@typescript-eslint/typescript-estree": "7.6.0",
492- "semver": "^7.6.0"
493+ "@typescript-eslint/scope-manager": "8.31.1",
494+ "@typescript-eslint/types": "8.31.1",
495+ "@typescript-eslint/typescript-estree": "8.31.1"
496 },
497 "engines": {
498- "node": "^18.18.0 || >=20.0.0"
499+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
500 },
501 "funding": {
502 "type": "opencollective",
503 "url": "https://opencollective.com/typescript-eslint"
504 },
505 "peerDependencies": {
506- "eslint": "^8.56.0"
507+ "eslint": "^8.57.0 || ^9.0.0",
508+ "typescript": ">=4.8.4 <5.9.0"
509 }
510 },
511- "node_modules/@typescript-eslint/utils/node_modules/lru-cache": {
512- "version": "6.0.0",
513- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
514- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
515+ "node_modules/@typescript-eslint/visitor-keys": {
516+ "version": "8.31.1",
517+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.31.1.tgz",
518+ "integrity": "sha512-I+/rgqOVBn6f0o7NDTmAPWWC6NuqhV174lfYvAm9fUaWeiefLdux9/YI3/nLugEn9L8fcSi0XmpKi/r5u0nmpw==",
519 "dev": true,
520+ "license": "MIT",
521 "dependencies": {
522- "yallist": "^4.0.0"
523+ "@typescript-eslint/types": "8.31.1",
524+ "eslint-visitor-keys": "^4.2.0"
525 },
526 "engines": {
527- "node": ">=10"
528- }
529- },
530- "node_modules/@typescript-eslint/utils/node_modules/semver": {
531- "version": "7.6.0",
532- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
533- "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
534- "dev": true,
535- "dependencies": {
536- "lru-cache": "^6.0.0"
537- },
538- "bin": {
539- "semver": "bin/semver.js"
540+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
541 },
542- "engines": {
543- "node": ">=10"
544+ "funding": {
545+ "type": "opencollective",
546+ "url": "https://opencollective.com/typescript-eslint"
547 }
548 },
549- "node_modules/@typescript-eslint/utils/node_modules/yallist": {
550- "version": "4.0.0",
551- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
552- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
553- "dev": true
554- },
555- "node_modules/@typescript-eslint/visitor-keys": {
556- "version": "7.6.0",
557- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz",
558- "integrity": "sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==",
559+ "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
560+ "version": "4.2.0",
561+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
562+ "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
563 "dev": true,
564- "dependencies": {
565- "@typescript-eslint/types": "7.6.0",
566- "eslint-visitor-keys": "^3.4.3"
567- },
568+ "license": "Apache-2.0",
569 "engines": {
570- "node": "^18.18.0 || >=20.0.0"
571+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
572 },
573 "funding": {
574- "type": "opencollective",
575- "url": "https://opencollective.com/typescript-eslint"
576+ "url": "https://opencollective.com/eslint"
577 }
578 },
579 "node_modules/@ungap/structured-clone": {
580@@ -3591,6 +3406,40 @@
581 }
582 }
583 },
584+ "node_modules/@vue/eslint-config-typescript/node_modules/@typescript-eslint/eslint-plugin": {
585+ "version": "7.18.0",
586+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz",
587+ "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==",
588+ "dev": true,
589+ "license": "MIT",
590+ "dependencies": {
591+ "@eslint-community/regexpp": "^4.10.0",
592+ "@typescript-eslint/scope-manager": "7.18.0",
593+ "@typescript-eslint/type-utils": "7.18.0",
594+ "@typescript-eslint/utils": "7.18.0",
595+ "@typescript-eslint/visitor-keys": "7.18.0",
596+ "graphemer": "^1.4.0",
597+ "ignore": "^5.3.1",
598+ "natural-compare": "^1.4.0",
599+ "ts-api-utils": "^1.3.0"
600+ },
601+ "engines": {
602+ "node": "^18.18.0 || >=20.0.0"
603+ },
604+ "funding": {
605+ "type": "opencollective",
606+ "url": "https://opencollective.com/typescript-eslint"
607+ },
608+ "peerDependencies": {
609+ "@typescript-eslint/parser": "^7.0.0",
610+ "eslint": "^8.56.0"
611+ },
612+ "peerDependenciesMeta": {
613+ "typescript": {
614+ "optional": true
615+ }
616+ }
617+ },
618 "node_modules/@vue/eslint-config-typescript/node_modules/@typescript-eslint/parser": {
619 "version": "7.18.0",
620 "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz",
621@@ -3638,6 +3487,34 @@
622 "url": "https://opencollective.com/typescript-eslint"
623 }
624 },
625+ "node_modules/@vue/eslint-config-typescript/node_modules/@typescript-eslint/type-utils": {
626+ "version": "7.18.0",
627+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz",
628+ "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==",
629+ "dev": true,
630+ "license": "MIT",
631+ "dependencies": {
632+ "@typescript-eslint/typescript-estree": "7.18.0",
633+ "@typescript-eslint/utils": "7.18.0",
634+ "debug": "^4.3.4",
635+ "ts-api-utils": "^1.3.0"
636+ },
637+ "engines": {
638+ "node": "^18.18.0 || >=20.0.0"
639+ },
640+ "funding": {
641+ "type": "opencollective",
642+ "url": "https://opencollective.com/typescript-eslint"
643+ },
644+ "peerDependencies": {
645+ "eslint": "^8.56.0"
646+ },
647+ "peerDependenciesMeta": {
648+ "typescript": {
649+ "optional": true
650+ }
651+ }
652+ },
653 "node_modules/@vue/eslint-config-typescript/node_modules/@typescript-eslint/types": {
654 "version": "7.18.0",
655 "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz",
656@@ -3681,6 +3558,29 @@
657 }
658 }
659 },
660+ "node_modules/@vue/eslint-config-typescript/node_modules/@typescript-eslint/utils": {
661+ "version": "7.18.0",
662+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz",
663+ "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==",
664+ "dev": true,
665+ "license": "MIT",
666+ "dependencies": {
667+ "@eslint-community/eslint-utils": "^4.4.0",
668+ "@typescript-eslint/scope-manager": "7.18.0",
669+ "@typescript-eslint/types": "7.18.0",
670+ "@typescript-eslint/typescript-estree": "7.18.0"
671+ },
672+ "engines": {
673+ "node": "^18.18.0 || >=20.0.0"
674+ },
675+ "funding": {
676+ "type": "opencollective",
677+ "url": "https://opencollective.com/typescript-eslint"
678+ },
679+ "peerDependencies": {
680+ "eslint": "^8.56.0"
681+ }
682+ },
683 "node_modules/@vue/eslint-config-typescript/node_modules/@typescript-eslint/visitor-keys": {
684 "version": "7.18.0",
685 "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz",
686diff --git a/Rnwood.Smtp4dev/ClientApp/package.json b/Rnwood.Smtp4dev/ClientApp/package.json
687index a9e301a..619e55b 100644
688--- a/Rnwood.Smtp4dev/ClientApp/package.json
689+++ b/Rnwood.Smtp4dev/ClientApp/package.json
690@@ -19,7 +19,8 @@
691 "@microsoft/signalr": "^8.0.0",
692 "@types/jest": "^29.5.12",
693 "@types/sanitize-html": "^2.11.0",
694- "@typescript-eslint/parser": "^8.0.0",
695+ "@typescript-eslint/eslint-plugin": "^8.31.1",
696+ "@typescript-eslint/parser": "^8.31.1",
697 "@vitejs/plugin-vue": "^5.0.4",
698 "@vue/eslint-config-typescript": "^13.0.0",
699 "@vue/vue3-jest": "^29.2.6",