@cryptotaxi247 / CoPilot / commits / 031ea376

Epss (#261)

* add epss api logic * update: dependencies * improve: PinnedPages component responsiveness * add: EpssScore api/types * update: app theme store * add: VulnerabilityEpss component * precommit fixes --------- Co-authored-by: Davide Di Modica <webmaster.ddm@gmail.com>

taylor_socfortress committed Jun 28, 2024 at 08:44 UTC 031ea3767822885b3bd3e1e1dd440f1ba0a4c3c7
21 files changed +1219 -402
backend/app/routers/threat_intel.py
+7
@@ -1,5 +1,6 @@
1 from fastapi import APIRouter
2
3 +from app.threat_intel.routes.epss import threat_intel_epss_router
4 from app.threat_intel.routes.socfortress import threat_intel_socfortress_router
5
6 # Instantiate the APIRouter
@@ -11,3 +12,9 @@ router.include_router(
12 prefix="/threat_intel",
13 tags=["Threat Intel"],
14 )
15 +
16 +router.include_router(
17 + threat_intel_epss_router,
18 + prefix="/threat_intel",
19 + tags=["Threat Intel"],
20 +)
backend/app/threat_intel/routes/epss.py new
+38
@@ -0,0 +1,38 @@
1 +from fastapi import APIRouter
2 +from fastapi import Security
3 +from loguru import logger
4 +
5 +from app.auth.utils import AuthHandler
6 +from app.threat_intel.schema.epss import EpssThreatIntelRequest
7 +from app.threat_intel.schema.epss import EpssThreatIntelResponse
8 +from app.threat_intel.services.epss import collect_epss_score
9 +
10 +# App specific imports
11 +
12 +threat_intel_epss_router = APIRouter()
13 +
14 +
15 +@threat_intel_epss_router.post(
16 + "/epss",
17 + response_model=EpssThreatIntelResponse,
18 + description="Threat Intel EPSS Score",
19 + dependencies=[Security(AuthHandler().require_any_scope("admin", "analyst"))],
20 +)
21 +async def threat_intel_epss(
22 + request: EpssThreatIntelRequest,
23 +):
24 + """
25 + Endpoint for SocFortress Threat Intel.
26 +
27 + This endpoint allows authorized users with 'admin' or 'analyst' scope to perform SocFortress threat intelligence lookup.
28 +
29 + Parameters:
30 + - request: SocfortressThreatIntelRequest - The request payload containing the necessary information for the lookup.
31 + - session: AsyncSession (optional) - The database session to use for the lookup.
32 + - _key_exists: bool (optional) - A dependency to ensure the API key exists.
33 +
34 + Returns:
35 + - IoCResponse: The response model containing the results of the SocFortress threat intelligence lookup.
36 + """
37 + logger.info(f"Received request for EPSS score: {request}")
38 + return await collect_epss_score(request)
backend/app/threat_intel/schema/epss.py new
+44
@@ -0,0 +1,44 @@
1 +from typing import List
2 +from typing import Optional
3 +
4 +from pydantic import BaseModel
5 +from pydantic import Field
6 +
7 +
8 +class EpssThreatIntelRequest(BaseModel):
9 + cve: str = Field(
10 + ...,
11 + description="The CVE to evaluate.",
12 + )
13 +
14 +
15 +class EpssData(BaseModel):
16 + cve: str
17 + epss: str
18 + percentile: str
19 + date: str
20 +
21 +
22 +class EpssApiResponse(BaseModel):
23 + status: str
24 + status_code: int
25 + version: str
26 + access_control_allow_headers: Optional[str]
27 + access: str
28 + total: int
29 + offset: int
30 + limit: int
31 + data: List[EpssData]
32 +
33 + def to_dict(self):
34 + return self.dict()
35 +
36 +
37 +class EpssThreatIntelResponse(BaseModel):
38 + data: Optional[List[EpssData]] = Field(None, description="The data for the IoC")
39 + success: bool = Field(..., description="Indicates if it was successful")
40 + message: str = Field(None, description="Message about the IoC")
41 + the_epss_model: str = Field(
42 + "https://www.first.org/epss/model",
43 + description="The EPSS model description",
44 + )
backend/app/threat_intel/services/epss.py new
+62
@@ -0,0 +1,62 @@
1 +import httpx
2 +from fastapi import HTTPException
3 +from loguru import logger
4 +
5 +from app.threat_intel.schema.epss import EpssData
6 +from app.threat_intel.schema.epss import EpssThreatIntelRequest
7 +from app.threat_intel.schema.epss import EpssThreatIntelResponse
8 +
9 +
10 +async def invoke_epss_api(
11 + url: str,
12 + request: EpssThreatIntelRequest,
13 +) -> dict:
14 + """
15 + Invokes the Socfortress Process Analysis API with the provided API key, URL, and request parameters.
16 +
17 + Args:
18 + api_key (str): The API key for authentication.
19 + url (str): The URL of the Socfortress Intel URL
20 + request (SocfortressProcessNameAnalysisRequest): The request object containing the Process Name
21 +
22 + Returns:
23 + dict: The JSON response from the Process Name Analysis API.
24 +
25 + Raises:
26 + httpx.HTTPStatusError: If the API request fails with a non-successful status code.
27 + """
28 + headers = {"content-type": "application/json"}
29 + params = {"cve": f"{request.cve}"}
30 + logger.info(f"Invoking EPSS with params: {params} and headers: {headers} and url: {url}")
31 + async with httpx.AsyncClient() as client:
32 + response = await client.get(url, headers=headers, params=params)
33 + return response.json()
34 +
35 +
36 +async def collect_epss_score(
37 + request: EpssThreatIntelRequest,
38 +) -> EpssThreatIntelResponse:
39 + """
40 + Retrieves IoC response from Socfortress Threat Intel API.
41 +
42 + Args:
43 + request (SocfortressProcessNameAnalysisRequest): The request object containing the IoC data.
44 + session (AsyncSession): The async session object for making HTTP requests.
45 +
46 + Returns:
47 + SocfortressProcessNameAnalysisResponse: The response object containing the IoC data and success status.
48 + """
49 + url = "https://api.first.org/data/v1/epss"
50 + response_data = await invoke_epss_api(url, request)
51 +
52 + # If status-code is not 200, raise an HTTPException
53 + if response_data.get("status-code") != 200:
54 + raise HTTPException(
55 + status_code=500,
56 + detail="Failed to retrieve EPSS score",
57 + )
58 +
59 + # Using .get() with default values
60 + data = [EpssData(**item) for item in response_data.get("data", [])]
61 +
62 + return EpssThreatIntelResponse(data=data, success=True, message="EPSS score retrieved successfully")
backend/app/threat_intel/services/socfortress.py
-1
@@ -227,7 +227,6 @@ async def get_process_analysis_response(
227
228 # Using .get() with default values
229 data = response_data.get("data", {})
230 - logger.info(f"Data {data}")
230 success = response_data.get("success", False)
231 message = response_data.get("message", "No message provided")
232
frontend/package-lock.json
+782 -266
@@ -14,19 +14,19 @@
14 "@fontsource/lexend": "^5.0.20",
15 "@fontsource/public-sans": "^5.0.18",
16 "@popperjs/core": "^2.11.8",
17 - "@shikijs/markdown-it": "^1.9.0",
17 + "@shikijs/markdown-it": "^1.9.1",
18 "@vueuse/components": "^10.11.0",
19 "@vueuse/core": "^10.11.0",
20 - "apexcharts": "^3.49.1",
20 + "apexcharts": "^3.49.2",
21 "bytes": "^3.1.2",
22 "colord": "^2.9.3",
23 "crypto-js": "^4.2.0",
24 "dayjs": "^1.11.11",
25 "detect-touch-device": "^1.1.6",
26 - "echarts": "^5.5.0",
26 + "echarts": "^5.5.1",
27 "file-saver": "^2.0.5",
28 "html-entities": "^2.5.2",
29 - "jose": "^5.4.1",
29 + "jose": "^5.6.2",
30 "js-md5": "^0.8.3",
31 "lodash": "^4.17.21",
32 "mitt": "^3.0.1",
@@ -35,9 +35,9 @@
35 "pinia": "^2.1.7",
36 "pinia-plugin-persistedstate": "^3.2.1",
37 "secure-ls": "^2.0.0",
38 - "shiki": "^1.9.0",
38 + "shiki": "^1.9.1",
39 "validator": "^13.12.0",
40 - "vue": "^3.4.30",
40 + "vue": "^3.4.31",
41 "vue-advanced-cropper": "^2.8.9",
42 "vue-highlight-words": "^3.0.1",
43 "vue-i18n": "^9.13.1",
@@ -56,8 +56,8 @@
56 "@types/fs-extra": "^11.0.4",
57 "@types/inquirer": "^9.0.7",
58 "@types/jsdom": "^21.1.7",
59 - "@types/lodash": "^4.17.5",
60 - "@types/node": "^20.14.8",
59 + "@types/lodash": "^4.17.6",
60 + "@types/node": "^20.14.9",
61 "@types/validator": "^13.12.0",
62 "@vitejs/plugin-vue": "^5.0.5",
63 "@vitejs/plugin-vue-jsx": "^4.0.0",
@@ -83,10 +83,10 @@
83 "start-server-and-test": "^2.0.4",
84 "tailwind-config-viewer": "^2.0.4",
85 "tailwindcss": "^3.4.4",
86 - "taze": "^0.13.8",
86 + "taze": "^0.13.9",
87 "type-fest": "^4.20.1",
88 - "unplugin-vue-components": "^0.27.0",
89 - "vite": "^5.3.1",
88 + "unplugin-vue-components": "^0.27.2",
89 + "vite": "^5.3.2",
90 "vite-bundle-analyzer": "^0.10.3",
91 "vite-bundle-visualizer": "^1.2.1",
92 "vite-plugin-vue-devtools": "^7.3.4",
@@ -150,9 +150,9 @@
150 }
151 },
152 "node_modules/@antfu/utils": {
153 - "version": "0.7.8",
154 - "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.8.tgz",
155 - "integrity": "sha512-rWQkqXRESdjXtc+7NRfK9lASQjpXJu1ayp7qi1d23zZorY+wBHVLHHoVcMsEnkqEBWTFqbztO7/QdJFzyEcLTg==",
153 + "version": "0.7.10",
154 + "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.10.tgz",
155 + "integrity": "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==",
156 "funding": {
157 "url": "https://github.com/sponsors/antfu"
158 }
@@ -729,6 +729,7 @@
729 },
730 "node_modules/@clack/prompts/node_modules/is-unicode-supported": {
731 "version": "1.3.0",
732 + "dev": true,
733 "inBundle": true,
734 "license": "MIT",
735 "engines": {
@@ -1200,9 +1201,9 @@
1201 }
1202 },
1203 "node_modules/@eslint-community/regexpp": {
1203 - "version": "4.10.1",
1204 - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz",
1205 - "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==",
1204 + "version": "4.11.0",
1205 + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz",
1206 + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==",
1207 "engines": {
1208 "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
1209 }
@@ -2045,26 +2046,26 @@
2046 ]
2047 },
2048 "node_modules/@shikijs/core": {
2048 - "version": "1.9.0",
2049 - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.9.0.tgz",
2050 - "integrity": "sha512-cbSoY8P/jgGByG8UOl3jnP/CWg/Qk+1q+eAKWtcrU3pNoILF8wTsLB0jT44qUBV8Ce1SvA9uqcM9Xf+u3fJFBw=="
2049 + "version": "1.9.1",
2050 + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.9.1.tgz",
2051 + "integrity": "sha512-EmUful2MQtY8KgCF1OkBtOuMcvaZEvmdubhW0UHCGXi21O9dRLeADVCj+k6ZS+de7Mz9d2qixOXJ+GLhcK3pXg=="
2052 },
2053 "node_modules/@shikijs/markdown-it": {
2053 - "version": "1.9.0",
2054 - "resolved": "https://registry.npmjs.org/@shikijs/markdown-it/-/markdown-it-1.9.0.tgz",
2055 - "integrity": "sha512-y1DUEL0wf0UZ30dW1NBx4L9uQs2RN4x5gEZpM7t2/LmMGbJ7d2Hr8mzBlSU9+RWxqSirWX7e6av0tJLhcmd/Hw==",
2054 + "version": "1.9.1",
2055 + "resolved": "https://registry.npmjs.org/@shikijs/markdown-it/-/markdown-it-1.9.1.tgz",
2056 + "integrity": "sha512-0f5Lfwx+e6t6lQPZAX2BZxlhzN6aBhB83FfgmC2yegx4Id7YGCsi3/aaipDZT2nityqiNEY+Mmdg2Fr4++EJWg==",
2057 "dependencies": {
2057 - "@shikijs/transformers": "1.9.0",
2058 + "@shikijs/transformers": "1.9.1",
2059 "markdown-it": "^14.1.0",
2059 - "shiki": "1.9.0"
2060 + "shiki": "1.9.1"
2061 }
2062 },
2063 "node_modules/@shikijs/transformers": {
2063 - "version": "1.9.0",
2064 - "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.9.0.tgz",
2065 - "integrity": "sha512-wo8dNbZtFtVhKtw8BnXIT/FDTGMwEdWcQSIRa78ou14JGkMYxSCBN942W5+IRUifP5BwVUWgkXBYX/M3FUFkeg==",
2064 + "version": "1.9.1",
2065 + "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.9.1.tgz",
2066 + "integrity": "sha512-wPrGTpBURQ95IKPIhPQE3bGsANpPPtea1+aVHZp0aYtgxfL5UM3QbJ5rNdCuhcyjz/JNp5ZvSItOr+ayJxebJQ==",
2067 "dependencies": {
2067 - "shiki": "1.9.0"
2068 + "shiki": "1.9.1"
2069 }
2070 },
2071 "node_modules/@sideway/address": {
@@ -2178,9 +2179,9 @@
2179 "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ=="
2180 },
2181 "node_modules/@types/lodash": {
2181 - "version": "4.17.5",
2182 - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.5.tgz",
2183 - "integrity": "sha512-MBIOHVZqVqgfro1euRDWX7OO0fBVUUMrN6Pwm8LQsz8cWhEpihlvR70ENj3f40j58TNxZaWv2ndSkInykNBBJw=="
2182 + "version": "4.17.6",
2183 + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.6.tgz",
2184 + "integrity": "sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA=="
2185 },
2186 "node_modules/@types/lodash-es": {
2187 "version": "4.17.12",
@@ -2191,9 +2192,9 @@
2192 }
2193 },
2194 "node_modules/@types/node": {
2194 - "version": "20.14.8",
2195 - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.8.tgz",
2196 - "integrity": "sha512-DO+2/jZinXfROG7j7WKFn/3C6nFwxy2lLpgLjEXJz+0XKphZlTLJ14mo8Vfg8X5BWN6XjyESXq+LcYdT7tR3bA==",
2195 + "version": "20.14.9",
2196 + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz",
2197 + "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==",
2198 "dev": true,
2199 "dependencies": {
2200 "undici-types": "~5.26.4"
@@ -2253,16 +2254,16 @@
2254 }
2255 },
2256 "node_modules/@typescript-eslint/eslint-plugin": {
2256 - "version": "7.13.0",
2257 - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.0.tgz",
2258 - "integrity": "sha512-FX1X6AF0w8MdVFLSdqwqN/me2hyhuQg4ykN6ZpVhh1ij/80pTvDKclX1sZB9iqex8SjQfVhwMKs3JtnnMLzG9w==",
2257 + "version": "7.14.1",
2258 + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.14.1.tgz",
2259 + "integrity": "sha512-aAJd6bIf2vvQRjUG3ZkNXkmBpN+J7Wd0mfQiiVCJMu9Z5GcZZdcc0j8XwN/BM97Fl7e3SkTXODSk4VehUv7CGw==",
2260 "dev": true,
2261 "dependencies": {
2262 "@eslint-community/regexpp": "^4.10.0",
2262 - "@typescript-eslint/scope-manager": "7.13.0",
2263 - "@typescript-eslint/type-utils": "7.13.0",
2264 - "@typescript-eslint/utils": "7.13.0",
2265 - "@typescript-eslint/visitor-keys": "7.13.0",
2263 + "@typescript-eslint/scope-manager": "7.14.1",
2264 + "@typescript-eslint/type-utils": "7.14.1",
2265 + "@typescript-eslint/utils": "7.14.1",
2266 + "@typescript-eslint/visitor-keys": "7.14.1",
2267 "graphemer": "^1.4.0",
2268 "ignore": "^5.3.1",
2269 "natural-compare": "^1.4.0",
@@ -2286,13 +2287,13 @@
2287 }
2288 },
2289 "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": {
2289 - "version": "7.13.0",
2290 - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.0.tgz",
2291 - "integrity": "sha512-ZrMCe1R6a01T94ilV13egvcnvVJ1pxShkE0+NDjDzH4nvG1wXpwsVI5bZCvE7AEDH1mXEx5tJSVR68bLgG7Dng==",
2290 + "version": "7.14.1",
2291 + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.14.1.tgz",
2292 + "integrity": "sha512-gPrFSsoYcsffYXTOZ+hT7fyJr95rdVe4kGVX1ps/dJ+DfmlnjFN/GcMxXcVkeHDKqsq6uAcVaQaIi3cFffmAbA==",
2293 "dev": true,
2294 "dependencies": {
2294 - "@typescript-eslint/types": "7.13.0",
2295 - "@typescript-eslint/visitor-keys": "7.13.0"
2295 + "@typescript-eslint/types": "7.14.1",
2296 + "@typescript-eslint/visitor-keys": "7.14.1"
2297 },
2298 "engines": {
2299 "node": "^18.18.0 || >=20.0.0"
@@ -2303,9 +2304,9 @@
2304 }
2305 },
2306 "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": {
2306 - "version": "7.13.0",
2307 - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.0.tgz",
2308 - "integrity": "sha512-QWuwm9wcGMAuTsxP+qz6LBBd3Uq8I5Nv8xb0mk54jmNoCyDspnMvVsOxI6IsMmway5d1S9Su2+sCKv1st2l6eA==",
2307 + "version": "7.14.1",
2308 + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.14.1.tgz",
2309 + "integrity": "sha512-mL7zNEOQybo5R3AavY+Am7KLv8BorIv7HCYS5rKoNZKQD9tsfGUpO4KdAn3sSUvTiS4PQkr2+K0KJbxj8H9NDg==",
2310 "dev": true,
2311 "engines": {
2312 "node": "^18.18.0 || >=20.0.0"
@@ -2316,13 +2317,13 @@
2317 }
2318 },
2319 "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": {
2319 - "version": "7.13.0",
2320 - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.0.tgz",
2321 - "integrity": "sha512-cAvBvUoobaoIcoqox1YatXOnSl3gx92rCZoMRPzMNisDiM12siGilSM4+dJAekuuHTibI2hVC2fYK79iSFvWjw==",
2320 + "version": "7.14.1",
2321 + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.14.1.tgz",
2322 + "integrity": "sha512-k5d0VuxViE2ulIO6FbxxSZaxqDVUyMbXcidC8rHvii0I56XZPv8cq+EhMns+d/EVIL41sMXqRbK3D10Oza1bbA==",
2323 "dev": true,
2324 "dependencies": {
2324 - "@typescript-eslint/types": "7.13.0",
2325 - "@typescript-eslint/visitor-keys": "7.13.0",
2325 + "@typescript-eslint/types": "7.14.1",
2326 + "@typescript-eslint/visitor-keys": "7.14.1",
2327 "debug": "^4.3.4",
2328 "globby": "^11.1.0",
2329 "is-glob": "^4.0.3",
@@ -2344,15 +2345,15 @@
2345 }
2346 },
2347 "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": {
2347 - "version": "7.13.0",
2348 - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.0.tgz",
2349 - "integrity": "sha512-jceD8RgdKORVnB4Y6BqasfIkFhl4pajB1wVxrF4akxD2QPM8GNYjgGwEzYS+437ewlqqrg7Dw+6dhdpjMpeBFQ==",
2348 + "version": "7.14.1",
2349 + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.14.1.tgz",
2350 + "integrity": "sha512-CMmVVELns3nak3cpJhZosDkm63n+DwBlDX8g0k4QUa9BMnF+lH2lr3d130M1Zt1xxmB3LLk3NV7KQCq86ZBBhQ==",
2351 "dev": true,
2352 "dependencies": {
2353 "@eslint-community/eslint-utils": "^4.4.0",
2353 - "@typescript-eslint/scope-manager": "7.13.0",
2354 - "@typescript-eslint/types": "7.13.0",
2355 - "@typescript-eslint/typescript-estree": "7.13.0"
2354 + "@typescript-eslint/scope-manager": "7.14.1",
2355 + "@typescript-eslint/types": "7.14.1",
2356 + "@typescript-eslint/typescript-estree": "7.14.1"
2357 },
2358 "engines": {
2359 "node": "^18.18.0 || >=20.0.0"
@@ -2366,12 +2367,12 @@
2367 }
2368 },
2369 "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": {
2369 - "version": "7.13.0",
2370 - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.0.tgz",
2371 - "integrity": "sha512-nxn+dozQx+MK61nn/JP+M4eCkHDSxSLDpgE3WcQo0+fkjEolnaB5jswvIKC4K56By8MMgIho7f1PVxERHEo8rw==",
2370 + "version": "7.14.1",
2371 + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.14.1.tgz",
2372 + "integrity": "sha512-Crb+F75U1JAEtBeQGxSKwI60hZmmzaqA3z9sYsVm8X7W5cwLEm5bRe0/uXS6+MR/y8CVpKSR/ontIAIEPFcEkA==",
2373 "dev": true,
2374 "dependencies": {
2374 - "@typescript-eslint/types": "7.13.0",
2375 + "@typescript-eslint/types": "7.14.1",
2376 "eslint-visitor-keys": "^3.4.3"
2377 },
2378 "engines": {
@@ -2383,9 +2384,9 @@
2384 }
2385 },
2386 "node_modules/@typescript-eslint/eslint-plugin/node_modules/minimatch": {
2386 - "version": "9.0.4",
2387 - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
2388 - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
2387 + "version": "9.0.5",
2388 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
2389 + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
2390 "dev": true,
2391 "dependencies": {
2392 "brace-expansion": "^2.0.1"
@@ -2398,15 +2399,15 @@
2399 }
2400 },
2401 "node_modules/@typescript-eslint/parser": {
2401 - "version": "7.13.0",
2402 - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.13.0.tgz",
2403 - "integrity": "sha512-EjMfl69KOS9awXXe83iRN7oIEXy9yYdqWfqdrFAYAAr6syP8eLEFI7ZE4939antx2mNgPRW/o1ybm2SFYkbTVA==",
2402 + "version": "7.14.1",
2403 + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.14.1.tgz",
2404 + "integrity": "sha512-8lKUOebNLcR0D7RvlcloOacTOWzOqemWEWkKSVpMZVF/XVcwjPR+3MD08QzbW9TCGJ+DwIc6zUSGZ9vd8cO1IA==",
2405 "dev": true,
2406 "dependencies": {
2406 - "@typescript-eslint/scope-manager": "7.13.0",
2407 - "@typescript-eslint/types": "7.13.0",
2408 - "@typescript-eslint/typescript-estree": "7.13.0",
2409 - "@typescript-eslint/visitor-keys": "7.13.0",
2407 + "@typescript-eslint/scope-manager": "7.14.1",
2408 + "@typescript-eslint/types": "7.14.1",
2409 + "@typescript-eslint/typescript-estree": "7.14.1",
2410 + "@typescript-eslint/visitor-keys": "7.14.1",
2411 "debug": "^4.3.4"
2412 },
2413 "engines": {
@@ -2426,13 +2427,13 @@
2427 }
2428 },
2429 "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": {
2429 - "version": "7.13.0",
2430 - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.0.tgz",
2431 - "integrity": "sha512-ZrMCe1R6a01T94ilV13egvcnvVJ1pxShkE0+NDjDzH4nvG1wXpwsVI5bZCvE7AEDH1mXEx5tJSVR68bLgG7Dng==",
2430 + "version": "7.14.1",
2431 + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.14.1.tgz",
2432 + "integrity": "sha512-gPrFSsoYcsffYXTOZ+hT7fyJr95rdVe4kGVX1ps/dJ+DfmlnjFN/GcMxXcVkeHDKqsq6uAcVaQaIi3cFffmAbA==",
2433 "dev": true,
2434 "dependencies": {
2434 - "@typescript-eslint/types": "7.13.0",
2435 - "@typescript-eslint/visitor-keys": "7.13.0"
2435 + "@typescript-eslint/types": "7.14.1",
2436 + "@typescript-eslint/visitor-keys": "7.14.1"
2437 },
2438 "engines": {
2439 "node": "^18.18.0 || >=20.0.0"
@@ -2443,9 +2444,9 @@
2444 }
2445 },
2446 "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": {
2446 - "version": "7.13.0",
2447 - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.0.tgz",
2448 - "integrity": "sha512-QWuwm9wcGMAuTsxP+qz6LBBd3Uq8I5Nv8xb0mk54jmNoCyDspnMvVsOxI6IsMmway5d1S9Su2+sCKv1st2l6eA==",
2447 + "version": "7.14.1",
2448 + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.14.1.tgz",
2449 + "integrity": "sha512-mL7zNEOQybo5R3AavY+Am7KLv8BorIv7HCYS5rKoNZKQD9tsfGUpO4KdAn3sSUvTiS4PQkr2+K0KJbxj8H9NDg==",
2450 "dev": true,
2451 "engines": {
2452 "node": "^18.18.0 || >=20.0.0"
@@ -2456,13 +2457,13 @@
2457 }
2458 },
2459 "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": {
2459 - "version": "7.13.0",
2460 - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.0.tgz",
2461 - "integrity": "sha512-cAvBvUoobaoIcoqox1YatXOnSl3gx92rCZoMRPzMNisDiM12siGilSM4+dJAekuuHTibI2hVC2fYK79iSFvWjw==",
2460 + "version": "7.14.1",
2461 + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.14.1.tgz",
2462 + "integrity": "sha512-k5d0VuxViE2ulIO6FbxxSZaxqDVUyMbXcidC8rHvii0I56XZPv8cq+EhMns+d/EVIL41sMXqRbK3D10Oza1bbA==",
2463 "dev": true,
2464 "dependencies": {
2464 - "@typescript-eslint/types": "7.13.0",
2465 - "@typescript-eslint/visitor-keys": "7.13.0",
2465 + "@typescript-eslint/types": "7.14.1",
2466 + "@typescript-eslint/visitor-keys": "7.14.1",
2467 "debug": "^4.3.4",
2468 "globby": "^11.1.0",
2469 "is-glob": "^4.0.3",
@@ -2484,12 +2485,12 @@
2485 }
2486 },
2487 "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": {
2487 - "version": "7.13.0",
2488 - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.0.tgz",
2489 - "integrity": "sha512-nxn+dozQx+MK61nn/JP+M4eCkHDSxSLDpgE3WcQo0+fkjEolnaB5jswvIKC4K56By8MMgIho7f1PVxERHEo8rw==",
2488 + "version": "7.14.1",
2489 + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.14.1.tgz",
2490 + "integrity": "sha512-Crb+F75U1JAEtBeQGxSKwI60hZmmzaqA3z9sYsVm8X7W5cwLEm5bRe0/uXS6+MR/y8CVpKSR/ontIAIEPFcEkA==",
2491 "dev": true,
2492 "dependencies": {
2492 - "@typescript-eslint/types": "7.13.0",
2493 + "@typescript-eslint/types": "7.14.1",
2494 "eslint-visitor-keys": "^3.4.3"
2495 },
2496 "engines": {
@@ -2501,9 +2502,9 @@
2502 }
2503 },
2504 "node_modules/@typescript-eslint/parser/node_modules/minimatch": {
2504 - "version": "9.0.4",
2505 - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
2506 - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
2505 + "version": "9.0.5",
2506 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
2507 + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
2508 "dev": true,
2509 "dependencies": {
2510 "brace-expansion": "^2.0.1"
@@ -2532,13 +2533,13 @@
2533 }
2534 },
2535 "node_modules/@typescript-eslint/type-utils": {
2535 - "version": "7.13.0",
2536 - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.13.0.tgz",
2537 - "integrity": "sha512-xMEtMzxq9eRkZy48XuxlBFzpVMDurUAfDu5Rz16GouAtXm0TaAoTFzqWUFPPuQYXI/CDaH/Bgx/fk/84t/Bc9A==",
2536 + "version": "7.14.1",
2537 + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.14.1.tgz",
2538 + "integrity": "sha512-/MzmgNd3nnbDbOi3LfasXWWe292+iuo+umJ0bCCMCPc1jLO/z2BQmWUUUXvXLbrQey/JgzdF/OV+I5bzEGwJkQ==",
2539 "dev": true,
2540 "dependencies": {
2540 - "@typescript-eslint/typescript-estree": "7.13.0",
2541 - "@typescript-eslint/utils": "7.13.0",
2541 + "@typescript-eslint/typescript-estree": "7.14.1",
2542 + "@typescript-eslint/utils": "7.14.1",
2543 "debug": "^4.3.4",
2544 "ts-api-utils": "^1.3.0"
2545 },
@@ -2559,13 +2560,13 @@
2560 }
2561 },
2562 "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": {
2562 - "version": "7.13.0",
2563 - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.0.tgz",
2564 - "integrity": "sha512-ZrMCe1R6a01T94ilV13egvcnvVJ1pxShkE0+NDjDzH4nvG1wXpwsVI5bZCvE7AEDH1mXEx5tJSVR68bLgG7Dng==",
2563 + "version": "7.14.1",
2564 + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.14.1.tgz",
2565 + "integrity": "sha512-gPrFSsoYcsffYXTOZ+hT7fyJr95rdVe4kGVX1ps/dJ+DfmlnjFN/GcMxXcVkeHDKqsq6uAcVaQaIi3cFffmAbA==",
2566 "dev": true,
2567 "dependencies": {
2567 - "@typescript-eslint/types": "7.13.0",
2568 - "@typescript-eslint/visitor-keys": "7.13.0"
2568 + "@typescript-eslint/types": "7.14.1",
2569 + "@typescript-eslint/visitor-keys": "7.14.1"
2570 },
2571 "engines": {
2572 "node": "^18.18.0 || >=20.0.0"
@@ -2576,9 +2577,9 @@
2577 }
2578 },
2579 "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": {
2579 - "version": "7.13.0",
2580 - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.0.tgz",
2581 - "integrity": "sha512-QWuwm9wcGMAuTsxP+qz6LBBd3Uq8I5Nv8xb0mk54jmNoCyDspnMvVsOxI6IsMmway5d1S9Su2+sCKv1st2l6eA==",
2580 + "version": "7.14.1",
2581 + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.14.1.tgz",
2582 + "integrity": "sha512-mL7zNEOQybo5R3AavY+Am7KLv8BorIv7HCYS5rKoNZKQD9tsfGUpO4KdAn3sSUvTiS4PQkr2+K0KJbxj8H9NDg==",
2583 "dev": true,
2584 "engines": {
2585 "node": "^18.18.0 || >=20.0.0"
@@ -2589,13 +2590,13 @@
2590 }
2591 },
2592 "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": {
2592 - "version": "7.13.0",
2593 - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.0.tgz",
2594 - "integrity": "sha512-cAvBvUoobaoIcoqox1YatXOnSl3gx92rCZoMRPzMNisDiM12siGilSM4+dJAekuuHTibI2hVC2fYK79iSFvWjw==",
2593 + "version": "7.14.1",
2594 + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.14.1.tgz",
2595 + "integrity": "sha512-k5d0VuxViE2ulIO6FbxxSZaxqDVUyMbXcidC8rHvii0I56XZPv8cq+EhMns+d/EVIL41sMXqRbK3D10Oza1bbA==",
2596 "dev": true,
2597 "dependencies": {
2597 - "@typescript-eslint/types": "7.13.0",
2598 - "@typescript-eslint/visitor-keys": "7.13.0",
2598 + "@typescript-eslint/types": "7.14.1",
2599 + "@typescript-eslint/visitor-keys": "7.14.1",
2600 "debug": "^4.3.4",
2601 "globby": "^11.1.0",
2602 "is-glob": "^4.0.3",
@@ -2617,15 +2618,15 @@
2618 }
2619 },
2620 "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": {
2620 - "version": "7.13.0",
2621 - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.0.tgz",
2622 - "integrity": "sha512-jceD8RgdKORVnB4Y6BqasfIkFhl4pajB1wVxrF4akxD2QPM8GNYjgGwEzYS+437ewlqqrg7Dw+6dhdpjMpeBFQ==",
2621 + "version": "7.14.1",
2622 + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.14.1.tgz",
2623 + "integrity": "sha512-CMmVVELns3nak3cpJhZosDkm63n+DwBlDX8g0k4QUa9BMnF+lH2lr3d130M1Zt1xxmB3LLk3NV7KQCq86ZBBhQ==",
2624 "dev": true,
2625 "dependencies": {
2626 "@eslint-community/eslint-utils": "^4.4.0",
2626 - "@typescript-eslint/scope-manager": "7.13.0",
2627 - "@typescript-eslint/types": "7.13.0",
2628 - "@typescript-eslint/typescript-estree": "7.13.0"
2627 + "@typescript-eslint/scope-manager": "7.14.1",
2628 + "@typescript-eslint/types": "7.14.1",
2629 + "@typescript-eslint/typescript-estree": "7.14.1"
2630 },
2631 "engines": {
2632 "node": "^18.18.0 || >=20.0.0"
@@ -2639,12 +2640,12 @@
2640 }
2641 },
2642 "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": {
2642 - "version": "7.13.0",
2643 - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.0.tgz",
2644 - "integrity": "sha512-nxn+dozQx+MK61nn/JP+M4eCkHDSxSLDpgE3WcQo0+fkjEolnaB5jswvIKC4K56By8MMgIho7f1PVxERHEo8rw==",
2643 + "version": "7.14.1",
2644 + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.14.1.tgz",
2645 + "integrity": "sha512-Crb+F75U1JAEtBeQGxSKwI60hZmmzaqA3z9sYsVm8X7W5cwLEm5bRe0/uXS6+MR/y8CVpKSR/ontIAIEPFcEkA==",
2646 "dev": true,
2647 "dependencies": {
2647 - "@typescript-eslint/types": "7.13.0",
2648 + "@typescript-eslint/types": "7.14.1",
2649 "eslint-visitor-keys": "^3.4.3"
2650 },
2651 "engines": {
@@ -2656,9 +2657,9 @@
2657 }
2658 },
2659 "node_modules/@typescript-eslint/type-utils/node_modules/minimatch": {
2659 - "version": "9.0.4",
2660 - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
2661 - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
2660 + "version": "9.0.5",
2661 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
2662 + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
2663 "dev": true,
2664 "dependencies": {
2665 "brace-expansion": "^2.0.1"
@@ -2941,27 +2942,27 @@
2942 }
2943 },
2944 "node_modules/@volar/language-core": {
2944 - "version": "2.3.3",
2945 - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.3.3.tgz",
2946 - "integrity": "sha512-Blu4NQaRszEsgK/QvWFRSQPRAhPDbYef+peFV9Gb86swxRCs01q7h673/HYstaPsTbjh/F5mXjozoOFxQ8tLYw==",
2945 + "version": "2.3.4",
2946 + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.3.4.tgz",
2947 + "integrity": "sha512-wXBhY11qG6pCDAqDnbBRFIDSIwbqkWI7no+lj5+L7IlA7HRIjRP7YQLGzT0LF4lS6eHkMSsclXqy9DwYJasZTQ==",
2948 "dev": true,
2949 "dependencies": {
2949 - "@volar/source-map": "2.3.3"
2950 + "@volar/source-map": "2.3.4"
2951 }
2952 },
2953 "node_modules/@volar/source-map": {
2953 - "version": "2.3.3",
2954 - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.3.3.tgz",
2955 - "integrity": "sha512-eFRHA13hxiGPt+Xa0EX3yNd50ozctnW5KzQj/IllKmSK/KuBEkSAsIhBdOxCpv1YhV4GmI3iKG9peOs6k9LtnA==",
2954 + "version": "2.3.4",
2955 + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.3.4.tgz",
2956 + "integrity": "sha512-C+t63nwcblqLIVTYXaVi/+gC8NukDaDIQI72J3R7aXGvtgaVB16c+J8Iz7/VfOy7kjYv7lf5GhBny6ACw9fTGQ==",
2957 "dev": true
2958 },
2959 "node_modules/@volar/typescript": {
2959 - "version": "2.3.3",
2960 - "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.3.3.tgz",
2961 - "integrity": "sha512-cwGMSwqIR54Hngu5dYmUJPHFpo6KGj7BlpwT2G9WTKwEjFlH4g/0IPeq064428DAi/VMP42vqAQSBiEHi5Gc4A==",
2960 + "version": "2.3.4",
2961 + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.3.4.tgz",
2962 + "integrity": "sha512-acCvt7dZECyKcvO5geNybmrqOsu9u8n5XP1rfiYsOLYGPxvHRav9BVmEdRyZ3vvY6mNyQ1wLL5Hday4IShe17w==",
2963 "dev": true,
2964 "dependencies": {
2964 - "@volar/language-core": "2.3.3",
2965 + "@volar/language-core": "2.3.4",
2966 "path-browserify": "^1.0.1",
2967 "vscode-uri": "^3.0.8"
2968 }
@@ -3040,36 +3041,36 @@
3041 }
3042 },
3043 "node_modules/@vue/compiler-core": {
3043 - "version": "3.4.30",
3044 - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.30.tgz",
3045 - "integrity": "sha512-ZL8y4Xxdh8O6PSwfdZ1IpQ24PjTAieOz3jXb/MDTfDtANcKBMxg1KLm6OX2jofsaQGYfIVzd3BAG22i56/cF1w==",
3044 + "version": "3.4.31",
3045 + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.31.tgz",
3046 + "integrity": "sha512-skOiodXWTV3DxfDhB4rOf3OGalpITLlgCeOwb+Y9GJpfQ8ErigdBUHomBzvG78JoVE8MJoQsb+qhZiHfKeNeEg==",
3047 "dependencies": {
3048 "@babel/parser": "^7.24.7",
3048 - "@vue/shared": "3.4.30",
3049 + "@vue/shared": "3.4.31",
3050 "entities": "^4.5.0",
3051 "estree-walker": "^2.0.2",
3052 "source-map-js": "^1.2.0"
3053 }
3054 },
3055 "node_modules/@vue/compiler-dom": {
3055 - "version": "3.4.30",
3056 - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.30.tgz",
3057 - "integrity": "sha512-+16Sd8lYr5j/owCbr9dowcNfrHd+pz+w2/b5Lt26Oz/kB90C9yNbxQ3bYOvt7rI2bxk0nqda39hVcwDFw85c2Q==",
3056 + "version": "3.4.31",
3057 + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.31.tgz",
3058 + "integrity": "sha512-wK424WMXsG1IGMyDGyLqB+TbmEBFM78hIsOJ9QwUVLGrcSk0ak6zYty7Pj8ftm7nEtdU/DGQxAXp0/lM/2cEpQ==",
3059 "dependencies": {
3059 - "@vue/compiler-core": "3.4.30",
3060 - "@vue/shared": "3.4.30"
3060 + "@vue/compiler-core": "3.4.31",
3061 + "@vue/shared": "3.4.31"
3062 }
3063 },
3064 "node_modules/@vue/compiler-sfc": {
3064 - "version": "3.4.30",
3065 - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.30.tgz",
3066 - "integrity": "sha512-8vElKklHn/UY8+FgUFlQrYAPbtiSB2zcgeRKW7HkpSRn/JjMRmZvuOtwDx036D1aqKNSTtXkWRfqx53Qb+HmMg==",
3065 + "version": "3.4.31",
3066 + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.31.tgz",
3067 + "integrity": "sha512-einJxqEw8IIJxzmnxmJBuK2usI+lJonl53foq+9etB2HAzlPjAS/wa7r0uUpXw5ByX3/0uswVSrjNb17vJm1kQ==",
3068 "dependencies": {
3069 "@babel/parser": "^7.24.7",
3069 - "@vue/compiler-core": "3.4.30",
3070 - "@vue/compiler-dom": "3.4.30",
3071 - "@vue/compiler-ssr": "3.4.30",
3072 - "@vue/shared": "3.4.30",
3070 + "@vue/compiler-core": "3.4.31",
3071 + "@vue/compiler-dom": "3.4.31",
3072 + "@vue/compiler-ssr": "3.4.31",
3073 + "@vue/shared": "3.4.31",
3074 "estree-walker": "^2.0.2",
3075 "magic-string": "^0.30.10",
3076 "postcss": "^8.4.38",
@@ -3077,12 +3078,12 @@
3078 }
3079 },
3080 "node_modules/@vue/compiler-ssr": {
3080 - "version": "3.4.30",
3081 - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.30.tgz",
3082 - "integrity": "sha512-ZJ56YZGXJDd6jky4mmM0rNaNP6kIbQu9LTKZDhcpddGe/3QIalB1WHHmZ6iZfFNyj5mSypTa4+qDJa5VIuxMSg==",
3081 + "version": "3.4.31",
3082 + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.31.tgz",
3083 + "integrity": "sha512-RtefmITAje3fJ8FSg1gwgDhdKhZVntIVbwupdyZDSifZTRMiWxWehAOTCc8/KZDnBOcYQ4/9VWxsTbd3wT0hAA==",
3084 "dependencies": {
3084 - "@vue/compiler-dom": "3.4.30",
3085 - "@vue/shared": "3.4.30"
3085 + "@vue/compiler-dom": "3.4.31",
3086 + "@vue/shared": "3.4.31"
3087 }
3088 },
3089 "node_modules/@vue/devtools-api": {
@@ -3194,49 +3195,49 @@
3195 }
3196 },
3197 "node_modules/@vue/reactivity": {
3197 - "version": "3.4.30",
3198 - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.30.tgz",
3199 - "integrity": "sha512-bVJurnCe3LS0JII8PPoAA63Zd2MBzcKrEzwdQl92eHCcxtIbxD2fhNwJpa+KkM3Y/A4T5FUnmdhgKwOf6BfbcA==",
3198 + "version": "3.4.31",
3199 + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.31.tgz",
3200 + "integrity": "sha512-VGkTani8SOoVkZNds1PfJ/T1SlAIOf8E58PGAhIOUDYPC4GAmFA2u/E14TDAFcf3vVDKunc4QqCe/SHr8xC65Q==",
3201 "dependencies": {
3201 - "@vue/shared": "3.4.30"
3202 + "@vue/shared": "3.4.31"
3203 }
3204 },
3205 "node_modules/@vue/runtime-core": {
3205 - "version": "3.4.30",
3206 - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.30.tgz",
3207 - "integrity": "sha512-qaFEbnNpGz+tlnkaualomogzN8vBLkgzK55uuWjYXbYn039eOBZrWxyXWq/7qh9Bz2FPifZqGjVDl/FXiq9L2g==",
3206 + "version": "3.4.31",
3207 + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.31.tgz",
3208 + "integrity": "sha512-LDkztxeUPazxG/p8c5JDDKPfkCDBkkiNLVNf7XZIUnJ+66GVGkP+TIh34+8LtPisZ+HMWl2zqhIw0xN5MwU1cw==",
3209 "dependencies": {
3209 - "@vue/reactivity": "3.4.30",
3210 - "@vue/shared": "3.4.30"
3210 + "@vue/reactivity": "3.4.31",
3211 + "@vue/shared": "3.4.31"
3212 }
3213 },
3214 "node_modules/@vue/runtime-dom": {
3214 - "version": "3.4.30",
3215 - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.30.tgz",
3216 - "integrity": "sha512-tV6B4YiZRj5QsaJgw2THCy5C1H+2UeywO9tqgWEc21tn85qHEERndHN/CxlyXvSBFrpmlexCIdnqPuR9RM9thw==",
3215 + "version": "3.4.31",
3216 + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.31.tgz",
3217 + "integrity": "sha512-2Auws3mB7+lHhTFCg8E9ZWopA6Q6L455EcU7bzcQ4x6Dn4cCPuqj6S2oBZgN2a8vJRS/LSYYxwFFq2Hlx3Fsaw==",
3218 "dependencies": {
3218 - "@vue/reactivity": "3.4.30",
3219 - "@vue/runtime-core": "3.4.30",
3220 - "@vue/shared": "3.4.30",
3219 + "@vue/reactivity": "3.4.31",
3220 + "@vue/runtime-core": "3.4.31",
3221 + "@vue/shared": "3.4.31",
3222 "csstype": "^3.1.3"
3223 }
3224 },
3225 "node_modules/@vue/server-renderer": {
3225 - "version": "3.4.30",
3226 - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.30.tgz",
3227 - "integrity": "sha512-TBD3eqR1DeDc0cMrXS/vEs/PWzq1uXxnvjoqQuDGFIEHFIwuDTX/KWAQKIBjyMWLFHEeTDGYVsYci85z2UbTDg==",
3226 + "version": "3.4.31",
3227 + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.31.tgz",
3228 + "integrity": "sha512-D5BLbdvrlR9PE3by9GaUp1gQXlCNadIZytMIb8H2h3FMWJd4oUfkUTEH2wAr3qxoRz25uxbTcbqd3WKlm9EHQA==",
3229 "dependencies": {
3229 - "@vue/compiler-ssr": "3.4.30",
3230 - "@vue/shared": "3.4.30"
3230 + "@vue/compiler-ssr": "3.4.31",
3231 + "@vue/shared": "3.4.31"
3232 },
3233 "peerDependencies": {
3233 - "vue": "3.4.30"
3234 + "vue": "3.4.31"
3235 }
3236 },
3237 "node_modules/@vue/shared": {
3237 - "version": "3.4.30",
3238 - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.30.tgz",
3239 - "integrity": "sha512-CLg+f8RQCHQnKvuHY9adMsMaQOcqclh6Z5V9TaoMgy0ut0tz848joZ7/CYFFyF/yZ5i2yaw7Fn498C+CNZVHIg=="
3238 + "version": "3.4.31",
3239 + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.31.tgz",
3240 + "integrity": "sha512-Yp3wtJk//8cO4NItOPpi3QkLExAr/aLBGZMmTtW9WpdwBCJpRM6zj9WgWktXAl8IDIozwNMByT45JP3tO3ACWA=="
3241 },
3242 "node_modules/@vue/test-utils": {
3243 "version": "2.4.6",
@@ -3546,9 +3547,9 @@
3547 }
3548 },
3549 "node_modules/apexcharts": {
3549 - "version": "3.49.1",
3550 - "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.49.1.tgz",
3551 - "integrity": "sha512-MqGtlq/KQuO8j0BBsUJYlRG8VBctKwYdwuBtajHgHTmSgUU3Oai+8oYN/rKCXwXzrUlYA+GiMgotAIbXY2BCGw==",
3550 + "version": "3.49.2",
3551 + "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.49.2.tgz",
3552 + "integrity": "sha512-vBB8KgwfD9rSObA7s4kY2rU6DeaN67gTR3JN7r32ztgKVf8lKkdFQ6iUhk6oIHrV7W8PoHhr5EwKymn0z5Fz6A==",
3553 "dependencies": {
3554 "@yr/monotone-cubic-spline": "^1.0.3",
3555 "svg.draggable.js": "^2.2.2",
@@ -3914,6 +3915,21 @@
3915 "url": "https://github.com/sponsors/sindresorhus"
3916 }
3917 },
3918 + "node_modules/bundle-require": {
3919 + "version": "5.0.0",
3920 + "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-5.0.0.tgz",
3921 + "integrity": "sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==",
3922 + "dev": true,
3923 + "dependencies": {
3924 + "load-tsconfig": "^0.2.3"
3925 + },
3926 + "engines": {
3927 + "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
3928 + },
3929 + "peerDependencies": {
3930 + "esbuild": ">=0.18"
3931 + }
3932 + },
3933 "node_modules/bytes": {
3934 "version": "3.1.2",
3935 "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
@@ -4008,9 +4024,9 @@
4024 }
4025 },
4026 "node_modules/caniuse-lite": {
4011 - "version": "1.0.30001634",
4012 - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001634.tgz",
4013 - "integrity": "sha512-fbBYXQ9q3+yp1q1gBk86tOFs4pyn/yxFm5ZNP18OXJDfA3txImOY9PhfxVggZ4vRHDqoU8NrKU81eN0OtzOgRA==",
4027 + "version": "1.0.30001638",
4028 + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001638.tgz",
4029 + "integrity": "sha512-5SuJUJ7cZnhPpeLHaH0c/HPAnAHZvS6ElWyHK9GSIbVOQABLzowiI2pjmpvZ1WEbkyz46iFd4UXlOHR5SqgfMQ==",
4030 "dev": true,
4031 "funding": [
4032 {
@@ -5067,12 +5083,12 @@
5083 }
5084 },
5085 "node_modules/echarts": {
5070 - "version": "5.5.0",
5071 - "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.5.0.tgz",
5072 - "integrity": "sha512-rNYnNCzqDAPCr4m/fqyUFv7fD9qIsd50S6GDFgO1DxZhncCsNsG7IfUlAlvZe5oSEQxtsjnHiUuppzccry93Xw==",
5086 + "version": "5.5.1",
5087 + "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.5.1.tgz",
5088 + "integrity": "sha512-Fce8upazaAXUVUVsjgV6mBnGuqgO+JNDlcgF79Dksy4+wgGpQB2lmYoO4TSweFg/mZITdpGHomw/cNBJZj1icA==",
5089 "dependencies": {
5090 "tslib": "2.3.0",
5075 - "zrender": "5.5.0"
5091 + "zrender": "5.6.0"
5092 }
5093 },
5094 "node_modules/editorconfig": {
@@ -5124,9 +5140,9 @@
5140 "dev": true
5141 },
5142 "node_modules/electron-to-chromium": {
5127 - "version": "1.4.802",
5128 - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.802.tgz",
5129 - "integrity": "sha512-TnTMUATbgNdPXVSHsxvNVSG0uEd6cSZsANjm8c9HbvflZVVn1yTRcmVXYT1Ma95/ssB/Dcd30AHweH2TE+dNpA==",
5143 + "version": "1.4.814",
5144 + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.814.tgz",
5145 + "integrity": "sha512-GVulpHjFu1Y9ZvikvbArHmAhZXtm3wHlpjTMcXNGKl4IQ4jMQjlnz8yMQYYqdLHKi/jEL2+CBC2akWVCoIGUdw==",
5146 "dev": true
5147 },
5148 "node_modules/emoji-regex": {
@@ -5605,11 +5621,11 @@
5621 }
5622 },
5623 "node_modules/espree": {
5608 - "version": "10.0.1",
5609 - "resolved": "https://registry.npmjs.org/espree/-/espree-10.0.1.tgz",
5610 - "integrity": "sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==",
5624 + "version": "10.1.0",
5625 + "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz",
5626 + "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==",
5627 "dependencies": {
5612 - "acorn": "^8.11.3",
5628 + "acorn": "^8.12.0",
5629 "acorn-jsx": "^5.3.2",
5630 "eslint-visitor-keys": "^4.0.0"
5631 },
@@ -5947,9 +5963,9 @@
5963 }
5964 },
5965 "node_modules/foreground-child": {
5950 - "version": "3.2.0",
5951 - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.0.tgz",
5952 - "integrity": "sha512-CrWQNaEl1/6WeZoarcM9LHupTo3RpZO2Pdk1vktwzPiQTsJnAKJmm3TACKeG5UZbWDfaH2AbvYxzP96y0MT7fA==",
5966 + "version": "3.2.1",
5967 + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz",
5968 + "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==",
5969 "dev": true,
5970 "dependencies": {
5971 "cross-spawn": "^7.0.0",
@@ -6129,6 +6145,18 @@
6145 "url": "https://github.com/sponsors/sindresorhus"
6146 }
6147 },
6148 + "node_modules/get-tsconfig": {
6149 + "version": "4.7.5",
6150 + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz",
6151 + "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==",
6152 + "dev": true,
6153 + "dependencies": {
6154 + "resolve-pkg-maps": "^1.0.0"
6155 + },
6156 + "funding": {
6157 + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
6158 + }
6159 + },
6160 "node_modules/getos": {
6161 "version": "3.2.1",
6162 "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz",
@@ -6148,15 +6176,16 @@
6176 }
6177 },
6178 "node_modules/glob": {
6151 - "version": "10.4.1",
6152 - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz",
6153 - "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==",
6179 + "version": "10.4.2",
6180 + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz",
6181 + "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==",
6182 "dev": true,
6183 "dependencies": {
6184 "foreground-child": "^3.1.0",
6185 "jackspeak": "^3.1.2",
6186 "minimatch": "^9.0.4",
6187 "minipass": "^7.1.2",
6188 + "package-json-from-dist": "^1.0.0",
6189 "path-scurry": "^1.11.1"
6190 },
6191 "bin": {
@@ -6181,9 +6210,9 @@
6210 }
6211 },
6212 "node_modules/glob/node_modules/minimatch": {
6184 - "version": "9.0.4",
6185 - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
6186 - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
6213 + "version": "9.0.5",
6214 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
6215 + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
6216 "dev": true,
6217 "dependencies": {
6218 "brace-expansion": "^2.0.1"
@@ -6494,9 +6523,9 @@
6523 }
6524 },
6525 "node_modules/https-proxy-agent": {
6497 - "version": "7.0.4",
6498 - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz",
6499 - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==",
6526 + "version": "7.0.5",
6527 + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
6528 + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
6529 "dev": true,
6530 "dependencies": {
6531 "agent-base": "^7.0.2",
@@ -6599,6 +6628,430 @@
6628 "url": "https://github.com/sponsors/wooorm"
6629 }
6630 },
6631 + "node_modules/importx": {
6632 + "version": "0.3.7",
6633 + "resolved": "https://registry.npmjs.org/importx/-/importx-0.3.7.tgz",
6634 + "integrity": "sha512-K2+4GWH3ftMEbwLUK4IVC1qmk5POIofYb+2dHua1Szl5hQexSKv/QfwruTMzROqFWXnPUDJml5CnRiyk1YAesg==",
6635 + "dev": true,
6636 + "dependencies": {
6637 + "bundle-require": "^5.0.0",
6638 + "debug": "^4.3.5",
6639 + "esbuild": "^0.20.2",
6640 + "jiti": "^1.21.6",
6641 + "pathe": "^1.1.2",
6642 + "pkg-types": "^1.1.1",
6643 + "tsx": "^4.15.6"
6644 + },
6645 + "funding": {
6646 + "url": "https://github.com/sponsors/antfu"
6647 + }
6648 + },
6649 + "node_modules/importx/node_modules/@esbuild/aix-ppc64": {
6650 + "version": "0.20.2",
6651 + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz",
6652 + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==",
6653 + "cpu": [
6654 + "ppc64"
6655 + ],
6656 + "dev": true,
6657 + "optional": true,
6658 + "os": [
6659 + "aix"
6660 + ],
6661 + "engines": {
6662 + "node": ">=12"
6663 + }
6664 + },
6665 + "node_modules/importx/node_modules/@esbuild/android-arm": {
6666 + "version": "0.20.2",
6667 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz",
6668 + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==",
6669 + "cpu": [
6670 + "arm"
6671 + ],
6672 + "dev": true,
6673 + "optional": true,
6674 + "os": [
6675 + "android"
6676 + ],
6677 + "engines": {
6678 + "node": ">=12"
6679 + }
6680 + },
6681 + "node_modules/importx/node_modules/@esbuild/android-arm64": {
6682 + "version": "0.20.2",
6683 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz",
6684 + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==",
6685 + "cpu": [
6686 + "arm64"
6687 + ],
6688 + "dev": true,
6689 + "optional": true,
6690 + "os": [
6691 + "android"
6692 + ],
6693 + "engines": {
6694 + "node": ">=12"
6695 + }
6696 + },
6697 + "node_modules/importx/node_modules/@esbuild/android-x64": {
6698 + "version": "0.20.2",
6699 + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz",
6700 + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==",
6701 + "cpu": [
6702 + "x64"
6703 + ],
6704 + "dev": true,
6705 + "optional": true,
6706 + "os": [
6707 + "android"
6708 + ],
6709 + "engines": {
6710 + "node": ">=12"
6711 + }
6712 + },
6713 + "node_modules/importx/node_modules/@esbuild/darwin-arm64": {
6714 + "version": "0.20.2",
6715 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz",
6716 + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==",
6717 + "cpu": [
6718 + "arm64"
6719 + ],
6720 + "dev": true,
6721 + "optional": true,
6722 + "os": [
6723 + "darwin"
6724 + ],
6725 + "engines": {
6726 + "node": ">=12"
6727 + }
6728 + },
6729 + "node_modules/importx/node_modules/@esbuild/darwin-x64": {
6730 + "version": "0.20.2",
6731 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz",
6732 + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==",
6733 + "cpu": [
6734 + "x64"
6735 + ],
6736 + "dev": true,
6737 + "optional": true,
6738 + "os": [
6739 + "darwin"
6740 + ],
6741 + "engines": {
6742 + "node": ">=12"
6743 + }
6744 + },
6745 + "node_modules/importx/node_modules/@esbuild/freebsd-arm64": {
6746 + "version": "0.20.2",
6747 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz",
6748 + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==",
6749 + "cpu": [
6750 + "arm64"
6751 + ],
6752 + "dev": true,
6753 + "optional": true,
6754 + "os": [
6755 + "freebsd"
6756 + ],
6757 + "engines": {
6758 + "node": ">=12"
6759 + }
6760 + },
6761 + "node_modules/importx/node_modules/@esbuild/freebsd-x64": {
6762 + "version": "0.20.2",
6763 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz",
6764 + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==",
6765 + "cpu": [
6766 + "x64"
6767 + ],
6768 + "dev": true,
6769 + "optional": true,
6770 + "os": [
6771 + "freebsd"
6772 + ],
6773 + "engines": {
6774 + "node": ">=12"
6775 + }
6776 + },
6777 + "node_modules/importx/node_modules/@esbuild/linux-arm": {
6778 + "version": "0.20.2",
6779 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz",
6780 + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==",
6781 + "cpu": [
6782 + "arm"
6783 + ],
6784 + "dev": true,
6785 + "optional": true,
6786 + "os": [
6787 + "linux"
6788 + ],
6789 + "engines": {
6790 + "node": ">=12"
6791 + }
6792 + },
6793 + "node_modules/importx/node_modules/@esbuild/linux-arm64": {
6794 + "version": "0.20.2",
6795 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz",
6796 + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==",
6797 + "cpu": [
6798 + "arm64"
6799 + ],
6800 + "dev": true,
6801 + "optional": true,
6802 + "os": [
6803 + "linux"
6804 + ],
6805 + "engines": {
6806 + "node": ">=12"
6807 + }
6808 + },
6809 + "node_modules/importx/node_modules/@esbuild/linux-ia32": {
6810 + "version": "0.20.2",
6811 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz",
6812 + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==",
6813 + "cpu": [
6814 + "ia32"
6815 + ],
6816 + "dev": true,
6817 + "optional": true,
6818 + "os": [
6819 + "linux"
6820 + ],
6821 + "engines": {
6822 + "node": ">=12"
6823 + }
6824 + },
6825 + "node_modules/importx/node_modules/@esbuild/linux-loong64": {
6826 + "version": "0.20.2",
6827 + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz",
6828 + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==",
6829 + "cpu": [
6830 + "loong64"
6831 + ],
6832 + "dev": true,
6833 + "optional": true,
6834 + "os": [
6835 + "linux"
6836 + ],
6837 + "engines": {
6838 + "node": ">=12"
6839 + }
6840 + },
6841 + "node_modules/importx/node_modules/@esbuild/linux-mips64el": {
6842 + "version": "0.20.2",
6843 + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz",
6844 + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==",
6845 + "cpu": [
6846 + "mips64el"
6847 + ],
6848 + "dev": true,
6849 + "optional": true,
6850 + "os": [
6851 + "linux"
6852 + ],
6853 + "engines": {
6854 + "node": ">=12"
6855 + }
6856 + },
6857 + "node_modules/importx/node_modules/@esbuild/linux-ppc64": {
6858 + "version": "0.20.2",
6859 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz",
6860 + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==",
6861 + "cpu": [
6862 + "ppc64"
6863 + ],
6864 + "dev": true,
6865 + "optional": true,
6866 + "os": [
6867 + "linux"
6868 + ],
6869 + "engines": {
6870 + "node": ">=12"
6871 + }
6872 + },
6873 + "node_modules/importx/node_modules/@esbuild/linux-riscv64": {
6874 + "version": "0.20.2",
6875 + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz",
6876 + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==",
6877 + "cpu": [
6878 + "riscv64"
6879 + ],
6880 + "dev": true,
6881 + "optional": true,
6882 + "os": [
6883 + "linux"
6884 + ],
6885 + "engines": {
6886 + "node": ">=12"
6887 + }
6888 + },
6889 + "node_modules/importx/node_modules/@esbuild/linux-s390x": {
6890 + "version": "0.20.2",
6891 + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz",
6892 + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==",
6893 + "cpu": [
6894 + "s390x"
6895 + ],
6896 + "dev": true,
6897 + "optional": true,
6898 + "os": [
6899 + "linux"
6900 + ],
6901 + "engines": {
6902 + "node": ">=12"
6903 + }
6904 + },
6905 + "node_modules/importx/node_modules/@esbuild/linux-x64": {
6906 + "version": "0.20.2",
6907 + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz",
6908 + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==",
6909 + "cpu": [
6910 + "x64"
6911 + ],
6912 + "dev": true,
6913 + "optional": true,
6914 + "os": [
6915 + "linux"
6916 + ],
6917 + "engines": {
6918 + "node": ">=12"
6919 + }
6920 + },
6921 + "node_modules/importx/node_modules/@esbuild/netbsd-x64": {
6922 + "version": "0.20.2",
6923 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz",
6924 + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==",
6925 + "cpu": [
6926 + "x64"
6927 + ],
6928 + "dev": true,
6929 + "optional": true,
6930 + "os": [
6931 + "netbsd"
6932 + ],
6933 + "engines": {
6934 + "node": ">=12"
6935 + }
6936 + },
6937 + "node_modules/importx/node_modules/@esbuild/openbsd-x64": {
6938 + "version": "0.20.2",
6939 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz",
6940 + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==",
6941 + "cpu": [
6942 + "x64"
6943 + ],
6944 + "dev": true,
6945 + "optional": true,
6946 + "os": [
6947 + "openbsd"
6948 + ],
6949 + "engines": {
6950 + "node": ">=12"
6951 + }
6952 + },
6953 + "node_modules/importx/node_modules/@esbuild/sunos-x64": {
6954 + "version": "0.20.2",
6955 + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz",
6956 + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==",
6957 + "cpu": [
6958 + "x64"
6959 + ],
6960 + "dev": true,
6961 + "optional": true,
6962 + "os": [
6963 + "sunos"
6964 + ],
6965 + "engines": {
6966 + "node": ">=12"
6967 + }
6968 + },
6969 + "node_modules/importx/node_modules/@esbuild/win32-arm64": {
6970 + "version": "0.20.2",
6971 + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz",
6972 + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==",
6973 + "cpu": [
6974 + "arm64"
6975 + ],
6976 + "dev": true,
6977 + "optional": true,
6978 + "os": [
6979 + "win32"
6980 + ],
6981 + "engines": {
6982 + "node": ">=12"
6983 + }
6984 + },
6985 + "node_modules/importx/node_modules/@esbuild/win32-ia32": {
6986 + "version": "0.20.2",
6987 + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz",
6988 + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==",
6989 + "cpu": [
6990 + "ia32"
6991 + ],
6992 + "dev": true,
6993 + "optional": true,
6994 + "os": [
6995 + "win32"
6996 + ],
6997 + "engines": {
6998 + "node": ">=12"
6999 + }
7000 + },
7001 + "node_modules/importx/node_modules/@esbuild/win32-x64": {
7002 + "version": "0.20.2",
7003 + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz",
7004 + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==",
7005 + "cpu": [
7006 + "x64"
7007 + ],
7008 + "dev": true,
7009 + "optional": true,
7010 + "os": [
7011 + "win32"
7012 + ],
7013 + "engines": {
7014 + "node": ">=12"
7015 + }
7016 + },
7017 + "node_modules/importx/node_modules/esbuild": {
7018 + "version": "0.20.2",
7019 + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz",
7020 + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==",
7021 + "dev": true,
7022 + "hasInstallScript": true,
7023 + "bin": {
7024 + "esbuild": "bin/esbuild"
7025 + },
7026 + "engines": {
7027 + "node": ">=12"
7028 + },
7029 + "optionalDependencies": {
7030 + "@esbuild/aix-ppc64": "0.20.2",
7031 + "@esbuild/android-arm": "0.20.2",
7032 + "@esbuild/android-arm64": "0.20.2",
7033 + "@esbuild/android-x64": "0.20.2",
7034 + "@esbuild/darwin-arm64": "0.20.2",
7035 + "@esbuild/darwin-x64": "0.20.2",
7036 + "@esbuild/freebsd-arm64": "0.20.2",
7037 + "@esbuild/freebsd-x64": "0.20.2",
7038 + "@esbuild/linux-arm": "0.20.2",
7039 + "@esbuild/linux-arm64": "0.20.2",
7040 + "@esbuild/linux-ia32": "0.20.2",
7041 + "@esbuild/linux-loong64": "0.20.2",
7042 + "@esbuild/linux-mips64el": "0.20.2",
7043 + "@esbuild/linux-ppc64": "0.20.2",
7044 + "@esbuild/linux-riscv64": "0.20.2",
7045 + "@esbuild/linux-s390x": "0.20.2",
7046 + "@esbuild/linux-x64": "0.20.2",
7047 + "@esbuild/netbsd-x64": "0.20.2",
7048 + "@esbuild/openbsd-x64": "0.20.2",
7049 + "@esbuild/sunos-x64": "0.20.2",
7050 + "@esbuild/win32-arm64": "0.20.2",
7051 + "@esbuild/win32-ia32": "0.20.2",
7052 + "@esbuild/win32-x64": "0.20.2"
7053 + }
7054 + },
7055 "node_modules/imurmurhash": {
7056 "version": "0.1.4",
7057 "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
@@ -6667,12 +7120,15 @@
7120 }
7121 },
7122 "node_modules/is-core-module": {
6670 - "version": "2.13.1",
6671 - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
6672 - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
7123 + "version": "2.14.0",
7124 + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz",
7125 + "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==",
7126 "dev": true,
7127 "dependencies": {
6675 - "hasown": "^2.0.0"
7128 + "hasown": "^2.0.2"
7129 + },
7130 + "engines": {
7131 + "node": ">= 0.4"
7132 },
7133 "funding": {
7134 "url": "https://github.com/sponsors/ljharb"
@@ -6899,9 +7355,9 @@
7355 }
7356 },
7357 "node_modules/joi": {
6902 - "version": "17.13.1",
6903 - "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.1.tgz",
6904 - "integrity": "sha512-vaBlIKCyo4FCUtCm7Eu4QZd/q02bWcxfUO6YSXAZOWF6gzcLBeba8kwotUdYJjDLW8Cz8RywsSOqiNJZW0mNvg==",
7358 + "version": "17.13.3",
7359 + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz",
7360 + "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==",
7361 "dev": true,
7362 "dependencies": {
7363 "@hapi/hoek": "^9.3.0",
@@ -6912,9 +7368,9 @@
7368 }
7369 },
7370 "node_modules/jose": {
6915 - "version": "5.4.1",
6916 - "resolved": "https://registry.npmjs.org/jose/-/jose-5.4.1.tgz",
6917 - "integrity": "sha512-U6QajmpV/nhL9SyfAewo000fkiRQ+Yd2H0lBxJJ9apjpOgkOcBQJWOrMo917lxLptdS/n/o/xPzMkXhF46K8hQ==",
7371 + "version": "5.6.2",
7372 + "resolved": "https://registry.npmjs.org/jose/-/jose-5.6.2.tgz",
7373 + "integrity": "sha512-F1t1/WZJ4JdmCE/XoMYw1dPOW5g8JF0xGm6Ox2fwaCAPlCzt+4Bh0EWP59iQuZNHHauDkCdjx+kCZSh5z/PGow==",
7374 "funding": {
7375 "url": "https://github.com/sponsors/panva"
7376 }
@@ -7440,6 +7896,15 @@
7896 "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
7897 }
7898 },
7899 + "node_modules/load-tsconfig": {
7900 + "version": "0.2.5",
7901 + "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz",
7902 + "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==",
7903 + "dev": true,
7904 + "engines": {
7905 + "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
7906 + }
7907 + },
7908 "node_modules/local-pkg": {
7909 "version": "0.5.0",
7910 "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz",
@@ -8094,10 +8559,13 @@
8559 }
8560 },
8561 "node_modules/object-inspect": {
8097 - "version": "1.13.1",
8098 - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
8099 - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
8562 + "version": "1.13.2",
8563 + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
8564 + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
8565 "dev": true,
8566 + "engines": {
8567 + "node": ">= 0.4"
8568 + },
8569 "funding": {
8570 "url": "https://github.com/sponsors/ljharb"
8571 }
@@ -8225,6 +8693,12 @@
8693 "url": "https://github.com/sponsors/sindresorhus"
8694 }
8695 },
8696 + "node_modules/package-json-from-dist": {
8697 + "version": "1.0.0",
8698 + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
8699 + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
8700 + "dev": true
8701 + },
8702 "node_modules/parent-module": {
8703 "version": "1.0.1",
8704 "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -8319,9 +8793,9 @@
8793 }
8794 },
8795 "node_modules/path-scurry/node_modules/lru-cache": {
8322 - "version": "10.2.2",
8323 - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz",
8324 - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==",
8796 + "version": "10.3.0",
8797 + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz",
8798 + "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==",
8799 "dev": true,
8800 "engines": {
8801 "node": "14 || >=16.14"
@@ -9151,6 +9625,15 @@
9625 "node": ">= 0.6"
9626 }
9627 },
9628 + "node_modules/resolve-pkg-maps": {
9629 + "version": "1.0.0",
9630 + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
9631 + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
9632 + "dev": true,
9633 + "funding": {
9634 + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
9635 + }
9636 + },
9637 "node_modules/restore-cursor": {
9638 "version": "3.1.0",
9639 "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
@@ -9441,11 +9924,11 @@
9924 }
9925 },
9926 "node_modules/shiki": {
9444 - "version": "1.9.0",
9445 - "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.9.0.tgz",
9446 - "integrity": "sha512-i6//Lqgn7+7nZA0qVjoYH0085YdNk4MC+tJV4bo+HgjgRMJ0JmkLZzFAuvVioJqLkcGDK5GAMpghZEZkCnwxpQ==",
9927 + "version": "1.9.1",
9928 + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.9.1.tgz",
9929 + "integrity": "sha512-8PDkgb5ja3nfujTjvC4VytL6wGOGCtFAClUb2r3QROevYXxcq+/shVJK5s6gy0HZnjaJgFxd6BpPqpRfqne5rA==",
9930 "dependencies": {
9448 - "@shikijs/core": "1.9.0"
9931 + "@shikijs/core": "1.9.1"
9932 }
9933 },
9934 "node_modules/side-channel": {
@@ -10114,9 +10597,9 @@
10597 }
10598 },
10599 "node_modules/taze": {
10117 - "version": "0.13.8",
10118 - "resolved": "https://registry.npmjs.org/taze/-/taze-0.13.8.tgz",
10119 - "integrity": "sha512-FaHz2S04VTaAuqfhkA9XXj+GQH4Qq7lhpie0xqE4q8tJTPwHkZki41eKKOpbe2dtHwoIlLLG3MDtoOQwhOnD9A==",
10600 + "version": "0.13.9",
10601 + "resolved": "https://registry.npmjs.org/taze/-/taze-0.13.9.tgz",
10602 + "integrity": "sha512-qBKfViatIEkw7GNlHU8wV28MtRbdrpwxjcZbcqtCi6gHv2X0JAZ9+K8cp4O5UfVjEvFiafw5iSosBlKM7Fb4XA==",
10603 "dev": true,
10604 "dependencies": {
10605 "@antfu/ni": "^0.21.12",
@@ -10124,10 +10607,10 @@
10607 "cli-progress": "^3.12.0",
10608 "deepmerge": "^4.3.1",
10609 "detect-indent": "^7.0.1",
10127 - "picocolors": "^1.0.0",
10610 + "picocolors": "^1.0.1",
10611 "prompts": "^2.4.2",
10612 "ufo": "^1.5.3",
10130 - "unconfig": "^0.3.13",
10613 + "unconfig": "^0.4.4",
10614 "yargs": "^17.7.2"
10615 },
10616 "bin": {
@@ -10137,6 +10620,20 @@
10620 "url": "https://github.com/sponsors/antfu"
10621 }
10622 },
10623 + "node_modules/taze/node_modules/unconfig": {
10624 + "version": "0.4.4",
10625 + "resolved": "https://registry.npmjs.org/unconfig/-/unconfig-0.4.4.tgz",
10626 + "integrity": "sha512-Dmz2VZAnx5yxANZ5koy5u6bLd/GJ8dgr0y6/78+40obWIsnvZdTIxLMIx6qBqsabzGTB4yUiMRIOV4hwwVM2pQ==",
10627 + "dev": true,
10628 + "dependencies": {
10629 + "@antfu/utils": "^0.7.8",
10630 + "defu": "^6.1.4",
10631 + "importx": "^0.3.6"
10632 + },
10633 + "funding": {
10634 + "url": "https://github.com/sponsors/antfu"
10635 + }
10636 + },
10637 "node_modules/text-table": {
10638 "version": "0.2.0",
10639 "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@@ -10321,6 +10818,25 @@
10818 "node": ">=0.6.x"
10819 }
10820 },
10821 + "node_modules/tsx": {
10822 + "version": "4.15.7",
10823 + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.15.7.tgz",
10824 + "integrity": "sha512-u3H0iSFDZM3za+VxkZ1kywdCeHCn+8/qHQS1MNoO2sONDgD95HlWtt8aB23OzeTmFP9IU4/8bZUdg58Uu5J4cg==",
10825 + "dev": true,
10826 + "dependencies": {
10827 + "esbuild": "~0.21.4",
10828 + "get-tsconfig": "^4.7.5"
10829 + },
10830 + "bin": {
10831 + "tsx": "dist/cli.mjs"
10832 + },
10833 + "engines": {
10834 + "node": ">=18.0.0"
10835 + },
10836 + "optionalDependencies": {
10837 + "fsevents": "~2.3.3"
10838 + }
10839 + },
10840 "node_modules/tunnel-agent": {
10841 "version": "0.6.0",
10842 "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
@@ -10385,9 +10901,9 @@
10901 }
10902 },
10903 "node_modules/typescript": {
10388 - "version": "5.4.5",
10389 - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
10390 - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
10904 + "version": "5.5.2",
10905 + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz",
10906 + "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==",
10907 "peer": true,
10908 "bin": {
10909 "tsc": "bin/tsc",
@@ -10452,20 +10968,20 @@
10968 }
10969 },
10970 "node_modules/unplugin-vue-components": {
10455 - "version": "0.27.0",
10456 - "resolved": "https://registry.npmjs.org/unplugin-vue-components/-/unplugin-vue-components-0.27.0.tgz",
10457 - "integrity": "sha512-77eTEy23sQ0UpzGWnZ9I2mY3cnmXwklz4ITcn3JfxjCoX643ghImkiZ4nFm58sxbdVcc4Fo/o4LIoFnlqEqsSg==",
10971 + "version": "0.27.2",
10972 + "resolved": "https://registry.npmjs.org/unplugin-vue-components/-/unplugin-vue-components-0.27.2.tgz",
10973 + "integrity": "sha512-YifnsmslMRNt+JRQiCG4ZX1+xUQuubUZm76K7Qtg8dmchZJkHIDxZSyfZb5/jqrLWMTm/TUjGJ3ZDlzO6SFnSQ==",
10974 "dev": true,
10975 "dependencies": {
10460 - "@antfu/utils": "^0.7.7",
10976 + "@antfu/utils": "^0.7.10",
10977 "@rollup/pluginutils": "^5.1.0",
10978 "chokidar": "^3.6.0",
10463 - "debug": "^4.3.4",
10979 + "debug": "^4.3.5",
10980 "fast-glob": "^3.3.2",
10981 "local-pkg": "^0.5.0",
10982 "magic-string": "^0.30.10",
10467 - "minimatch": "^9.0.4",
10468 - "resolve": "^1.22.8",
10983 + "minimatch": "^9.0.5",
10984 + "mlly": "^1.7.1",
10985 "unplugin": "^1.10.1"
10986 },
10987 "engines": {
@@ -10489,9 +11005,9 @@
11005 }
11006 },
11007 "node_modules/unplugin-vue-components/node_modules/minimatch": {
10492 - "version": "9.0.4",
10493 - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
10494 - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
11008 + "version": "9.0.5",
11009 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
11010 + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
11011 "dev": true,
11012 "dependencies": {
11013 "brace-expansion": "^2.0.1"
@@ -10617,9 +11133,9 @@
11133 }
11134 },
11135 "node_modules/vite": {
10620 - "version": "5.3.1",
10621 - "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.1.tgz",
10622 - "integrity": "sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==",
11136 + "version": "5.3.2",
11137 + "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.2.tgz",
11138 + "integrity": "sha512-6lA7OBHBlXUxiJxbO5aAY2fsHHzDr1q7DvXYnyZycRs2Dz+dXBWuhpWHvmljTRTpQC2uvGmUFFkSHF2vGo90MA==",
11139 "dev": true,
11140 "dependencies": {
11141 "esbuild": "^0.21.3",
@@ -11212,15 +11728,15 @@
11728 "dev": true
11729 },
11730 "node_modules/vue": {
11215 - "version": "3.4.30",
11216 - "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.30.tgz",
11217 - "integrity": "sha512-NcxtKCwkdf1zPsr7Y8+QlDBCGqxvjLXF2EX+yi76rV5rrz90Y6gK1cq0olIhdWGgrlhs9ElHuhi9t3+W5sG5Xw==",
11731 + "version": "3.4.31",
11732 + "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.31.tgz",
11733 + "integrity": "sha512-njqRrOy7W3YLAlVqSKpBebtZpDVg21FPoaq1I7f/+qqBThK9ChAIjkRWgeP6Eat+8C+iia4P3OYqpATP21BCoQ==",
11734 "dependencies": {
11219 - "@vue/compiler-dom": "3.4.30",
11220 - "@vue/compiler-sfc": "3.4.30",
11221 - "@vue/runtime-dom": "3.4.30",
11222 - "@vue/server-renderer": "3.4.30",
11223 - "@vue/shared": "3.4.30"
11735 + "@vue/compiler-dom": "3.4.31",
11736 + "@vue/compiler-sfc": "3.4.31",
11737 + "@vue/runtime-dom": "3.4.31",
11738 + "@vue/server-renderer": "3.4.31",
11739 + "@vue/shared": "3.4.31"
11740 },
11741 "peerDependencies": {
11742 "typescript": "*"
@@ -11249,9 +11765,9 @@
11765 }
11766 },
11767 "node_modules/vue-component-type-helpers": {
11252 - "version": "2.0.21",
11253 - "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.0.21.tgz",
11254 - "integrity": "sha512-3NaicyZ7N4B6cft4bfb7dOnPbE9CjLcx+6wZWAg5zwszfO4qXRh+U52dN5r5ZZfc6iMaxKCEcoH9CmxxoFZHLg==",
11768 + "version": "2.0.22",
11769 + "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.0.22.tgz",
11770 + "integrity": "sha512-gPr2Ba7efUwy/Vfbuf735bHSVdN4ycoZUCHfypkI33M9DUH+ieRblLLVM2eImccFYaWNWwEzURx02EgoXDBmaQ==",
11771 "dev": true
11772 },
11773 "node_modules/vue-eslint-parser": {
@@ -11827,9 +12343,9 @@
12343 }
12344 },
12345 "node_modules/zrender": {
11830 - "version": "5.5.0",
11831 - "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.5.0.tgz",
11832 - "integrity": "sha512-O3MilSi/9mwoovx77m6ROZM7sXShR/O/JIanvzTwjN3FORfLSr81PsUGd7jlaYOeds9d8tw82oP44+3YucVo+w==",
12346 + "version": "5.6.0",
12347 + "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.6.0.tgz",
12348 + "integrity": "sha512-uzgraf4njmmHAbEUxMJ8Oxg+P3fT04O+9p7gY+wJRVxo8Ge+KmYv0WJev945EH4wFuc4OY2NLXz46FZrWS9xJg==",
12349 "dependencies": {
12350 "tslib": "2.3.0"
12351 }
frontend/package.json
+11 -11
@@ -36,19 +36,19 @@
36 "@fontsource/lexend": "^5.0.20",
37 "@fontsource/public-sans": "^5.0.18",
38 "@popperjs/core": "^2.11.8",
39 - "@shikijs/markdown-it": "^1.9.0",
39 + "@shikijs/markdown-it": "^1.9.1",
40 "@vueuse/components": "^10.11.0",
41 "@vueuse/core": "^10.11.0",
42 - "apexcharts": "^3.49.1",
42 + "apexcharts": "^3.49.2",
43 "bytes": "^3.1.2",
44 "colord": "^2.9.3",
45 "crypto-js": "^4.2.0",
46 "dayjs": "^1.11.11",
47 "detect-touch-device": "^1.1.6",
48 - "echarts": "^5.5.0",
48 + "echarts": "^5.5.1",
49 "file-saver": "^2.0.5",
50 "html-entities": "^2.5.2",
51 - "jose": "^5.4.1",
51 + "jose": "^5.6.2",
52 "js-md5": "^0.8.3",
53 "lodash": "^4.17.21",
54 "mitt": "^3.0.1",
@@ -57,9 +57,9 @@
57 "pinia": "^2.1.7",
58 "pinia-plugin-persistedstate": "^3.2.1",
59 "secure-ls": "^2.0.0",
60 - "shiki": "^1.9.0",
60 + "shiki": "^1.9.1",
61 "validator": "^13.12.0",
62 - "vue": "^3.4.30",
62 + "vue": "^3.4.31",
63 "vue-advanced-cropper": "^2.8.9",
64 "vue-highlight-words": "^3.0.1",
65 "vue-i18n": "^9.13.1",
@@ -78,8 +78,8 @@
78 "@types/fs-extra": "^11.0.4",
79 "@types/inquirer": "^9.0.7",
80 "@types/jsdom": "^21.1.7",
81 - "@types/lodash": "^4.17.5",
82 - "@types/node": "^20.14.8",
81 + "@types/lodash": "^4.17.6",
82 + "@types/node": "^20.14.9",
83 "@types/validator": "^13.12.0",
84 "@vitejs/plugin-vue": "^5.0.5",
85 "@vitejs/plugin-vue-jsx": "^4.0.0",
@@ -105,10 +105,10 @@
105 "start-server-and-test": "^2.0.4",
106 "tailwind-config-viewer": "^2.0.4",
107 "tailwindcss": "^3.4.4",
108 - "taze": "^0.13.8",
108 + "taze": "^0.13.9",
109 "type-fest": "^4.20.1",
110 - "unplugin-vue-components": "^0.27.0",
111 - "vite": "^5.3.1",
110 + "unplugin-vue-components": "^0.27.2",
111 + "vite": "^5.3.2",
112 "vite-bundle-analyzer": "^0.10.3",
113 "vite-bundle-visualizer": "^1.2.1",
114 "vite-plugin-vue-devtools": "^7.3.4",
frontend/src/api/threatIntel.ts
+10 -1
@@ -1,6 +1,6 @@
1 import { HttpClient } from "./httpClient"
2 import type { FlaskBaseResponse } from "@/types/flask.d"
3 -import type { EvaluationData, ThreatIntelResponse } from "@/types/threatIntel.d"
3 +import type { EpssScore, EvaluationData, ThreatIntelResponse } from "@/types/threatIntel.d"
4
5 export default {
6 create(iocValue: string) {
@@ -14,5 +14,14 @@ export default {
14 process_name: processName
15 }
16 return HttpClient.post<FlaskBaseResponse & { data: EvaluationData }>(`/threat_intel/process_name`, body)
17 + },
18 + epssScore(cve: string) {
19 + const body = {
20 + cve
21 + }
22 + return HttpClient.post<FlaskBaseResponse & { data: EpssScore[]; the_epss_model: string }>(
23 + `/threat_intel/epss`,
24 + body
25 + )
26 }
27 }
frontend/src/components/agents/vulnerabilities/VulnerabilityCard.vue
+6
@@ -86,6 +86,11 @@
86 </ul>
87 </div>
88 </n-tab-pane>
89 + <n-tab-pane name="EPSS Score" tab="EPSS Score" display-directive="show:lazy">
90 + <div class="p-7 pt-2">
91 + <VulnerabilityEpss :cve="vulnerability.cve" />
92 + </div>
93 + </n-tab-pane>
94 </n-tabs>
95 </n-modal>
96 </div>
@@ -101,6 +106,7 @@ import Icon from "@/components/common/Icon.vue"
106 import KVCard from "@/components/common/KVCard.vue"
107 import { useSettingsStore } from "@/stores/settings"
108 import _truncate from "lodash/truncate"
109 +import VulnerabilityEpss from "./VulnerabilityEpss.vue"
110
111 const props = defineProps<{
112 vulnerability: AgentVulnerabilities
frontend/src/components/agents/vulnerabilities/VulnerabilityEpss.vue new
+103
@@ -0,0 +1,103 @@
1 +<template>
2 + <n-spin :show="loading" content-class="min-h-32">
3 + <div class="mb-4">
4 + <KVCard>
5 + <template #key>cve</template>
6 + <template #value>{{ cve }}</template>
7 + </KVCard>
8 + </div>
9 + <div class="flex flex-col gap-3" v-if="epssList.length">
10 + <n-card
11 + content-class="bg-secondary-color"
12 + class="overflow-hidden item-appear item-appear-bottom item-appear-005"
13 + v-for="item of epssList"
14 + :key="item.___id"
15 + >
16 + <div class="flex justify-between gap-8 xs:!flex-row flex-col">
17 + <n-statistic class="grow" label="Date">
18 + <span class="stats-value whitespace-nowrap">
19 + {{ formatDate(item.date, dFormats.date) }}
20 + </span>
21 + </n-statistic>
22 + <n-statistic class="grow" label="EPSS">
23 + <span class="stats-value">
24 + {{ item.epss }}
25 + </span>
26 + </n-statistic>
27 + <n-statistic class="grow" label="Percentile">
28 + <span class="stats-value">
29 + {{ item.percentile }}
30 + </span>
31 + </n-statistic>
32 + </div>
33 + </n-card>
34 + <p v-if="epssModelLink" class="w-full text-right">
35 + EPSS Model:
36 + <a :href="epssModelLink" target="_blank">{{ epssModelLink }}</a>
37 + </p>
38 + </div>
39 + <template v-else>
40 + <n-empty description="No items found" class="justify-center h-48" v-if="!loading" />
41 + </template>
42 + </n-spin>
43 +</template>
44 +
45 +<script setup lang="ts">
46 +import { ref, onBeforeMount } from "vue"
47 +import { useMessage, NSpin, NEmpty, NCard, NStatistic } from "naive-ui"
48 +import Api from "@/api"
49 +import type { EpssScore } from "@/types/threatIntel.d"
50 +import { formatDate } from "@/utils"
51 +import KVCard from "@/components/common/KVCard.vue"
52 +import { nanoid } from "nanoid"
53 +import { useSettingsStore } from "@/stores/settings"
54 +
55 +interface EpssScoreExt extends EpssScore {
56 + ___id?: string
57 +}
58 +
59 +const { cve } = defineProps<{
60 + cve: string
61 +}>()
62 +
63 +const dFormats = useSettingsStore().dateFormat
64 +const message = useMessage()
65 +const loading = ref(false)
66 +const epssList = ref<EpssScoreExt[]>([])
67 +const epssModelLink = ref<string | null>(null)
68 +
69 +function getData() {
70 + loading.value = true
71 +
72 + Api.threatIntel
73 + .epssScore(cve)
74 + .then(res => {
75 + if (res.data.success) {
76 + epssList.value = ((res.data.data as EpssScoreExt[]) || []).map(o => {
77 + o.___id = nanoid()
78 + return o
79 + })
80 + epssModelLink.value = res.data.the_epss_model
81 + } else {
82 + message.warning(res.data?.message || "An error occurred. Please try again later.")
83 + }
84 + })
85 + .catch(err => {
86 + message.error(err.response?.data?.message || "An error occurred. Please try again later.")
87 + })
88 + .finally(() => {
89 + loading.value = false
90 + })
91 +}
92 +
93 +onBeforeMount(() => {
94 + getData()
95 +})
96 +</script>
97 +
98 +<style lang="scss" scoped>
99 +.stats-value {
100 + font-family: var(--font-family-mono);
101 + font-size: clamp(18px, 2.3vw, var(--n-value-font-size));
102 +}
103 +</style>
frontend/src/components/common/CardStatsIcon.vue
+1 -1
@@ -27,7 +27,7 @@ const { boxed, boxSize, iconSize, iconName, color } = toRefs(props)
27
28 const style = computed(() => useThemeStore().style)
29
30 -const iconColor = computed(() => color?.value || style.value["--primary-color"])
30 +const iconColor = computed(() => color?.value || style.value["primary-color"])
31 const iconBoxedSize = computed(() => (boxSize.value / 100) * 45)
32 const iconFinalSize = computed(() => (boxed?.value ? iconBoxedSize.value : iconSize.value))
33 </script>
frontend/src/components/common/ListPercentage.vue
+3 -3
@@ -17,9 +17,9 @@
17 type="line"
18 :percentage="parseInt(item[percentageKey as keyof typeof item], 10)"
19 :indicator-placement="'inside'"
20 - :indicator-text-color="style['--bg-color']"
21 - :color="style['--fg-color']"
22 - :rail-color="style['--divider-020-color']"
20 + :indicator-text-color="style['bg-color']"
21 + :color="style['fg-color']"
22 + :rail-color="style['divider-020-color']"
23 class="font-mono font-bold"
24 />
25 </div>
frontend/src/components/graylog/Metrics/UncommittedEntries.vue
+2 -2
@@ -94,7 +94,7 @@ function getOptions() {
94 xaxis: {
95 type: "datetime"
96 },
97 - colors: [style.value["--primary-color"]],
97 + colors: [style.value["primary-color"]],
98 tooltip: {
99 x: {
100 formatter: (time: number) => {
@@ -107,7 +107,7 @@ function getOptions() {
107 }
108 },
109 style: {
110 - fontFamily: style.value["--font-family-mono"]
110 + fontFamily: style.value["font-family-mono"]
111 },
112 theme: isThemeDark.value ? "dark" : "light"
113 }
frontend/src/components/indices/Marquee.vue
+1 -1
@@ -58,7 +58,7 @@ watch(indices, val => {
58
59 const message = useMessage()
60 const style = computed(() => useThemeStore().style)
61 -const gradientColor = computed(() => style.value["--bg-color-rgb"].split(", "))
61 +const gradientColor = computed(() => style.value["bg-color-rgb"].split(", "))
62 const loading = computed(() => !list?.value || list.value === null)
63
64 function getIndices() {
frontend/src/components/indices/TopIndices.vue
+9 -9
@@ -63,10 +63,10 @@ function getOptions() {
63 left: "left",
64 type: "scroll",
65 textStyle: {
66 - color: style.value["--fg-color"]
66 + color: style.value["fg-color"]
67 },
68 pageTextStyle: {
69 - color: style.value["--fg-color"]
69 + color: style.value["fg-color"]
70 }
71 },
72 grid: {
@@ -86,13 +86,13 @@ function getOptions() {
86 show: false
87 },
88 itemStyle: {
89 - borderColor: style.value["--bg-color"],
89 + borderColor: style.value["bg-color"],
90 borderWidth: 2
91 },
92 data: [
93 - { value: green, name: "Green", itemStyle: { color: style.value["--success-color"] } },
94 - { value: yellow, name: "Yellow", itemStyle: { color: style.value["--warning-color"] } },
95 - { value: red, name: "Red", itemStyle: { color: style.value["--error-color"] } }
93 + { value: green, name: "Green", itemStyle: { color: style.value["success-color"] } },
94 + { value: yellow, name: "Yellow", itemStyle: { color: style.value["warning-color"] } },
95 + { value: red, name: "Red", itemStyle: { color: style.value["error-color"] } }
96 ]
97 },
98 {
@@ -139,13 +139,13 @@ function getOptions() {
139 //alignTo: "edge",
140 rich: {
141 name: {
142 - color: style.value["--fg-color"],
142 + color: style.value["fg-color"],
143 fontSize: window.innerWidth > 1000 ? 13 : 11
144 },
145 per: {
146 fontSize: window.innerWidth > 1000 ? 13 : 11,
147 fontWeight: "bold",
148 - color: style.value["--fg-color"]
148 + color: style.value["fg-color"]
149 }
150 }
151 },
@@ -165,7 +165,7 @@ function getOptions() {
165 }
166 },
167 itemStyle: {
168 - borderColor: style.value["--bg-color"],
168 + borderColor: style.value["bg-color"],
169 borderWidth: 1
170 },
171 data: sizeData
frontend/src/components/overview/HealthcheckCard.vue
+1 -1
@@ -16,7 +16,7 @@
16 :iconName="HealthcheckIcon"
17 boxed
18 :boxSize="30"
19 - :color="criticalTotal ? style['--warning-color'] : undefined"
19 + :color="criticalTotal ? style['warning-color'] : undefined"
20 ></CardStatsIcon>
21 </template>
22 </CardStatsDouble>
frontend/src/layouts/common/FooterEL.vue
+1 -1
@@ -3,7 +3,7 @@
3 <div class="wrap flex items-center justify-end gap-3">
4 <div class="copy">
5 Made with
6 - <Icon :size="22" :color="style['--primary-color']" class="mx-1">
6 + <Icon :size="22" :color="style['primary-color']" class="mx-1">
7 <BrainIcon />
8 </Icon>
9 By
frontend/src/layouts/common/Provider.vue
+1 -1
@@ -66,7 +66,7 @@ function setGlobalVars() {
66 const html = document.children[0] as HTMLElement
67 const { style: htmlStyle } = html
68 for (const key in style.value) {
69 - htmlStyle.setProperty(key, style.value[key])
69 + htmlStyle.setProperty("--" + key, style.value[key])
70 }
71 }
72
frontend/src/layouts/common/Toolbar/PinnedPages.vue
+37 -14
@@ -20,28 +20,36 @@
20 </n-tag>
21 </TransitionGroup>
22
23 - <Transition name="anim" tag="div" class="flex items-center">
23 + <Transition name="anim" tag="div" class="flex items-center shortcuts-container">
24 <div v-if="pinned.length" class="flex items-center">
25 - <n-popover :show-arrow="false" placement="bottom-end" trigger="hover">
25 + <n-popover :show-arrow="false" placement="bottom-end" trigger="hover" class="!p-1">
26 <template #trigger>
27 <n-button size="small" class="!h-8">
28 <span class="flex items-center gap-3">
29 Shortcuts
30 - <n-badge :value="pinned.length" :color="style['--divider-030-color']" />
30 + <n-badge :value="pinned.length" :color="style['divider-030-color']" />
31 </span>
32 </n-button>
33 </template>
34 - <div class="flex flex-col gap-3 py-2 pr-1">
35 - <div class="flex gap-2 items-center" v-for="page of pinned" :key="page.name">
36 - <n-button size="small" text @click="removePinnedPage(page.name)">
37 - <template #icon>
38 - <Icon :size="20" :name="CloseIcon" class="opacity-55"></Icon>
39 - </template>
40 - </n-button>
41 - <n-button size="small" text @click="gotoPage(page.name)" :title="page.title">
42 - {{ page.title }}
43 - </n-button>
44 - </div>
34 + <div class="flex flex-col">
35 + <n-button
36 + size="small"
37 + quaternary
38 + @click="gotoPage(page.name)"
39 + v-for="page of pinned"
40 + :key="page.name"
41 + class="!justify-start"
42 + >
43 + <template #icon>
44 + <Icon
45 + :size="20"
46 + :name="CloseIcon"
47 + class="opacity-50 hover:text-red-500 hover:opacity-100"
48 + @click.stop="removePinnedPage(page.name)"
49 + ></Icon>
50 + </template>
51 + {{ page.title }}
52 + </n-button>
53 </div>
54 </n-popover>
55 </div>
@@ -126,6 +134,9 @@ router.afterEach(route => {
134 position: relative;
135 overflow: hidden;
136 padding: 8px 0;
137 + container-type: inline-size;
138 + justify-content: flex-end;
139 + width: 100%;
140
141 :deep() {
142 .n-tag {
@@ -207,5 +218,17 @@ router.afterEach(route => {
218 .anim-leave-active {
219 position: absolute;
220 }
221 +
222 + @container (max-width: 460px) {
223 + .latest-list {
224 + display: none;
225 + }
226 + }
227 +
228 + @container (max-width: 140px) {
229 + .shortcuts-container {
230 + display: none;
231 + }
232 + }
233 }
234 </style>
frontend/src/stores/theme.ts
+90 -90
@@ -362,96 +362,96 @@ export const useThemeStore = defineStore("theme", {
362 const secondary4RGB = hex2rgb(secondary4).join(", ")
363
364 return {
365 - "--bg-sidebar": `${bgSidebar}`,
366 - "--bg-body": `${bgBody}`,
367 - "--bg-body-rgb": `${bgBodyRGB}`,
368 -
369 - "--fg-color": `${fgColor}`,
370 - "--fg-secondary-color": `${fgSecondaryColor}`,
371 - "--bg-color": `${bgColor}`,
372 - "--bg-secondary-color": `${bgSecondaryColor}`,
373 - "--bg-color-rgb": `${bgColorRGB}`,
374 -
375 - "--border-color": `${borderColor}`,
376 - "--bezier-ease": `${bezierEase}`,
377 - "--router-transition-duration": `${routerTransitionDuration}s`,
378 - "--sidebar-anim-ease": `${sidebarAnimEase}`,
379 - "--sidebar-anim-duration": `${sidebarAnimDuration}s`,
380 - "--sidebar-open-width": `${sidebarOpenWidth}px`,
381 - "--sidebar-close-width": `${sidebarCloseWidth}px`,
382 - "--boxed-width": `${boxedWidth}px`,
383 - "--toolbar-height": `${toolbarHeight}px`,
384 - "--header-bar-height": `${headerBarHeight}px`,
385 - "--view-padding": `${viewPadding}px`,
386 - "--border-radius": `${borderRadius}`,
387 - "--border-radius-small": `${borderRadiusSmall}`,
388 - "--font-family": `${fontFamily}`,
389 - "--font-family-display": `${fontFamilyDisplay}`,
390 - "--font-family-mono": `${fontFamilyMono}`,
391 - "--code-color": `${codeColor}`,
392 - "--primary-color": `${primaryColor}`,
393 - "--tab-color": `${tabColor}`,
394 - "--tab-color-active": `${tabColorActive}`,
395 - "--tab-fg-color-active": `${tabFgColorActive}`,
396 - "--modal-color": `${modalColor}`,
397 - "--modal-color-rgb": `${modalColorRGB}`,
398 -
399 - "--button-color-secondary": `${buttonColorSecondary}`,
400 - "--button-color-secondary-hover": `${buttonColorSecondaryHover}`,
401 - "--button-color-secondary-pressed": `${buttonColorSecondaryPressed}`,
402 -
403 - "--primary-005-color": `${primary005}`,
404 - "--primary-010-color": `${primary010}`,
405 - "--primary-015-color": `${primary015}`,
406 - "--primary-020-color": `${primary020}`,
407 - "--primary-030-color": `${primary030}`,
408 - "--primary-040-color": `${primary040}`,
409 - "--primary-050-color": `${primary050}`,
410 - "--primary-060-color": `${primary060}`,
411 -
412 - "--hover-005-color": `${hover005}`,
413 - "--hover-010-color": `${hover010}`,
414 - "--hover-050-color": `${hover050}`,
415 -
416 - "--divider-005-color": `${divider005}`,
417 - "--divider-010-color": `${divider010}`,
418 - "--divider-020-color": `${divider020}`,
419 - "--divider-030-color": `${divider030}`,
420 -
421 - "--success-color": `${successColor}`,
422 - "--error-color": `${errorColor}`,
423 - "--warning-color": `${warningColor}`,
424 - "--info-color": `${infoColor}`,
425 - "--success-005-color": `${success005}`,
426 - "--error-005-color": `${error005}`,
427 - "--warning-005-color": `${warning005}`,
428 - "--info-005-color": `${info005}`,
429 -
430 - "--secondary1-color": `${secondary1}`,
431 - "--secondary1-color-rgb": `${secondary1RGB}`,
432 - "--secondary2-color": `${secondary2}`,
433 - "--secondary2-color-rgb": `${secondary2RGB}`,
434 - "--secondary3-color": `${secondary3}`,
435 - "--secondary3-color-rgb": `${secondary3RGB}`,
436 - "--secondary4-color": `${secondary4}`,
437 - "--secondary4-color-rgb": `${secondary4RGB}`,
438 -
439 - "--secondary1-opacity-005-color": `${secondary1Opacity005}`,
440 - "--secondary1-opacity-010-color": `${secondary1Opacity010}`,
441 - "--secondary1-opacity-020-color": `${secondary1Opacity020}`,
442 - "--secondary1-opacity-030-color": `${secondary1Opacity030}`,
443 - "--secondary2-opacity-005-color": `${secondary2Opacity005}`,
444 - "--secondary2-opacity-010-color": `${secondary2Opacity010}`,
445 - "--secondary2-opacity-020-color": `${secondary2Opacity020}`,
446 - "--secondary2-opacity-030-color": `${secondary2Opacity030}`,
447 - "--secondary3-opacity-005-color": `${secondary3Opacity005}`,
448 - "--secondary3-opacity-010-color": `${secondary3Opacity010}`,
449 - "--secondary3-opacity-020-color": `${secondary3Opacity020}`,
450 - "--secondary3-opacity-030-color": `${secondary3Opacity030}`,
451 - "--secondary4-opacity-005-color": `${secondary4Opacity005}`,
452 - "--secondary4-opacity-010-color": `${secondary4Opacity010}`,
453 - "--secondary4-opacity-020-color": `${secondary4Opacity020}`,
454 - "--secondary4-opacity-030-color": `${secondary4Opacity030}`
365 + "bg-sidebar": `${bgSidebar}`,
366 + "bg-body": `${bgBody}`,
367 + "bg-body-rgb": `${bgBodyRGB}`,
368 +
369 + "fg-color": `${fgColor}`,
370 + "fg-secondary-color": `${fgSecondaryColor}`,
371 + "bg-color": `${bgColor}`,
372 + "bg-secondary-color": `${bgSecondaryColor}`,
373 + "bg-color-rgb": `${bgColorRGB}`,
374 +
375 + "border-color": `${borderColor}`,
376 + "bezier-ease": `${bezierEase}`,
377 + "router-transition-duration": `${routerTransitionDuration}s`,
378 + "sidebar-anim-ease": `${sidebarAnimEase}`,
379 + "sidebar-anim-duration": `${sidebarAnimDuration}s`,
380 + "sidebar-open-width": `${sidebarOpenWidth}px`,
381 + "sidebar-close-width": `${sidebarCloseWidth}px`,
382 + "boxed-width": `${boxedWidth}px`,
383 + "toolbar-height": `${toolbarHeight}px`,
384 + "header-bar-height": `${headerBarHeight}px`,
385 + "view-padding": `${viewPadding}px`,
386 + "border-radius": `${borderRadius}`,
387 + "border-radius-small": `${borderRadiusSmall}`,
388 + "font-family": `${fontFamily}`,
389 + "font-family-display": `${fontFamilyDisplay}`,
390 + "font-family-mono": `${fontFamilyMono}`,
391 + "code-color": `${codeColor}`,
392 + "primary-color": `${primaryColor}`,
393 + "tab-color": `${tabColor}`,
394 + "tab-color-active": `${tabColorActive}`,
395 + "tab-fg-color-active": `${tabFgColorActive}`,
396 + "modal-color": `${modalColor}`,
397 + "modal-color-rgb": `${modalColorRGB}`,
398 +
399 + "button-color-secondary": `${buttonColorSecondary}`,
400 + "button-color-secondary-hover": `${buttonColorSecondaryHover}`,
401 + "button-color-secondary-pressed": `${buttonColorSecondaryPressed}`,
402 +
403 + "primary-005-color": `${primary005}`,
404 + "primary-010-color": `${primary010}`,
405 + "primary-015-color": `${primary015}`,
406 + "primary-020-color": `${primary020}`,
407 + "primary-030-color": `${primary030}`,
408 + "primary-040-color": `${primary040}`,
409 + "primary-050-color": `${primary050}`,
410 + "primary-060-color": `${primary060}`,
411 +
412 + "hover-005-color": `${hover005}`,
413 + "hover-010-color": `${hover010}`,
414 + "hover-050-color": `${hover050}`,
415 +
416 + "divider-005-color": `${divider005}`,
417 + "divider-010-color": `${divider010}`,
418 + "divider-020-color": `${divider020}`,
419 + "divider-030-color": `${divider030}`,
420 +
421 + "success-color": `${successColor}`,
422 + "error-color": `${errorColor}`,
423 + "warning-color": `${warningColor}`,
424 + "info-color": `${infoColor}`,
425 + "success-005-color": `${success005}`,
426 + "error-005-color": `${error005}`,
427 + "warning-005-color": `${warning005}`,
428 + "info-005-color": `${info005}`,
429 +
430 + "secondary1-color": `${secondary1}`,
431 + "secondary1-color-rgb": `${secondary1RGB}`,
432 + "secondary2-color": `${secondary2}`,
433 + "secondary2-color-rgb": `${secondary2RGB}`,
434 + "secondary3-color": `${secondary3}`,
435 + "secondary3-color-rgb": `${secondary3RGB}`,
436 + "secondary4-color": `${secondary4}`,
437 + "secondary4-color-rgb": `${secondary4RGB}`,
438 +
439 + "secondary1-opacity-005-color": `${secondary1Opacity005}`,
440 + "secondary1-opacity-010-color": `${secondary1Opacity010}`,
441 + "secondary1-opacity-020-color": `${secondary1Opacity020}`,
442 + "secondary1-opacity-030-color": `${secondary1Opacity030}`,
443 + "secondary2-opacity-005-color": `${secondary2Opacity005}`,
444 + "secondary2-opacity-010-color": `${secondary2Opacity010}`,
445 + "secondary2-opacity-020-color": `${secondary2Opacity020}`,
446 + "secondary2-opacity-030-color": `${secondary2Opacity030}`,
447 + "secondary3-opacity-005-color": `${secondary3Opacity005}`,
448 + "secondary3-opacity-010-color": `${secondary3Opacity010}`,
449 + "secondary3-opacity-020-color": `${secondary3Opacity020}`,
450 + "secondary3-opacity-030-color": `${secondary3Opacity030}`,
451 + "secondary4-opacity-005-color": `${secondary4Opacity005}`,
452 + "secondary4-opacity-010-color": `${secondary4Opacity010}`,
453 + "secondary4-opacity-020-color": `${secondary4Opacity020}`,
454 + "secondary4-opacity-030-color": `${secondary4Opacity030}`
455 }
456 },
457 isThemeDark(state): boolean {
frontend/src/types/threatIntel.d.ts
+10
@@ -9,6 +9,16 @@ export interface ThreatIntelResponse {
9 virustotal_url: string | null
10 }
11
12 +export interface EpssScore {
13 + cve: string
14 + /** a float (0.000680000) */
15 + epss: string
16 + /** a float (0.299330000) */
17 + percentile: string
18 + /** a date (2024-06-27) */
19 + date: string | Date
20 +}
21 +
22 export interface EvaluationData {
23 rank: number
24 host_prev: string