From 308deb95e05ce21382a270216d52bb949955dd93 Mon Sep 17 00:00:00 2001 From: Bastien Wirtz Date: Sun, 17 Aug 2025 17:26:37 +0200 Subject: [PATCH 01/52] fix(dev-server): fix unparsable dummy-data fson file --- vite.config.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/vite.config.js b/vite.config.js index c8008a4..9da0c62 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,5 +1,8 @@ import { VitePWA } from "vite-plugin-pwa"; import { fileURLToPath, URL } from "url"; +import fs from "fs"; +import path from "path"; +import process from "process"; import { defineConfig } from "vite"; import vue from "@vitejs/plugin-vue"; @@ -11,6 +14,25 @@ export default defineConfig({ assetsDir: "resources", }, plugins: [ + // Custom plugin to serve dummy-data JSON files without sourcemap injection + { + name: "dummy-data-json-handler", + configureServer(server) { + server.middlewares.use((req, res, next) => { + if (req.url?.startsWith("/dummy-data/")) { + // Remove query parameters from URL to get the actual file path + const urlWithoutQuery = req.url.split("?")[0]; + const filePath = path.join(process.cwd(), urlWithoutQuery); + + if (fs.existsSync(filePath) && fs.statSync(filePath).isFile()) { + res.end(fs.readFileSync(filePath, "utf8")); + return; + } + } + next(); + }); + }, + }, vue(), VitePWA({ registerType: "autoUpdate", From 2046d8d30caba66f4daaa4b645b97af94fe93883 Mon Sep 17 00:00:00 2001 From: Bastien Wirtz Date: Mon, 15 Sep 2025 14:34:14 +0200 Subject: [PATCH 02/52] Update FUNDING.yml --- .github/FUNDING.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 36e6b30..d2ccc03 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,3 +1,6 @@ # These are supported funding model platforms -custom: ['https://www.buymeacoffee.com/bastien'] +# These are supported funding model platforms + +github: [bastienwirtz] +buy_me_a_coffee: bastien From da3203584129fd47d2d2efe414d9ed3b83c8166f Mon Sep 17 00:00:00 2001 From: Bastien Wirtz Date: Fri, 19 Sep 2025 21:29:09 +0200 Subject: [PATCH 03/52] doc: improve smart card documentation. --- docs/customservices.md | 532 ++++++++++++++++++++-------------------- docs/troubleshooting.md | 2 +- 2 files changed, 268 insertions(+), 266 deletions(-) diff --git a/docs/customservices.md b/docs/customservices.md index c1f0812..b8985e3 100644 --- a/docs/customservices.md +++ b/docs/customservices.md @@ -1,15 +1,16 @@ # Smart cards -Some cards can use a specific a component that provides some extra features by adding a `type` key to the service yaml -configuration and other parameters when needed. +Smart cards provide specific integrations for external services. They display additional information and extra features beyond basic service card. Smart cards are enabled by adding a `type` key to the service item in your YAML configuration. + +Each service integration has different requirements and may need additional configuration parameters (see card list below). > [!WARNING] -> Note that `config.yml` is exposed at `/assets/config.yml` via HTTP and any sensitive information, like api keys, -> included in the configuration file is exposed to anyone who can access the homer instance. Only include an api key -> if your homer instance is secured behind some form of authentication or access restriction. +> Your `config.yml` file is exposed at `/assets/config.yml` via HTTP. Any sensitive information (like API keys) +> in this file is visible to anyone who can access your Homer instance. Only include API keys if your Homer +> instance is protected by authentication or access controls **or use a proxy like [`CORSair`](https://github.com/bastienwirtz/corsair) +> to inject your credentials safely**, using environment variable on the server side. -Available services are in `src/components/`. Here is an overview of all smart cards that are available -within Homer: +Available services are located in `src/components/`: - [Common options](#common-options) - [AdGuard Home](#adguard-home) @@ -59,117 +60,132 @@ within Homer: - [What's Up Docker](#whats-up-docker) > [!IMPORTANT] -> Using smart cards, which interact with other services, will require either that: +> Smart cards that interact with external services are subject to CORS restrictions, therefore require one of the following: > -> - All services are exposed on the **same domain** as homer (mydomain.tld/pihole, mydomain.tld/proxmox), avoiding any cross domain request issues (CORS). -> - All services **accept cross site requests** (= send the necessary CORS headers, either set directly in the service configuration if possible, or using a proxy to set the headers) +> - All services hosted on the **same domain** as Homer (mydomain.tld/pihole, mydomain.tld/proxmox) to avoid cross-domain request entirely. +> - All services configured to **accept cross-site requests** by sending the necessary CORS headers (either directly in service configuration or via proxy). +> - **Use a proxy** to add the necessary CORS headers (lot of options, some of them described [here](https://enable-cors.org/server.html). Also check [`CORSair`](https://github.com/bastienwirtz/corsair), a light and simple solution) > -> If you experiencing any issue, please have a look to the [troubleshooting](troubleshooting.md#my-service-card-doesnt-work-nothing-appears-or-offline-status-is-displayed-pi-hole-sonarr-ping-) page. +> If you experience any issues, see the [troubleshooting](troubleshooting.md#my-service-card-doesnt-work-nothing-appears-or-offline-status-is-displayed-pi-hole-sonarr-ping-) page. ## Common options ```yaml - name: "My Service" - logo: "assets/tools/sample.png" - url: "http://my-service-link" - endpoint: "http://my-service-endpoint" # Optional: alternative base URL used to fetch service data is necessary. + type: "" + logo: "assets/tools/sample.png" # Optional + url: https://my-service.url # Optional: Card link and API base url unless 'endpoint' is provided (see below) + endpoint: https://my-service-api.url # Optional: alternative base URL used to fetch service data when necessary. useCredentials: false # Optional: Override global proxy.useCredentials configuration. headers: # Optional: Override global proxy.headers configuration. - type: "" ``` +If a subtitle is provided, (using the `subtitle` configuration key), **it will override (hide)** any custom information displayed on the subtitle line by the custom integration. + ## AdGuard Home -For AdGuard Home you need to set the type to AdGuard, if you have some issues as 403 responses on requests you need to provide authentication in headers for locations needed as below. +Displays AdGuard Home protection status and blocked query statistics. ```yaml -- name: "Adguard" - logo: "assets/tools/adguardhome.png" - url: "https://adguard.exemple.com" - target: "_blank" +- name: "AdGuard Home" type: "AdGuardHome" + logo: "assets/tools/sample.png" + url: https://my-service.url ``` +> **Note**: If AdGuard Home’s web user is password-protected, you must pass Authorization HTTP header along with all requests. It can be done using a proxy or adding the following to the item configuration: +> +> ```yaml +> headers: +> Authorization: "Basic " +> ``` + ## Copy to Clipboard -This service displays the same information of a generic one, but shows an icon button on the indicator place (right side) you can click to get the content of the `clipboard` field copied to your clipboard. - -You can still provide an `url` that would be open when clicked anywhere but on the icon button. - -Configuration example: +Displays a service card with a copy button that copies the specified text to your clipboard when clicked. ```yaml - name: "Copy me!" - logo: "assets/tools/sample.png" - subtitle: "Subtitle text goes here" - url: "#" type: "CopyToClipboard" + logo: "assets/tools/sample.png" + subtitle: "Click the copy icon to copy text" clipboard: "this text will be copied to your clipboard" + url: "https://optional-link.com" # optional: opens when clicking the card (not the copy button) ``` ## Docker Socket Proxy -This service display the number of running, stopped and containers that have errors. -It calls the API of DOcker Socket Proxy +Displays counts of running, stopped, and error containers from Docker Socket Proxy. ```yaml -- name: Docker +- name: "Docker" type: "DockerSocketProxy" - endpoint: "http://192.168.0.151:2375" + logo: "assets/tools/sample.png" + endpoint: "https://my-service-api.url:port" ``` ## Docuseal -This service displays a version string instead of a subtitle. Example configuration: +Displays the Docuseal version. ```yaml - name: Docuseal type: Docuseal - logo: assets/tools/sample.png - url: http://docuseal.example.com + logo: "assets/tools/sample.png" + url: https://my-service.url ``` ## Emby / Jellyfin -You need to set the type to Emby, provide an api key and choose which stats to show if the subtitle is disabled. +Displays stats from your Emby or Jellyfin server. +The `libraryType` configuration let you choose which stats to show. ```yaml - name: "Emby" - logo: "assets/tools/sample.png" - url: "http://192.168.0.151/" type: "Emby" + logo: "assets/tools/sample.png" + url: https://my-service.url apikey: "<---insert-api-key-here--->" - libraryType: "music" #Choose which stats to show. Can be one of: music, series or movies. + libraryType: "music" # Choose which stats to show. Can be one of: music, series or movies. ``` ## FreshRSS -The FreshRSS service displays unread and subscriptions counts from your FreshRSS server. +Displays unread article count and total subscriptions from your FreshRSS server. ```yaml - name: "FreshRSS" type: "FreshRSS" - username: "<-- Your username -->" - password: "<-- Your password -->" + url: https://my-service.url updateInterval: 5000 # (Optional) Interval (in ms) for updating the stats + username: "<---your-username--->" + password: "<---your-password--->" ``` ## Gitea / Forgejo -This service displays a version string instead of a subtitle. Example configuration: +Displays a Gitea / Forgejo version. ```yaml - name: Forgejo type: Gitea - logo: assets/tools/sample.png - url: http://git.example.com + logo: "assets/tools/sample.png" + url: https://my-service.url ``` ## Glances -This is a basic widget for showing cpu and ram usage using a glances server +Displays system metrics (CPU, memory, swap, load) from a Glances server. -You'll need a glances server up and running, this is a sample compose.yml +```yaml +- name: "System Metrics" + type: "Glances" + icon: "fa-solid fa-heart-pulse" + url: https://my-service.url + stats: [cpu, mem] # Options: load, cpu, mem, swap +``` + +If you don't already have a glances server up and running, here is a sample Docker compose file to get you started: ```yml --- @@ -185,139 +201,127 @@ services: restart: unless-stopped ``` -And this is a sample homer configuration - -```yml -- name: System - icon: "fa-solid fa-heart-pulse" - url: http://192.168.1.2:61208 - type: Glances - stats: [cpu, mem] # Metric to display. Possible values are: load, cpu, mem, swap. - updateInterval: 5000 # (Optional) Interval (in ms) for updating the stats -``` - ## Gotify -The Gotify service will show the number of currently oustanding messages -available as well as the overall health of the system. - -Note that `apikey` must be a client token, not an app token. +Displays the number of outstanding messages and system health status. ```yaml - name: "Gotify" type: "Gotify" - apikey: "" # Client token to retrieve messages + url: https://my-service.url + apikey: "<---insert-client-token-here--->" ``` +**API Token**: Use a **client token** (not an app token). + ## Healthchecks -This service displays information about the configured status checks from the Healthchecks application. -Two lines are needed in the config.yml : +Displays status counts (up/down/grace) from your Healthchecks monitoring service. ```yaml +- name: "Healthchecks" type: "Healthchecks" + url: https://my-service.url apikey: "<---insert-api-key-here--->" ``` -The url must be the root url of the Healthchecks application. -The Healthchecks API key can be found in Settings > API Access > API key (read-only). The key is needed to access Healthchecks API. +**API Key**: Found in Healthchecks web interface under **Settings > API Access > API key (read-only)**. ## Home Assistant -You need to set the type to HomeAssistant, provide an api key and enable cors on Home Assistant. +Displays Home Assistant instance status, version, location, and entity count. ```yaml -- name: "HomeAssistant" - logo: "assets/tools/sample.png" - url: "http://192.168.0.151/" +- name: "Home Assistant" type: "HomeAssistant" - apikey: "<---insert-api-key-here--->" - items: [] # optional, which items to show (and in which order) in the subtitle. Possible values are "name", "version", "entities" - separator: " " # optional, how to separate items + logo: "assets/tools/sample.png" + url: https://my-service.url + apikey: "<---insert-long-lived-access-token-here--->" + items: [] # optional: "name", "version", "entities" + separator: " " # optional ``` -To create an API token on HomeAssistant, follow the [official documentation here](https://developers.home-assistant.io/docs/auth_api/#long-lived-access-token). -To enable cors on HomeAssistant, edit your `configuration.yml` and add the IP of Homer to `https: cors_allowed_origins` +**API Token**: Create a long-lived access token in Home Assistant: +1. Go to **Profile > Security > Long-lived access tokens** +2. Click **Create Token** + +**CORS Configuration**: Edit Home Assistant `configuration.yml` and add Homer's IP: +```yaml +http: + cors_allowed_origins: + - "http://homer.local:8080" + - "https://your-homer-domain.com" +``` ## Immich -The Immich service displays stats from your Immich server. -The Immich server must be running at least version 1.118.0 for the correct api endpoint to work. +Displays user count, photo/video counts, and storage usage from your Immich server. ```yaml - name: "Immich" type: "Immich" - apikey: "<--- Your api key --->" # administrator user - updateInterval: 5000 # (Optional) Interval (in ms) for updating the stats + logo: "assets/tools/sample.png" + url: https://my-service.url + apikey: "<---insert-api-key-here--->" ``` +**Requirements**: Immich server version `1.118.0` or later +**API Key**: Create an API key in Immich web interface under **Administration > API Keys** + ## Jellystat -The Jellystat service display the number of concurrent streams on your jellyfin server. -The Jellystat server must be running behind a reverse proxy to add some cors headers: - -- Access-Control-Allow-Origin: ${your_domain} -- Access-Control-Allow-Headers: Authorization +Display the number of concurrent streams on your jellyfin server. ```yaml - name: "Jellystat" - logo: "assets/tools/jellystat.png" - url: "http://192.168.1.154:3000" type: "Jellystat" + logo: "assets/tools/sample.png" + url: https://my-service.url apikey: "<---insert-api-key-here--->" ``` -You can create an API key in the dashboard of you jellystat server: settings/API Keys -> Add Key +**API Key**: You can create an API key in the dashboard of you jellystat server: settings/API Keys -> Add Key + ## Lidarr, Prowlarr, Sonarr, Readarr and Radarr -This service displays Activity (blue), Missing(purple) Warning (orange) or Error (red) notifications bubbles from the Lidarr, Readarr, Radarr or Sonarr application. -Two lines are needed in the config.yml : +Displays Activity (blue), Missing (purple) Warning (orange) or Error (red) notifications bubbles from the Lidarr, Readarr, Radarr or Sonarr application. +Two lines are needed in the `config.yml`: ```yaml - type: "Lidarr", "Prowlarr", "Radarr" or "Sonarr" - apikey: "<---insert-api-key-here--->" +- name: "Lidarr" + type: "Lidarr" # "Lidarr" "Prowlarr", "Radarr" or "Sonarr" + logo: "assets/tools/sample.png" + url: https://my-service.url checkInterval: 5000 # (Optional) Interval (in ms) for updating the status + apikey: "<---insert-api-key-here--->" ``` The url must be the root url of Lidarr, Prowlarr, Readarr, Radarr or Sonarr application. -The Lidarr, Prowlarr, Readarr, Radarr or Sonarr API key can be found in Settings > General. It is needed to access the API. -If you are using an older version of Radarr or Sonarr which don't support the new V3 api endpoints, add the following line to your service config "legacyApi: true", example: -```yaml -- name: "Radarr" - type: "Radarr" - url: "http://localhost:7878/" - apikey: "<---insert-api-key-here--->" - target: "_blank" - legacyApi: true -``` +**API Key**: The Lidarr, Prowlarr, Readarr, Radarr or Sonarr API key can be found in `Settings` > `General`. It is needed to access the API. + +> [!IMPORTANT] +> **Radarr API V3 support**: If you are using an older version of Radarr or Sonarr which don't support the new V3 api endpoints, add the following line to your service config `"legacyApi: true"` ## Linkding This integration makes it possible to query Linkding and list multiple results from Linkding. Linkding has to be configured with CORS enabled. Linkding does not support that, but a reverse proxy in front can fix that. -For example if you use Traefik, documentation about that is here: -Examples for various servers can be found at . - -This integration supports at max 15 results from Linkding. But you can add it multiple times to you dashboard with different queries to retrieve what you need. +This integration supports at max 15 results from Linkding, but you can add it multiple times to you dashboard with different queries to retrieve what you need. ```yaml - - name: "Linkding" - # Url to Linkding instance - url: https://ld.ceesbos.nl - token: "" - type: "Linkding" - # Maximum number of items returned by Linkding, minimal 1 and max 15 - limit: 10 - # query to do on Linkding. Use #tagname to search for tags - query: "#ToDo #Homer" +- name: "Linkding" + type: "Linkding" + url: https://my-service.url + token: "<---insert-api-key-here--->" + limit: 10 # Maximum number of items returned by Linkding, minimal 1 and max 15 + query: "#ToDo #Homer" # query to do on Linkding. Use #tagname to search for tags ``` ## Matrix -This service displays a version string instead of a subtitle. The indicator -shows if Matrix Server is online, offline +Displays a Matrix version, and shows if the server is online. ```yaml - name: "Matrix - Server" @@ -328,84 +332,94 @@ shows if Matrix Server is online, offline ## Mealie -First off make sure to remove an existing `subtitle` as it will take precedence if set. -Setting `type: "Mealie"` will then show the number of recipes Mealie is keeping organized or the planned meal for today if one is planned. You will -have to set an API key in the field `apikey` which can be created in your Mealie installation. The API page can be found: Click on hamburger menu -> Click on your profile -> Click on "Manage your API Tokens" +Displays the number of recipes Mealie is keeping organized or the planned meal for today if one is planned. ```yaml +- name: "Mealie" type: "Mealie" + logo: "assets/tools/sample.png" + url: https://my-service.url apikey: "<---insert-api-key-here--->" ``` +**API Key**: You will have to set an API key in the field `apikey` which can be created in your Mealie installation. +The API page can be found: Click on hamburger menu -> Click on your profile -> Click on "Manage your API Tokens" + ## Medusa -This service displays News (grey), Warning (orange) or Error (red) notifications bubbles from the Medusa application. -Two lines are needed in the config.yml : +Displays News (grey), Warning (orange) or Error (red) notifications bubbles from the Medusa application. ```yaml +- name: "Medusa" type: "Medusa" + logo: "assets/tools/sample.png" + url: https://my-service.url apikey: "<---insert-api-key-here--->" ``` The url must be the root url of Medusa application. -The Medusa API key can be found in General configuration > Interface. It is needed to access Medusa API. + +**API Key**: The Medusa API key can be found in General configuration > Interface. It is needed to access Medusa API. ## Nextcloud -This service displays a version string instead of a subtitle. The indicator -shows if Nextcloud is online, offline, or in [maintenance +Displays Nextcloud version and shows if Nextcloud is online, offline, or in [maintenance mode](https://docs.nextcloud.com/server/stable/admin_manual/maintenance/upgrade.html#maintenance-mode). -Example configuration: ```yaml - name: Nextcloud type: Nextcloud logo: assets/tools/sample.png - url: http://nextcloud.example.com + url: https://my-service.url ``` ## OctoPrint/Moonraker The OctoPrint/Moonraker service only needs an `apikey` & `endpoint` and optionally a `display` or `url` option. `url` can be used when you click on the service it will launch the `url` - Moonraker's API mimmicks a few of OctoPrint's endpoints which makes these services compatible. See for details. ```yaml - name: "Octoprint" - logo: "https://cdn-icons-png.flaticon.com/512/3112/3112529.png" - apikey: "xxxxxxxxxxxx" # insert your own API key here. - endpoint: "http://192.168.0.151:8080" - display: "text" # 'text' or 'bar'. Default to `text`. type: "OctoPrint" + logo: assets/tools/sample.png + endpoint: "https://my-service-api.url:port" + apikey: "<---insert-api-key-here--->" + display: "text" # 'text' or 'bar'. Default to `text`. + ``` ## Olivetin -This service displays a version string instead of a subtitle. Example configuration: +Displays a Olivetin version. ```yaml - name: Olivetin type: Olivetin logo: assets/tools/sample.png - url: https://olivetin.example.com + url: https://my-service.url ``` ## OpenHAB -You need to set the type to OpenHAB, provide an api key and enable cors on OpenHAB. +Displays OpenHAB system status, things count, and items count. ```yaml - name: "OpenHAB" - logo: "assets/tools/sample.png" - url: "http://192.168.0.151/" type: "OpenHAB" + logo: "assets/tools/sample.png" + url: https://my-service.url apikey: "<---insert-api-key-here--->" - things: true # true will query the things API and report total and online things count. false will skip the call - items: true # true will query the items API and report total items count. false will skip the call + things: true # query things API for counts + items: true # query items API for counts ``` -To create an API token on OpenHAB, follow the [official documentation here](https://www.openhab.org/docs/configuration/apitokens.html). -To enable cors on OpenHAB, edit your services/runtime.cfg and uncomment or add this line: `org.openhab.cors:enable=true` +**API Token**: Create an API token following the [official OpenHAB documentation](https://www.openhab.org/docs/configuration/apitokens.html) + +**CORS Configuration**: Edit `services/runtime.cfg` and add: + +```ini +org.openhab.cors:enable=true +``` ## OpenWeatherMap @@ -414,12 +428,13 @@ The following configuration is available for the OpenWeatherMap service: ```yaml - name: "Weather" + type: "OpenWeather" + apikey: "<---insert-api-key-here--->" # Request one from https://openweathermap.org/api. location: "Amsterdam" # your location. locationId: "2759794" # Optional: Specify OpenWeatherMap city ID for better accuracy - apikey: "<---insert-api-key-here--->" # insert your own API key here. Request one from https://openweathermap.org/api. units: "metric" # units to display temperature. Can be one of: metric, imperial, kelvin. Defaults to kelvin. background: "square" # choose which type of background you want behind the image. Can be one of: square, circle, none. Defaults to none. - type: "OpenWeather" + ``` **Remarks:** @@ -427,62 +442,69 @@ If for some reason your city can't be found by entering the name in the `locatio ## PaperlessNG -This service displays total number of documents stored. Two lines are required: +Displays total number of documents stored. ```yaml +- name: "Paperless" type: "PaperlessNG" + logo: "assets/tools/sample.png" + url: https://my-service.url apikey: "<---insert-api-key-here--->" ``` -API key can be generated in Settings > Administration > Auth Tokens +**API Key**: API key can be generated in Settings > Administration > Auth Tokens ## PeaNUT -This service show current status of the UPS device. By default, the subtitle line shows UPS load, unless you provide the `subtitle` property +Displays current status and UPS load of the UPS device. ```yaml - name: "PeaNUT" type: PeaNUT logo: "assets/tools/sample.png" - url: "http://192.168.0.151" + url: https://my-service.url # device: "ups" # The ID of the device ``` ## PiAlert -The PiAlert service displays stats from your PiAlert server. +Displays stats from your PiAlert server. ```yaml - name: "PiAlert" type: "PiAlert" + logo: "assets/tools/sample.png" + url: https://my-service.url updateInterval: 5000 # (Optional) Interval (in ms) for updating the stats ``` ## PiHole -Using the PiHole service you can display info about your local PiHole instance right on your Homer dashboard. - -The following configuration is available for the PiHole service. +Displays info about your local PiHole instance right on your Homer dashboard. ```yaml - name: "Pi-hole" - logo: "assets/tools/sample.png" - # subtitle: "Network-wide Ad Blocking" # optional, if no subtitle is defined, PiHole statistics will be shown - url: "http://192.168.0.151/admin" - # endpoint: "http://192.168.0.151" # optional, For v6 API, this is the base URL used to fetch Pi-hole data overwriting the url - apikey: "<---insert-api-key-here--->" # optional, needed if web interface is password protected type: "PiHole" + logo: "assets/tools/sample.png" + url: https://my-service.url + # endpoint: "https://my-service-api.url" # optional, For v6 API, this is the base URL used to fetch Pi-hole data overwriting the url + apikey: "<---insert-api-key-here--->" # optional, needed if web interface is password protected apiVersion: 5 # optional, defaults to 5. Use 6 if your PiHole instance uses API v6 checkInterval: 3000 # optional, defaults to 300000. interval in ms to check Pi-hole status ``` -**Remarks:** -- If PiHole web interface is password protected, obtain the `apikey` from Settings > API/Web interface > Show API token. -- For PiHole instances using API v6, set `apiVersion: 6` in your configuration. This enables session management and proper authentication handling. +**API Key**: Required only if Pi-hole web interface is password protected. Go to **Settings > API/Web Interface > Show API token** + +**API Versions**: + +- **v5** (default): Uses legacy API endpoints +- **v6**: Uses modern API with session management - set `apiVersion: 6` ## Ping -This card checks if the target link is available. All you need is to set the `type` to `Ping` and provide a url. By default the HEAD method is used but it can be configured to use GET using the optional `method` property. By default, the subtitle line shows the round trip time (RTT) of the request, unless you provide the `subtitle` property. Optionnaly, use `successCodes` to define which HTTP response status codes should be considered as available status. +Checks if the target link is available and displays the round trip time (RTT) of the request. +By default the HEAD method is used but it can be configured to use GET using the optional `method` property. +Optionally, use `successCodes` to define which HTTP response status codes should be considered as available status. ```yaml - name: "Awesome app" @@ -498,76 +520,56 @@ This card checks if the target link is available. All you need is to set the `ty ## Plex -This card shows the current active streams and the number of movies and series that this Plex instance has. +Displays active streams, total movies, and total TV series from your Plex server. ```yaml -- name: Plex +- name: "Plex" type: "Plex" logo: "assets/tools/sample.png" - token: "<---insert-plex-token-here--->" # see here how to get the plex token: https://www.plexopedia.com/plex-media-server/general/plex-token/ - url: "http://192.168.0.151:32400/web" - endpoint: "http://192.168.0.151:32400" + url: "https://my-service.url/web" + endpoint: "https://my-service.url" + token: "<---insert-plex-token-here--->" ``` +**Plex Token**: See [How to find your Plex token](https://www.plexopedia.com/plex-media-server/general/plex-token/) + ## Portainer -This service displays info about the total number of containers managed by your Portainer instance. -In order to use it, you must be using Portainer version 1.11 or later. Generate an access token from the UI and pass -it to the apikey field. -By default, every connected environments will be checked. To select specific ones, add an "environments" entry which can be a simple string or an array containing all the selected environments name. - -### New features - -Displays the Portainer version from /api/status -Shows online/offline status depending on API reachability - -See +Displays container counts (running/dead/misc), version, and online status from your Portainer instance. ```yaml - name: "Portainer" - logo: "assets/tools/sample.png" - url: "http://192.168.0.151/" type: "Portainer" + logo: "assets/tools/sample.png" + url: https://my-service.url apikey: "<---insert-api-key-here--->" - # environments: - # - "raspberry" - # - "local" + environments: # optional: specific environments to check + - "raspberry" + - "local" ``` +**Requirements**: Portainer version 1.11 or later + +**API Key**: Generate an access token in Portainer UI. See [Creating an Access Token](https://docs.portainer.io/api/access#creating-an-access-token) + ## Prometheus -For Prometheus you need to set the type to Prometheus and provide a url. - ```yaml - name: "Prometheus" - type: Prometheus + type: "Prometheus" logo: "assets/tools/sample.png" - url: "http://192.168.0.151/" - # subtitle: "Monitor data server" + url: https://my-service.url ``` ## Proxmox -This service displays status information of a Proxmox node (VMs running and disk, memory and cpu used). It uses the proxmox API and [API Tokens](https://pve.proxmox.com/pve-docs/pveum-plain.html) for authorization so you need to generate one to set in the yaml config. You can set it up in Proxmox under Permissions > API Tokens. You also need to know the realm the user of the API Token is assigned to (by default pam). - -The API Token (or the user assigned to that token if not separated permissions is checked) are this: - -| Path | Permission | Comments | -|---------------------|------------|-------------------------------------------------------------------| -| /nodes/\ | Sys.Audit | | -| /vms/\ | VM.Audit | You need to have this permission on any VM you want to be counted | - -It is highly recommended that you create and API Token with only these permissions on a read-only mode. - -If you get errors, they will be shown on browser's dev console. Main issues tend to be CORS related as Proxmox does not include CORS headers and you have to deploy it behind a reverse proxy and make the proxy add this headers. - -Configuration example: +Displays status information of a Proxmox node (VMs running and disk, memory and cpu used). ```yaml - name: "Proxmox - Node" - logo: "https://www.google.com/url?sa=i&url=https%3A%2F%2Fgithub.com%2FandOTP%2FandOTP%2Fissues%2F337&psig=AOvVaw2YKVuEUIBeTUikr7kAjm8D&ust=1665323538747000&source=images&cd=vfe&ved=0CAkQjRxqFwoTCPCTruLj0PoCFQAAAAAdAAAAABAN" type: "Proxmox" - url: "https://your.proxmox.server" + logo: "assets/tools/sample.png" + url: https://my-service.url node: "your-node-name" warning_value: 50 danger_value: 80 @@ -579,40 +581,48 @@ Configuration example: small_font_on_desktop: true # uses small font on desktops (just in case you're showing much info) ``` +**API Key**: You can set it up in Proxmox under Permissions > API Tokens. You also need to know the realm the user of the API Token is assigned to (by default pam). + +The API Token (or the user assigned to that token if not separated permissions is checked) are this: + +| Path | Permission | Comments | +|---------------------|------------|-------------------------------------------------------------------| +| /nodes/\ | Sys.Audit | | +| /vms/\ | VM.Audit | You need to have this permission on any VM you want to be counted | + +It is highly recommended that you create and API Token with only these permissions on a read-only mode. + ## qBittorrent -This service displays the global upload and download rates, as well as the number of torrents +Displays the global upload and download rates, as well as the number of torrents listed. The service communicates with the qBittorrent API interface which needs to be accessible from the browser. Please consult [the instructions](https://github.com/qbittorrent/qBittorrent/pull/12579) -for setting up qBittorrent and make sure the correct CORS-settings are applied. Examples for various -servers can be found at [enable-cors.org](https://enable-cors.org/server.html). +for setting up qBittorrent. ```yaml - name: "qBittorrent" - logo: "assets/tools/sample.png" - url: "http://192.168.1.2:8080" # Your rTorrent web UI, f.e. ruTorrent or Flood. type: "qBittorrent" + logo: "assets/tools/sample.png" + url: https://my-service.url # Your rTorrent web UI, f.e. ruTorrent or Flood. rateInterval: 2000 # Interval for updating the download and upload rates. torrentInterval: 5000 # Interval for updating the torrent count. - target: "_blank" # optional html a tag target attribute ``` ## rTorrent -This service displays the global upload and download rates, as well as the number of torrents +Displays the global upload and download rates, as well as the number of torrents listed in rTorrent. The service communicates with the rTorrent XML-RPC interface which needs to be accessible from the browser. Please consult [the instructions](https://github.com/rakshasa/rtorrent-doc/blob/master/RPC-Setup-XMLRPC.md) -for setting up rTorrent and make sure the correct CORS-settings are applied. Examples for various -servers can be found at . +for setting up rTorrent. ```yaml - name: "rTorrent" - logo: "assets/tools/sample.png" - url: "http://192.168.0.151" # Your rTorrent web UI, f.e. ruTorrent or Flood. - xmlrpc: "http://192.168.0.151:8081" # Reverse proxy for rTorrent's XML-RPC. type: "Rtorrent" + logo: "assets/tools/sample.png" + url: "https://my-service.url" # Your rTorrent web UI, f.e. ruTorrent or Flood. + xmlrpc: "https://my-service.url:port" # Reverse proxy for rTorrent's XML-RPC. rateInterval: 5000 # Interval for updating the download and upload rates. torrentInterval: 60000 # Interval for updating the torrent count. username: "username" # Username for logging into rTorrent (if applicable). @@ -621,89 +631,85 @@ servers can be found at . ## SABnzbd -The SABnzbd service can allow you to show the number of currently active -downloads on your SABnzbd instance. An API key is required, and can be obtained from -the "Config" > "General" section of the SABnzbd config in the SABnzbd web UI. +Displays the number of currently active downloads on your SABnzbd instance. ```yaml - name: "SABnzbd" - logo: "assets/tools/sample.png" - url: "http://192.168.0.151:8080" type: "SABnzbd" - apikey: "MY-SUPER-SECRET-API-KEY" + logo: "assets/tools/sample.png" + url: https://my-service.url + apikey: "<---insert-api-key-here--->" downloadInterval: 5000 # (Optional) Interval (in ms) for updating the download count ``` +**API Key**: An API key is required, and can be obtained from the "Config" > "General" section of the SABnzbd config in the web UI. + ## Scrutiny -This service displays info about the total number of disk passed and failed S.M.A.R.T and scrutiny checks +Displays info about the total number of disk passed and failed S.M.A.R.T and scrutiny checks ```yaml - name: "Scrutiny" - logo: "assets/tools/sample.png" - url: "http://192.168.0.151:8080" type: "Scrutiny" + logo: "assets/tools/sample.png" + url: https://my-service.url updateInterval: 5000 # (Optional) Interval (in ms) for updating the status ``` ## SpeedtestTracker -This service will show the download and upload speeds in Mbit/s and the ping in ms. -To configure the service, you need to define the url of SpeedtestTracker running and an entry with type `SpeedtestTracker`. - -Configuration example: +Displays the download and upload speeds in Mbit/s and the ping in ms. ```yaml - name: "Speedtest Tracker" type: "SpeedtestTracker" - url: "http://192.168.0.1:8080" - target: "_blank" + logo: "assets/tools/sample.png" + url: https://my-service.url ``` ## Tautulli -The Tautulli service can allow you to show the number of currently active -streams on you Plex instance. An API key is required, and can be obtained from -the "Web Interface" section of settings on the Tautulli web UI. +Displays the number of currently active streams on you Plex instance. ```yaml - name: "Tautulli" - logo: "assets/tools/sample.png" - url: "http://192.168.0.151:8181" type: "Tautulli" + logo: "assets/tools/sample.png" + url: https://my-service.url + checkInterval: 5000 # (Optional) Interval (in ms) for updating the status apikey: "<---insert-api-key-here--->" - checkInterval: 5000 # (Optional) Interval (in ms) for updating the status ``` +**API Key**: An API key is required, and can be obtained from the "Web Interface" section of settings on the Tautulli web UI. + Because the service type and link don't necessarily have to match, you could even make the service type Tautulli on your Plex card and provide a separate endpoint pointing to Tautulli! ```yaml - name: "Plex" - logo: "assets/tools/sample.png" - url: "http://192.168.0.151:32400/web" # Plex - endpoint: "http://192.168.0.151:8181" # Tautulli type: "Tautulli" + logo: "assets/tools/sample.png" + url: https://my-plex.url/web # Plex + endpoint: https://my-tautulli.url # Tautulli apikey: "<---insert-api-key-here--->" ``` ## Tdarr -The Tdarr service can allow you to show the number of currently queued items -for transcoding on your Tdarr instance as well as the number of errored items. +Displays the number of currently queued items for transcoding on your Tdarr instance as well as the number of errored items. ```yaml - name: "Tdarr" - logo: "assets/tools/sample.png" - url: "http://192.168.0.151:8265" type: "Tdarr" + logo: "assets/tools/sample.png" + url: https://my-service.url checkInterval: 5000 # (Optional) Interval (in ms) for updating the queue & error counts ``` ## Traefik -This service displays a version string instead of a subtitle. Example configuration: +Displays Traefik. ```yaml - name: Traefik @@ -714,64 +720,60 @@ This service displays a version string instead of a subtitle. Example configurat ## Truenas Scale -This service displays a version string instead of a subtitle. Example configuration: +Displays TrueNAS version. ```yaml - name: "Truenas" type: "TruenasScale" logo: "assets/tools/sample.png" - url: "http://truenas.example.com" - api_token: "your_api_token" + url: https://my-service.url + api_token: "<---insert-api-key-here--->" ``` ## Uptime Kuma -Using the Uptime Kuma service you can display info about your instance uptime right on your Homer dashboard. - -The following configuration is available for the UptimeKuma service. Needs v1.13.1 or later because of the change in APIs due to [multiple status pages support](https://github.com/louislam/uptime-kuma/releases/tag/1.13.1). +Displays overall status, uptime percentage, and incident information from your Uptime Kuma status page. ```yaml - name: "Uptime Kuma" - logo: "assets/tools/sample.png" - # subtitle: "A fancy self-hosted monitoring tool" # optional, if no subtitle is defined, Uptime Kuma incidents, if any, will be shown - url: "http://192.168.0.151:3001" - slug: "myCustomDashboard" # Defaults to "default" if not provided. type: "UptimeKuma" + logo: "assets/tools/sample.png" + url: https://my-service.url + slug: "default" # status page slug, defaults to "default" ``` +**Requirements**: Uptime Kuma version `1.13.1` or later (for [multiple status pages support](https://github.com/louislam/uptime-kuma/releases/tag/1.13.1)) + ## Vaultwarden -This service displays a version string instead of a subtitle. The indicator -shows if Vaultwarden is online, offline +Displays Vaultwarden version and status. ```yaml - name: "Vaultwarden - Server" type: "Vaultwarden" logo: "assets/tools/sample.png" - url: "http://vaultwarden.example.com" + url: https://my-service.url ``` ## Wallabag -This service displays a version string instead of a subtitle. Example configuration: +Displays Wallabag version. ```yaml - name: Wallabag type: Wallabag - logo: assets/tools/sample.png - url: https://wallabag.example.com + logo: "assets/tools/sample.png" + url: https://my-service.url ``` ## What's up Docker -What's up Docker allow to display info about the number of container running and the number for which an update is available on your Homer dashboard. - -The following configuration is available for the WUD service. +Display info about the number of container running and the number for which an update is available on your Homer dashboard. ```yaml - name: "What's Up Docker" - logo: "assets/tools/sample.png" - subtitle: "Docker image update notifier" - url: "http://192.168.1.12:3001" type: "WUD" + logo: "assets/tools/sample.png" + url: https://my-service.url + subtitle: "Docker image update notifier" ``` diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md index a7d9158..3f49272 100644 --- a/docs/troubleshooting.md +++ b/docs/troubleshooting.md @@ -41,7 +41,7 @@ To resolve this, you can either: - Host all your target service under the same domain & port. - Modify the target server configuration so that the response of the server included following header- `Access-Control-Allow-Origin: *` (). It might be an option in the targeted service, otherwise depending on how the service is hosted, the proxy or web server can seamlessly add it. -- Use a cors proxy server like [`cors-container`](https://github.com/imjacobclark/cors-container), [`cors-anywhere`](https://github.com/Rob--W/cors-anywhere) or many others. +- **Use a proxy** to add the necessary CORS headers (lot of options, some of them described [here](https://enable-cors.org/server.html). Also check [`CORSair`](https://github.com/bastienwirtz/corsair), a light and simple solution) ## I am using an authentication proxy and homer says I am offline From 11bd5fd9d5f1b84c295f961c51e2321b31faf801 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Sep 2025 21:29:15 +0000 Subject: [PATCH 04/52] chore(deps-dev): bump vite from 7.0.6 to 7.0.7 Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 7.0.6 to 7.0.7. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/v7.0.7/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v7.0.7/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-version: 7.0.7 dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- package.json | 2 +- pnpm-lock.yaml | 1253 +++++++++++++++++++++++++----------------------- 2 files changed, 648 insertions(+), 607 deletions(-) diff --git a/package.json b/package.json index a67d2c6..1727b3b 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "http-server": "^14.1.1", "prettier": "^3.6.2", "sass-embedded": "^1.90.0", - "vite": "^7.0.6", + "vite": "^7.0.7", "vite-plugin-pwa": "^1.0.2" }, "license": "Apache-2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8f98554..9180bf0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,7 +29,7 @@ importers: version: 9.32.0 '@vitejs/plugin-vue': specifier: ^6.0.1 - version: 6.0.1(vite@7.0.6(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.43.1)(yaml@2.8.1))(vue@3.5.18) + version: 6.0.1(vite@7.0.7(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.18) '@vue/eslint-config-prettier': specifier: ^10.2.0 version: 10.2.0(eslint@9.32.0)(prettier@3.6.2) @@ -52,18 +52,14 @@ importers: specifier: ^1.90.0 version: 1.90.0 vite: - specifier: ^7.0.6 - version: 7.0.6(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.43.1)(yaml@2.8.1) + specifier: ^7.0.7 + version: 7.0.7(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.44.0)(yaml@2.8.1) vite-plugin-pwa: specifier: ^1.0.2 - version: 1.0.2(vite@7.0.6(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.43.1)(yaml@2.8.1))(workbox-build@7.3.0)(workbox-window@7.3.0) + version: 1.0.2(vite@7.0.7(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.44.0)(yaml@2.8.1))(workbox-build@7.3.0)(workbox-window@7.3.0) packages: - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - '@apideck/better-ajv-errors@0.3.6': resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} engines: {node: '>=10'} @@ -74,16 +70,16 @@ packages: resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.28.0': - resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==} + '@babel/compat-data@7.28.4': + resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==} engines: {node: '>=6.9.0'} - '@babel/core@7.28.0': - resolution: {integrity: sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==} + '@babel/core@7.28.4': + resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==} engines: {node: '>=6.9.0'} - '@babel/generator@7.28.0': - resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==} + '@babel/generator@7.28.3': + resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} engines: {node: '>=6.9.0'} '@babel/helper-annotate-as-pure@7.27.3': @@ -94,8 +90,8 @@ packages: resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.27.1': - resolution: {integrity: sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==} + '@babel/helper-create-class-features-plugin@7.28.3': + resolution: {integrity: sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -123,8 +119,8 @@ packages: resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.27.3': - resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==} + '@babel/helper-module-transforms@7.28.3': + resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -165,12 +161,12 @@ packages: resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} - '@babel/helper-wrap-function@7.27.1': - resolution: {integrity: sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==} + '@babel/helper-wrap-function@7.28.3': + resolution: {integrity: sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.28.2': - resolution: {integrity: sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==} + '@babel/helpers@7.28.4': + resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} engines: {node: '>=6.9.0'} '@babel/parser@7.28.0': @@ -178,6 +174,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.28.4': + resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1': resolution: {integrity: sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==} engines: {node: '>=6.9.0'} @@ -202,8 +203,8 @@ packages: peerDependencies: '@babel/core': ^7.13.0 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1': - resolution: {integrity: sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==} + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3': + resolution: {integrity: sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -256,8 +257,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoping@7.28.0': - resolution: {integrity: sha512-gKKnwjpdx5sER/wl0WN0efUBFzF/56YZO0RJrSYP4CljXnP31ByY7fol89AzomdlLNzI36AvOTmYHsnZTCkq8Q==} + '@babel/plugin-transform-block-scoping@7.28.4': + resolution: {integrity: sha512-1yxmvN0MJHOhPVmAsmoW5liWwoILobu/d/ShymZmj867bAdxGbehIrew1DuLpw2Ukv+qDSSPQdYW1dLNE7t11A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -268,14 +269,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-static-block@7.27.1': - resolution: {integrity: sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==} + '@babel/plugin-transform-class-static-block@7.28.3': + resolution: {integrity: sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 - '@babel/plugin-transform-classes@7.28.0': - resolution: {integrity: sha512-IjM1IoJNw72AZFlj33Cu8X0q2XK/6AaVC3jQu+cgQ5lThWD5ajnuUAml80dqRmOhmPkTH8uAwnpMu9Rvj0LTRA==} + '@babel/plugin-transform-classes@7.28.4': + resolution: {integrity: sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -418,8 +419,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-rest-spread@7.28.0': - resolution: {integrity: sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA==} + '@babel/plugin-transform-object-rest-spread@7.28.4': + resolution: {integrity: sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -466,8 +467,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regenerator@7.28.1': - resolution: {integrity: sha512-P0QiV/taaa3kXpLY+sXla5zec4E+4t4Aqc9ggHlfZ7a2cp8/x/Gv08jfwEtn9gnnYIMvHx6aoOZ8XJL8eU71Dg==} + '@babel/plugin-transform-regenerator@7.28.4': + resolution: {integrity: sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -538,8 +539,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.28.0': - resolution: {integrity: sha512-VmaxeGOwuDqzLl5JUkIRM1X2Qu2uKGxHEQWh+cvvbl7JuJRgKGJSfsEF/bUaxFhJl/XAyxBe7q7qSuTbKFuCyg==} + '@babel/preset-env@7.28.3': + resolution: {integrity: sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -549,177 +550,181 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - '@babel/runtime@7.28.2': - resolution: {integrity: sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==} + '@babel/runtime@7.28.4': + resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} engines: {node: '>=6.9.0'} '@babel/template@7.27.2': resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.0': - resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==} + '@babel/traverse@7.28.4': + resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} engines: {node: '>=6.9.0'} '@babel/types@7.28.2': resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} engines: {node: '>=6.9.0'} + '@babel/types@7.28.4': + resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} + engines: {node: '>=6.9.0'} + '@bufbuild/protobuf@2.6.3': resolution: {integrity: sha512-w/gJKME9mYN7ZoUAmSMAWXk4hkVpxRKvEJCb3dV5g9wwWdxTJJ0ayOJAVcNxtdqaxDyFuC0uz4RSGVacJ030PQ==} - '@esbuild/aix-ppc64@0.25.8': - resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==} + '@esbuild/aix-ppc64@0.25.9': + resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.8': - resolution: {integrity: sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==} + '@esbuild/android-arm64@0.25.9': + resolution: {integrity: sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.8': - resolution: {integrity: sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==} + '@esbuild/android-arm@0.25.9': + resolution: {integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.8': - resolution: {integrity: sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==} + '@esbuild/android-x64@0.25.9': + resolution: {integrity: sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.8': - resolution: {integrity: sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==} + '@esbuild/darwin-arm64@0.25.9': + resolution: {integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.8': - resolution: {integrity: sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==} + '@esbuild/darwin-x64@0.25.9': + resolution: {integrity: sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.8': - resolution: {integrity: sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==} + '@esbuild/freebsd-arm64@0.25.9': + resolution: {integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.8': - resolution: {integrity: sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==} + '@esbuild/freebsd-x64@0.25.9': + resolution: {integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.8': - resolution: {integrity: sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==} + '@esbuild/linux-arm64@0.25.9': + resolution: {integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.8': - resolution: {integrity: sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==} + '@esbuild/linux-arm@0.25.9': + resolution: {integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.8': - resolution: {integrity: sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==} + '@esbuild/linux-ia32@0.25.9': + resolution: {integrity: sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.8': - resolution: {integrity: sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==} + '@esbuild/linux-loong64@0.25.9': + resolution: {integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.8': - resolution: {integrity: sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==} + '@esbuild/linux-mips64el@0.25.9': + resolution: {integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.8': - resolution: {integrity: sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==} + '@esbuild/linux-ppc64@0.25.9': + resolution: {integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.8': - resolution: {integrity: sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==} + '@esbuild/linux-riscv64@0.25.9': + resolution: {integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.8': - resolution: {integrity: sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==} + '@esbuild/linux-s390x@0.25.9': + resolution: {integrity: sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.8': - resolution: {integrity: sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==} + '@esbuild/linux-x64@0.25.9': + resolution: {integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.8': - resolution: {integrity: sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==} + '@esbuild/netbsd-arm64@0.25.9': + resolution: {integrity: sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.8': - resolution: {integrity: sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==} + '@esbuild/netbsd-x64@0.25.9': + resolution: {integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.8': - resolution: {integrity: sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==} + '@esbuild/openbsd-arm64@0.25.9': + resolution: {integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.8': - resolution: {integrity: sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==} + '@esbuild/openbsd-x64@0.25.9': + resolution: {integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.25.8': - resolution: {integrity: sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==} + '@esbuild/openharmony-arm64@0.25.9': + resolution: {integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.25.8': - resolution: {integrity: sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==} + '@esbuild/sunos-x64@0.25.9': + resolution: {integrity: sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.8': - resolution: {integrity: sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==} + '@esbuild/win32-arm64@0.25.9': + resolution: {integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.8': - resolution: {integrity: sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==} + '@esbuild/win32-ia32@0.25.9': + resolution: {integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.8': - resolution: {integrity: sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==} + '@esbuild/win32-x64@0.25.9': + resolution: {integrity: sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -786,21 +791,27 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@jridgewell/gen-mapping@0.3.12': - resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/source-map@0.3.10': - resolution: {integrity: sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==} + '@jridgewell/source-map@0.3.11': + resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} '@jridgewell/sourcemap-codec@1.5.4': resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} - '@jridgewell/trace-mapping@0.3.29': - resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.30': + resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} '@parcel/watcher-android-arm64@2.5.1': resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} @@ -931,8 +942,8 @@ packages: peerDependencies: rollup: ^1.20.0||^2.0.0 - '@rollup/pluginutils@5.2.0': - resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==} + '@rollup/pluginutils@5.3.0': + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -940,103 +951,108 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.46.2': - resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==} + '@rollup/rollup-android-arm-eabi@4.50.1': + resolution: {integrity: sha512-HJXwzoZN4eYTdD8bVV22DN8gsPCAj3V20NHKOs8ezfXanGpmVPR7kalUHd+Y31IJp9stdB87VKPFbsGY3H/2ag==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.46.2': - resolution: {integrity: sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==} + '@rollup/rollup-android-arm64@4.50.1': + resolution: {integrity: sha512-PZlsJVcjHfcH53mOImyt3bc97Ep3FJDXRpk9sMdGX0qgLmY0EIWxCag6EigerGhLVuL8lDVYNnSo8qnTElO4xw==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.46.2': - resolution: {integrity: sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==} + '@rollup/rollup-darwin-arm64@4.50.1': + resolution: {integrity: sha512-xc6i2AuWh++oGi4ylOFPmzJOEeAa2lJeGUGb4MudOtgfyyjr4UPNK+eEWTPLvmPJIY/pgw6ssFIox23SyrkkJw==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.46.2': - resolution: {integrity: sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==} + '@rollup/rollup-darwin-x64@4.50.1': + resolution: {integrity: sha512-2ofU89lEpDYhdLAbRdeyz/kX3Y2lpYc6ShRnDjY35bZhd2ipuDMDi6ZTQ9NIag94K28nFMofdnKeHR7BT0CATw==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.46.2': - resolution: {integrity: sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==} + '@rollup/rollup-freebsd-arm64@4.50.1': + resolution: {integrity: sha512-wOsE6H2u6PxsHY/BeFHA4VGQN3KUJFZp7QJBmDYI983fgxq5Th8FDkVuERb2l9vDMs1D5XhOrhBrnqcEY6l8ZA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.46.2': - resolution: {integrity: sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==} + '@rollup/rollup-freebsd-x64@4.50.1': + resolution: {integrity: sha512-A/xeqaHTlKbQggxCqispFAcNjycpUEHP52mwMQZUNqDUJFFYtPHCXS1VAG29uMlDzIVr+i00tSFWFLivMcoIBQ==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.46.2': - resolution: {integrity: sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==} + '@rollup/rollup-linux-arm-gnueabihf@4.50.1': + resolution: {integrity: sha512-54v4okehwl5TaSIkpp97rAHGp7t3ghinRd/vyC1iXqXMfjYUTm7TfYmCzXDoHUPTTf36L8pr0E7YsD3CfB3ZDg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.46.2': - resolution: {integrity: sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==} + '@rollup/rollup-linux-arm-musleabihf@4.50.1': + resolution: {integrity: sha512-p/LaFyajPN/0PUHjv8TNyxLiA7RwmDoVY3flXHPSzqrGcIp/c2FjwPPP5++u87DGHtw+5kSH5bCJz0mvXngYxw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.46.2': - resolution: {integrity: sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==} + '@rollup/rollup-linux-arm64-gnu@4.50.1': + resolution: {integrity: sha512-2AbMhFFkTo6Ptna1zO7kAXXDLi7H9fGTbVaIq2AAYO7yzcAsuTNWPHhb2aTA6GPiP+JXh85Y8CiS54iZoj4opw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.46.2': - resolution: {integrity: sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==} + '@rollup/rollup-linux-arm64-musl@4.50.1': + resolution: {integrity: sha512-Cgef+5aZwuvesQNw9eX7g19FfKX5/pQRIyhoXLCiBOrWopjo7ycfB292TX9MDcDijiuIJlx1IzJz3IoCPfqs9w==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.46.2': - resolution: {integrity: sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==} + '@rollup/rollup-linux-loongarch64-gnu@4.50.1': + resolution: {integrity: sha512-RPhTwWMzpYYrHrJAS7CmpdtHNKtt2Ueo+BlLBjfZEhYBhK00OsEqM08/7f+eohiF6poe0YRDDd8nAvwtE/Y62Q==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.46.2': - resolution: {integrity: sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==} + '@rollup/rollup-linux-ppc64-gnu@4.50.1': + resolution: {integrity: sha512-eSGMVQw9iekut62O7eBdbiccRguuDgiPMsw++BVUg+1K7WjZXHOg/YOT9SWMzPZA+w98G+Fa1VqJgHZOHHnY0Q==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.46.2': - resolution: {integrity: sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==} + '@rollup/rollup-linux-riscv64-gnu@4.50.1': + resolution: {integrity: sha512-S208ojx8a4ciIPrLgazF6AgdcNJzQE4+S9rsmOmDJkusvctii+ZvEuIC4v/xFqzbuP8yDjn73oBlNDgF6YGSXQ==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.46.2': - resolution: {integrity: sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==} + '@rollup/rollup-linux-riscv64-musl@4.50.1': + resolution: {integrity: sha512-3Ag8Ls1ggqkGUvSZWYcdgFwriy2lWo+0QlYgEFra/5JGtAd6C5Hw59oojx1DeqcA2Wds2ayRgvJ4qxVTzCHgzg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.46.2': - resolution: {integrity: sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==} + '@rollup/rollup-linux-s390x-gnu@4.50.1': + resolution: {integrity: sha512-t9YrKfaxCYe7l7ldFERE1BRg/4TATxIg+YieHQ966jwvo7ddHJxPj9cNFWLAzhkVsbBvNA4qTbPVNsZKBO4NSg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.46.2': - resolution: {integrity: sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==} + '@rollup/rollup-linux-x64-gnu@4.50.1': + resolution: {integrity: sha512-MCgtFB2+SVNuQmmjHf+wfI4CMxy3Tk8XjA5Z//A0AKD7QXUYFMQcns91K6dEHBvZPCnhJSyDWLApk40Iq/H3tA==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.46.2': - resolution: {integrity: sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==} + '@rollup/rollup-linux-x64-musl@4.50.1': + resolution: {integrity: sha512-nEvqG+0jeRmqaUMuwzlfMKwcIVffy/9KGbAGyoa26iu6eSngAYQ512bMXuqqPrlTyfqdlB9FVINs93j534UJrg==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.46.2': - resolution: {integrity: sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==} + '@rollup/rollup-openharmony-arm64@4.50.1': + resolution: {integrity: sha512-RDsLm+phmT3MJd9SNxA9MNuEAO/J2fhW8GXk62G/B4G7sLVumNFbRwDL6v5NrESb48k+QMqdGbHgEtfU0LCpbA==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.50.1': + resolution: {integrity: sha512-hpZB/TImk2FlAFAIsoElM3tLzq57uxnGYwplg6WDyAxbYczSi8O2eQ+H2Lx74504rwKtZ3N2g4bCUkiamzS6TQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.46.2': - resolution: {integrity: sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==} + '@rollup/rollup-win32-ia32-msvc@4.50.1': + resolution: {integrity: sha512-SXjv8JlbzKM0fTJidX4eVsH+Wmnp0/WcD8gJxIZyR6Gay5Qcsmdbi9zVtnbkGPG8v2vMR1AD06lGWy5FLMcG7A==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.46.2': - resolution: {integrity: sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==} + '@rollup/rollup-win32-x64-msvc@4.50.1': + resolution: {integrity: sha512-StxAO/8ts62KZVRAm4JZYq9+NqNsV7RvimNK+YM7ry//zebEH6meuugqW/P5OFUCjyQgui+9fUxT6d5NShvMvA==} cpu: [x64] os: [win32] @@ -1181,8 +1197,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.25.1: - resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==} + browserslist@4.25.4: + resolution: {integrity: sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -1211,8 +1227,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001731: - resolution: {integrity: sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==} + caniuse-lite@1.0.30001741: + resolution: {integrity: sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw==} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -1245,8 +1261,8 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - core-js-compat@3.45.0: - resolution: {integrity: sha512-gRoVMBawZg0OnxaVv3zpqLLxaHmsubEGyTnqdpI/CEBvX4JadI1dMSHxagThprYRtSVbuQxvi6iUatdPxohHpA==} + core-js-compat@3.45.1: + resolution: {integrity: sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==} corser@2.0.1: resolution: {integrity: sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==} @@ -1318,8 +1334,8 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.197: - resolution: {integrity: sha512-m1xWB3g7vJ6asIFz+2pBUbq3uGmfmln1M9SSvBe4QIFWYrRHylP73zL/3nMjDmwz8V+1xAXQDfBd6+HPW0WvDQ==} + electron-to-chromium@1.5.215: + resolution: {integrity: sha512-TIvGp57UpeNetj/wV/xpFNpWGb0b/ROw372lHPx5Aafx02gjTBtWnEEcaSX3W2dLM3OSdGGyHX/cHl01JQsLaQ==} entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} @@ -1349,8 +1365,8 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} - esbuild@0.25.8: - resolution: {integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==} + esbuild@0.25.9: + resolution: {integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==} engines: {node: '>=18'} hasBin: true @@ -1459,11 +1475,12 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-uri@3.0.6: - resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} - fdir@6.4.6: - resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -1817,8 +1834,8 @@ packages: engines: {node: '>=6'} hasBin: true - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonfile@6.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} jsonpointer@5.0.1: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} @@ -1897,8 +1914,8 @@ packages: node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - node-releases@2.0.19: - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + node-releases@2.0.20: + resolution: {integrity: sha512-7gK6zSXEH6neM212JgfYFXe+GmZQM+fia5SsusuBIUgnPheLFBmIPhtFoAQRj8/7wASYQnbDlHPVwY0BefoFgA==} nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} @@ -2024,8 +2041,8 @@ packages: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} - regenerate-unicode-properties@10.2.0: - resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} + regenerate-unicode-properties@10.2.2: + resolution: {integrity: sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==} engines: {node: '>=4'} regenerate@1.4.2: @@ -2067,8 +2084,8 @@ packages: engines: {node: '>=10.0.0'} hasBin: true - rollup@4.46.2: - resolution: {integrity: sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==} + rollup@4.50.1: + resolution: {integrity: sha512-78E9voJHwnXQMiQdiqswVLZwJIzdBKJ1GdI5Zx6XwoFKUIk09/sSrr+05QFzvYb8q6Y9pPV45zzDuYa3907TZA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -2348,8 +2365,8 @@ packages: resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} engines: {node: '>=10'} - terser@5.43.1: - resolution: {integrity: sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==} + terser@5.44.0: + resolution: {integrity: sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==} engines: {node: '>=10'} hasBin: true @@ -2357,6 +2374,10 @@ packages: resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -2407,8 +2428,8 @@ packages: resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} engines: {node: '>=4'} - unicode-match-property-value-ecmascript@2.2.0: - resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} + unicode-match-property-value-ecmascript@2.2.1: + resolution: {integrity: sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==} engines: {node: '>=4'} unicode-property-aliases-ecmascript@2.1.0: @@ -2461,8 +2482,8 @@ packages: '@vite-pwa/assets-generator': optional: true - vite@7.0.6: - resolution: {integrity: sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==} + vite@7.0.7: + resolution: {integrity: sha512-hc6LujN/EkJHmxeiDJMs0qBontZ1cdBvvoCbWhVjzUFTU329VRyOC46gHNSA8NcOC5yzCeXpwI40tieI3DEZqg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -2620,11 +2641,6 @@ packages: snapshots: - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.12 - '@jridgewell/trace-mapping': 0.3.29 - '@apideck/better-ajv-errors@0.3.6(ajv@8.17.1)': dependencies: ajv: 8.17.1 @@ -2638,20 +2654,20 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.28.0': {} + '@babel/compat-data@7.28.4': {} - '@babel/core@7.28.0': + '@babel/core@7.28.4': dependencies: - '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.0 + '@babel/generator': 7.28.3 '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) - '@babel/helpers': 7.28.2 - '@babel/parser': 7.28.0 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/helpers': 7.28.4 + '@babel/parser': 7.28.4 '@babel/template': 7.27.2 - '@babel/traverse': 7.28.0 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.1 gensync: 1.0.0-beta.2 @@ -2660,49 +2676,49 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.28.0': + '@babel/generator@7.28.3': dependencies: - '@babel/parser': 7.28.0 - '@babel/types': 7.28.2 - '@jridgewell/gen-mapping': 0.3.12 - '@jridgewell/trace-mapping': 0.3.29 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.30 jsesc: 3.1.0 '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@babel/helper-compilation-targets@7.27.2': dependencies: - '@babel/compat-data': 7.28.0 + '@babel/compat-data': 7.28.4 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.25.1 + browserslist: 4.25.4 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.28.0)': + '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.0) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.28.0 + '@babel/traverse': 7.28.4 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.28.0)': + '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-annotate-as-pure': 7.27.3 regexpu-core: 6.2.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.28.0)': + '@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 debug: 4.4.1 @@ -2715,55 +2731,55 @@ snapshots: '@babel/helper-member-expression-to-functions@7.27.1': dependencies: - '@babel/traverse': 7.28.0 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.27.1': dependencies: - '@babel/traverse': 7.28.0 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.27.3(@babel/core@7.28.0)': + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-module-imports': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.0 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@babel/helper-plugin-utils@7.27.1': {} - '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.0)': + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-wrap-function': 7.27.1 - '@babel/traverse': 7.28.0 + '@babel/helper-wrap-function': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.0)': + '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.28.0 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: - '@babel/traverse': 7.28.0 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color @@ -2773,510 +2789,514 @@ snapshots: '@babel/helper-validator-option@7.27.1': {} - '@babel/helper-wrap-function@7.27.1': + '@babel/helper-wrap-function@7.28.3': dependencies: '@babel/template': 7.27.2 - '@babel/traverse': 7.28.0 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/helpers@7.28.2': + '@babel/helpers@7.28.4': dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@babel/parser@7.28.0': dependencies: '@babel/types': 7.28.2 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.28.0)': + '@babel/parser@7.28.4': dependencies: - '@babel/core': 7.28.0 + '@babel/types': 7.28.4 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.0 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.4) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.0 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.0)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 - '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.0)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.28.0)': + '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.0) - '@babel/traverse': 7.28.0 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.4) + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.0) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.4) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-block-scoping@7.28.0(@babel/core@7.28.0)': + '@babel/plugin-transform-block-scoping@7.28.4(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/core': 7.28.4 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/core': 7.28.4 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.28.0(@babel/core@7.28.0)': + '@babel/plugin-transform-classes@7.28.4(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-globals': 7.28.0 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.0) - '@babel/traverse': 7.28.0 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/template': 7.27.2 - '@babel/plugin-transform-destructuring@7.28.0(@babel/core@7.28.0)': + '@babel/plugin-transform-destructuring@7.28.0(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.0 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-explicit-resource-management@7.28.0(@babel/core@7.28.0)': + '@babel/plugin-transform-explicit-resource-management@7.28.0(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.0) + '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.4) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.0 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) + '@babel/core': 7.28.4 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) + '@babel/core': 7.28.4 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) + '@babel/core': 7.28.4 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.0 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) + '@babel/core': 7.28.4 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-object-rest-spread@7.28.0(@babel/core@7.28.0)': + '@babel/plugin-transform-object-rest-spread@7.28.4(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.0) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.0) - '@babel/traverse': 7.28.0 + '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.4) + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.0) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.0)': + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/core': 7.28.4 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-regenerator@7.28.1(@babel/core@7.28.0)': + '@babel/plugin-transform-regenerator@7.28.4(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-spread@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-spread@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/preset-env@7.28.0(@babel/core@7.28.0)': + '@babel/preset-env@7.28.3(@babel/core@7.28.4)': dependencies: - '@babel/compat-data': 7.28.0 - '@babel/core': 7.28.0 + '@babel/compat-data': 7.28.4 + '@babel/core': 7.28.4 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.0) - '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.0) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.28.0) - '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-block-scoping': 7.28.0(@babel/core@7.28.0) - '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-class-static-block': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-classes': 7.28.0(@babel/core@7.28.0) - '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.0) - '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-explicit-resource-management': 7.28.0(@babel/core@7.28.0) - '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-object-rest-spread': 7.28.0(@babel/core@7.28.0) - '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.0) - '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-regenerator': 7.28.1(@babel/core@7.28.0) - '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.28.0) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.0) - babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.0) - babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.0) - babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.0) - core-js-compat: 3.45.0 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.3(@babel/core@7.28.4) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.4) + '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.4) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-block-scoping': 7.28.4(@babel/core@7.28.4) + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.28.4) + '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.28.4) + '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-explicit-resource-management': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-object-rest-spread': 7.28.4(@babel/core@7.28.4) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.4) + '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.28.4) + '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.28.4) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.4) + babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.4) + babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.4) + babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.4) + core-js-compat: 3.45.1 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.0)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 esutils: 2.0.3 - '@babel/runtime@7.28.2': {} + '@babel/runtime@7.28.4': {} '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.0 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 - '@babel/traverse@7.28.0': + '@babel/traverse@7.28.4': dependencies: '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.0 + '@babel/generator': 7.28.3 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.0 + '@babel/parser': 7.28.4 '@babel/template': 7.27.2 - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 debug: 4.4.1 transitivePeerDependencies: - supports-color @@ -3286,84 +3306,89 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 + '@babel/types@7.28.4': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@bufbuild/protobuf@2.6.3': {} - '@esbuild/aix-ppc64@0.25.8': + '@esbuild/aix-ppc64@0.25.9': optional: true - '@esbuild/android-arm64@0.25.8': + '@esbuild/android-arm64@0.25.9': optional: true - '@esbuild/android-arm@0.25.8': + '@esbuild/android-arm@0.25.9': optional: true - '@esbuild/android-x64@0.25.8': + '@esbuild/android-x64@0.25.9': optional: true - '@esbuild/darwin-arm64@0.25.8': + '@esbuild/darwin-arm64@0.25.9': optional: true - '@esbuild/darwin-x64@0.25.8': + '@esbuild/darwin-x64@0.25.9': optional: true - '@esbuild/freebsd-arm64@0.25.8': + '@esbuild/freebsd-arm64@0.25.9': optional: true - '@esbuild/freebsd-x64@0.25.8': + '@esbuild/freebsd-x64@0.25.9': optional: true - '@esbuild/linux-arm64@0.25.8': + '@esbuild/linux-arm64@0.25.9': optional: true - '@esbuild/linux-arm@0.25.8': + '@esbuild/linux-arm@0.25.9': optional: true - '@esbuild/linux-ia32@0.25.8': + '@esbuild/linux-ia32@0.25.9': optional: true - '@esbuild/linux-loong64@0.25.8': + '@esbuild/linux-loong64@0.25.9': optional: true - '@esbuild/linux-mips64el@0.25.8': + '@esbuild/linux-mips64el@0.25.9': optional: true - '@esbuild/linux-ppc64@0.25.8': + '@esbuild/linux-ppc64@0.25.9': optional: true - '@esbuild/linux-riscv64@0.25.8': + '@esbuild/linux-riscv64@0.25.9': optional: true - '@esbuild/linux-s390x@0.25.8': + '@esbuild/linux-s390x@0.25.9': optional: true - '@esbuild/linux-x64@0.25.8': + '@esbuild/linux-x64@0.25.9': optional: true - '@esbuild/netbsd-arm64@0.25.8': + '@esbuild/netbsd-arm64@0.25.9': optional: true - '@esbuild/netbsd-x64@0.25.8': + '@esbuild/netbsd-x64@0.25.9': optional: true - '@esbuild/openbsd-arm64@0.25.8': + '@esbuild/openbsd-arm64@0.25.9': optional: true - '@esbuild/openbsd-x64@0.25.8': + '@esbuild/openbsd-x64@0.25.9': optional: true - '@esbuild/openharmony-arm64@0.25.8': + '@esbuild/openharmony-arm64@0.25.9': optional: true - '@esbuild/sunos-x64@0.25.8': + '@esbuild/sunos-x64@0.25.9': optional: true - '@esbuild/win32-arm64@0.25.8': + '@esbuild/win32-arm64@0.25.9': optional: true - '@esbuild/win32-ia32@0.25.8': + '@esbuild/win32-ia32@0.25.9': optional: true - '@esbuild/win32-x64@0.25.8': + '@esbuild/win32-x64@0.25.9': optional: true '@eslint-community/eslint-utils@4.7.0(eslint@9.32.0)': @@ -3425,24 +3450,31 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@jridgewell/gen-mapping@0.3.12': + '@jridgewell/gen-mapping@0.3.13': dependencies: - '@jridgewell/sourcemap-codec': 1.5.4 - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.30 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.30 '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/source-map@0.3.10': + '@jridgewell/source-map@0.3.11': dependencies: - '@jridgewell/gen-mapping': 0.3.12 - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.30 '@jridgewell/sourcemap-codec@1.5.4': {} - '@jridgewell/trace-mapping@0.3.29': + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.30': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/sourcemap-codec': 1.5.5 '@parcel/watcher-android-arm64@2.5.1': optional: true @@ -3509,9 +3541,9 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.29': {} - '@rollup/plugin-babel@5.3.1(@babel/core@7.28.0)(rollup@2.79.2)': + '@rollup/plugin-babel@5.3.1(@babel/core@7.28.4)(rollup@2.79.2)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-module-imports': 7.27.1 '@rollup/pluginutils': 3.1.0(rollup@2.79.2) rollup: 2.79.2 @@ -3520,7 +3552,7 @@ snapshots: '@rollup/plugin-node-resolve@15.3.1(rollup@2.79.2)': dependencies: - '@rollup/pluginutils': 5.2.0(rollup@2.79.2) + '@rollup/pluginutils': 5.3.0(rollup@2.79.2) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 @@ -3538,7 +3570,7 @@ snapshots: dependencies: serialize-javascript: 6.0.2 smob: 1.5.0 - terser: 5.43.1 + terser: 5.44.0 optionalDependencies: rollup: 2.79.2 @@ -3549,7 +3581,7 @@ snapshots: picomatch: 2.3.1 rollup: 2.79.2 - '@rollup/pluginutils@5.2.0(rollup@2.79.2)': + '@rollup/pluginutils@5.3.0(rollup@2.79.2)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 @@ -3557,64 +3589,67 @@ snapshots: optionalDependencies: rollup: 2.79.2 - '@rollup/rollup-android-arm-eabi@4.46.2': + '@rollup/rollup-android-arm-eabi@4.50.1': optional: true - '@rollup/rollup-android-arm64@4.46.2': + '@rollup/rollup-android-arm64@4.50.1': optional: true - '@rollup/rollup-darwin-arm64@4.46.2': + '@rollup/rollup-darwin-arm64@4.50.1': optional: true - '@rollup/rollup-darwin-x64@4.46.2': + '@rollup/rollup-darwin-x64@4.50.1': optional: true - '@rollup/rollup-freebsd-arm64@4.46.2': + '@rollup/rollup-freebsd-arm64@4.50.1': optional: true - '@rollup/rollup-freebsd-x64@4.46.2': + '@rollup/rollup-freebsd-x64@4.50.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.46.2': + '@rollup/rollup-linux-arm-gnueabihf@4.50.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.46.2': + '@rollup/rollup-linux-arm-musleabihf@4.50.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.46.2': + '@rollup/rollup-linux-arm64-gnu@4.50.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.46.2': + '@rollup/rollup-linux-arm64-musl@4.50.1': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.46.2': + '@rollup/rollup-linux-loongarch64-gnu@4.50.1': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.46.2': + '@rollup/rollup-linux-ppc64-gnu@4.50.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.46.2': + '@rollup/rollup-linux-riscv64-gnu@4.50.1': optional: true - '@rollup/rollup-linux-riscv64-musl@4.46.2': + '@rollup/rollup-linux-riscv64-musl@4.50.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.46.2': + '@rollup/rollup-linux-s390x-gnu@4.50.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.46.2': + '@rollup/rollup-linux-x64-gnu@4.50.1': optional: true - '@rollup/rollup-linux-x64-musl@4.46.2': + '@rollup/rollup-linux-x64-musl@4.50.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.46.2': + '@rollup/rollup-openharmony-arm64@4.50.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.46.2': + '@rollup/rollup-win32-arm64-msvc@4.50.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.46.2': + '@rollup/rollup-win32-ia32-msvc@4.50.1': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.50.1': optional: true '@surma/rollup-plugin-off-main-thread@2.2.3': @@ -3634,10 +3669,10 @@ snapshots: '@types/trusted-types@2.0.7': {} - '@vitejs/plugin-vue@6.0.1(vite@7.0.6(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.43.1)(yaml@2.8.1))(vue@3.5.18)': + '@vitejs/plugin-vue@6.0.1(vite@7.0.7(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.18)': dependencies: '@rolldown/pluginutils': 1.0.0-beta.29 - vite: 7.0.6(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.43.1)(yaml@2.8.1) + vite: 7.0.7(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.44.0)(yaml@2.8.1) vue: 3.5.18 '@vue/compiler-core@3.5.18': @@ -3719,7 +3754,7 @@ snapshots: ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.0.6 + fast-uri: 3.1.0 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -3754,27 +3789,27 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 - babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.0): + babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.4): dependencies: - '@babel/compat-data': 7.28.0 - '@babel/core': 7.28.0 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.0) + '@babel/compat-data': 7.28.4 + '@babel/core': 7.28.4 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.0): + babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.4): dependencies: - '@babel/core': 7.28.0 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.0) - core-js-compat: 3.45.0 + '@babel/core': 7.28.4 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) + core-js-compat: 3.45.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.28.0): + babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.28.4): dependencies: - '@babel/core': 7.28.0 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.0) + '@babel/core': 7.28.4 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) transitivePeerDependencies: - supports-color @@ -3800,12 +3835,12 @@ snapshots: fill-range: 7.1.1 optional: true - browserslist@4.25.1: + browserslist@4.25.4: dependencies: - caniuse-lite: 1.0.30001731 - electron-to-chromium: 1.5.197 - node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.25.1) + caniuse-lite: 1.0.30001741 + electron-to-chromium: 1.5.215 + node-releases: 2.0.20 + update-browserslist-db: 1.1.3(browserslist@4.25.4) buffer-builder@0.2.0: {} @@ -3832,7 +3867,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001731: {} + caniuse-lite@1.0.30001741: {} chalk@4.1.2: dependencies: @@ -3860,9 +3895,9 @@ snapshots: convert-source-map@2.0.0: {} - core-js-compat@3.45.0: + core-js-compat@3.45.1: dependencies: - browserslist: 4.25.1 + browserslist: 4.25.4 corser@2.0.1: {} @@ -3929,7 +3964,7 @@ snapshots: dependencies: jake: 10.9.4 - electron-to-chromium@1.5.197: {} + electron-to-chromium@1.5.215: {} entities@4.5.0: {} @@ -4011,34 +4046,34 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - esbuild@0.25.8: + esbuild@0.25.9: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.8 - '@esbuild/android-arm': 0.25.8 - '@esbuild/android-arm64': 0.25.8 - '@esbuild/android-x64': 0.25.8 - '@esbuild/darwin-arm64': 0.25.8 - '@esbuild/darwin-x64': 0.25.8 - '@esbuild/freebsd-arm64': 0.25.8 - '@esbuild/freebsd-x64': 0.25.8 - '@esbuild/linux-arm': 0.25.8 - '@esbuild/linux-arm64': 0.25.8 - '@esbuild/linux-ia32': 0.25.8 - '@esbuild/linux-loong64': 0.25.8 - '@esbuild/linux-mips64el': 0.25.8 - '@esbuild/linux-ppc64': 0.25.8 - '@esbuild/linux-riscv64': 0.25.8 - '@esbuild/linux-s390x': 0.25.8 - '@esbuild/linux-x64': 0.25.8 - '@esbuild/netbsd-arm64': 0.25.8 - '@esbuild/netbsd-x64': 0.25.8 - '@esbuild/openbsd-arm64': 0.25.8 - '@esbuild/openbsd-x64': 0.25.8 - '@esbuild/openharmony-arm64': 0.25.8 - '@esbuild/sunos-x64': 0.25.8 - '@esbuild/win32-arm64': 0.25.8 - '@esbuild/win32-ia32': 0.25.8 - '@esbuild/win32-x64': 0.25.8 + '@esbuild/aix-ppc64': 0.25.9 + '@esbuild/android-arm': 0.25.9 + '@esbuild/android-arm64': 0.25.9 + '@esbuild/android-x64': 0.25.9 + '@esbuild/darwin-arm64': 0.25.9 + '@esbuild/darwin-x64': 0.25.9 + '@esbuild/freebsd-arm64': 0.25.9 + '@esbuild/freebsd-x64': 0.25.9 + '@esbuild/linux-arm': 0.25.9 + '@esbuild/linux-arm64': 0.25.9 + '@esbuild/linux-ia32': 0.25.9 + '@esbuild/linux-loong64': 0.25.9 + '@esbuild/linux-mips64el': 0.25.9 + '@esbuild/linux-ppc64': 0.25.9 + '@esbuild/linux-riscv64': 0.25.9 + '@esbuild/linux-s390x': 0.25.9 + '@esbuild/linux-x64': 0.25.9 + '@esbuild/netbsd-arm64': 0.25.9 + '@esbuild/netbsd-x64': 0.25.9 + '@esbuild/openbsd-arm64': 0.25.9 + '@esbuild/openbsd-x64': 0.25.9 + '@esbuild/openharmony-arm64': 0.25.9 + '@esbuild/sunos-x64': 0.25.9 + '@esbuild/win32-arm64': 0.25.9 + '@esbuild/win32-ia32': 0.25.9 + '@esbuild/win32-x64': 0.25.9 escalade@3.2.0: {} @@ -4163,9 +4198,9 @@ snapshots: fast-levenshtein@2.0.6: {} - fast-uri@3.0.6: {} + fast-uri@3.1.0: {} - fdir@6.4.6(picomatch@4.0.3): + fdir@6.5.0(picomatch@4.0.3): optionalDependencies: picomatch: 4.0.3 @@ -4204,7 +4239,7 @@ snapshots: dependencies: at-least-node: 1.0.0 graceful-fs: 4.2.11 - jsonfile: 6.1.0 + jsonfile: 6.2.0 universalify: 2.0.1 fs.realpath@1.0.0: {} @@ -4516,7 +4551,7 @@ snapshots: json5@2.2.3: {} - jsonfile@6.1.0: + jsonfile@6.2.0: dependencies: universalify: 2.0.1 optionalDependencies: @@ -4588,7 +4623,7 @@ snapshots: node-addon-api@7.1.1: optional: true - node-releases@2.0.19: {} + node-releases@2.0.20: {} nth-check@2.1.1: dependencies: @@ -4710,7 +4745,7 @@ snapshots: get-proto: 1.0.1 which-builtin-type: 1.2.1 - regenerate-unicode-properties@10.2.0: + regenerate-unicode-properties@10.2.2: dependencies: regenerate: 1.4.2 @@ -4728,11 +4763,11 @@ snapshots: regexpu-core@6.2.0: dependencies: regenerate: 1.4.2 - regenerate-unicode-properties: 10.2.0 + regenerate-unicode-properties: 10.2.2 regjsgen: 0.8.0 regjsparser: 0.12.0 unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.2.0 + unicode-match-property-value-ecmascript: 2.2.1 regjsgen@0.8.0: {} @@ -4756,30 +4791,31 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - rollup@4.46.2: + rollup@4.50.1: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.46.2 - '@rollup/rollup-android-arm64': 4.46.2 - '@rollup/rollup-darwin-arm64': 4.46.2 - '@rollup/rollup-darwin-x64': 4.46.2 - '@rollup/rollup-freebsd-arm64': 4.46.2 - '@rollup/rollup-freebsd-x64': 4.46.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.46.2 - '@rollup/rollup-linux-arm-musleabihf': 4.46.2 - '@rollup/rollup-linux-arm64-gnu': 4.46.2 - '@rollup/rollup-linux-arm64-musl': 4.46.2 - '@rollup/rollup-linux-loongarch64-gnu': 4.46.2 - '@rollup/rollup-linux-ppc64-gnu': 4.46.2 - '@rollup/rollup-linux-riscv64-gnu': 4.46.2 - '@rollup/rollup-linux-riscv64-musl': 4.46.2 - '@rollup/rollup-linux-s390x-gnu': 4.46.2 - '@rollup/rollup-linux-x64-gnu': 4.46.2 - '@rollup/rollup-linux-x64-musl': 4.46.2 - '@rollup/rollup-win32-arm64-msvc': 4.46.2 - '@rollup/rollup-win32-ia32-msvc': 4.46.2 - '@rollup/rollup-win32-x64-msvc': 4.46.2 + '@rollup/rollup-android-arm-eabi': 4.50.1 + '@rollup/rollup-android-arm64': 4.50.1 + '@rollup/rollup-darwin-arm64': 4.50.1 + '@rollup/rollup-darwin-x64': 4.50.1 + '@rollup/rollup-freebsd-arm64': 4.50.1 + '@rollup/rollup-freebsd-x64': 4.50.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.50.1 + '@rollup/rollup-linux-arm-musleabihf': 4.50.1 + '@rollup/rollup-linux-arm64-gnu': 4.50.1 + '@rollup/rollup-linux-arm64-musl': 4.50.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.50.1 + '@rollup/rollup-linux-ppc64-gnu': 4.50.1 + '@rollup/rollup-linux-riscv64-gnu': 4.50.1 + '@rollup/rollup-linux-riscv64-musl': 4.50.1 + '@rollup/rollup-linux-s390x-gnu': 4.50.1 + '@rollup/rollup-linux-x64-gnu': 4.50.1 + '@rollup/rollup-linux-x64-musl': 4.50.1 + '@rollup/rollup-openharmony-arm64': 4.50.1 + '@rollup/rollup-win32-arm64-msvc': 4.50.1 + '@rollup/rollup-win32-ia32-msvc': 4.50.1 + '@rollup/rollup-win32-x64-msvc': 4.50.1 fsevents: 2.3.3 rxjs@7.8.2: @@ -5074,16 +5110,21 @@ snapshots: type-fest: 0.16.0 unique-string: 2.0.0 - terser@5.43.1: + terser@5.44.0: dependencies: - '@jridgewell/source-map': 0.3.10 + '@jridgewell/source-map': 0.3.11 acorn: 8.15.0 commander: 2.20.3 source-map-support: 0.5.21 tinyglobby@0.2.14: dependencies: - fdir: 6.4.6(picomatch@4.0.3) + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 to-regex-range@5.0.1: @@ -5152,7 +5193,7 @@ snapshots: unicode-canonical-property-names-ecmascript: 2.0.1 unicode-property-aliases-ecmascript: 2.1.0 - unicode-match-property-value-ecmascript@2.2.0: {} + unicode-match-property-value-ecmascript@2.2.1: {} unicode-property-aliases-ecmascript@2.1.0: {} @@ -5168,9 +5209,9 @@ snapshots: upath@1.2.0: {} - update-browserslist-db@1.1.3(browserslist@4.25.1): + update-browserslist-db@1.1.3(browserslist@4.25.4): dependencies: - browserslist: 4.25.1 + browserslist: 4.25.4 escalade: 3.2.0 picocolors: 1.1.1 @@ -5184,30 +5225,30 @@ snapshots: varint@6.0.0: {} - vite-plugin-pwa@1.0.2(vite@7.0.6(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.43.1)(yaml@2.8.1))(workbox-build@7.3.0)(workbox-window@7.3.0): + vite-plugin-pwa@1.0.2(vite@7.0.7(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.44.0)(yaml@2.8.1))(workbox-build@7.3.0)(workbox-window@7.3.0): dependencies: debug: 4.4.1 pretty-bytes: 6.1.1 tinyglobby: 0.2.14 - vite: 7.0.6(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.43.1)(yaml@2.8.1) + vite: 7.0.7(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.44.0)(yaml@2.8.1) workbox-build: 7.3.0 workbox-window: 7.3.0 transitivePeerDependencies: - supports-color - vite@7.0.6(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.43.1)(yaml@2.8.1): + vite@7.0.7(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.44.0)(yaml@2.8.1): dependencies: - esbuild: 0.25.8 - fdir: 6.4.6(picomatch@4.0.3) + esbuild: 0.25.9 + fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.46.2 - tinyglobby: 0.2.14 + rollup: 4.50.1 + tinyglobby: 0.2.15 optionalDependencies: fsevents: 2.3.3 sass: 1.90.0 sass-embedded: 1.90.0 - terser: 5.43.1 + terser: 5.44.0 yaml: 2.8.1 vue-eslint-parser@9.4.3(eslint@9.32.0): @@ -5302,10 +5343,10 @@ snapshots: workbox-build@7.3.0: dependencies: '@apideck/better-ajv-errors': 0.3.6(ajv@8.17.1) - '@babel/core': 7.28.0 - '@babel/preset-env': 7.28.0(@babel/core@7.28.0) - '@babel/runtime': 7.28.2 - '@rollup/plugin-babel': 5.3.1(@babel/core@7.28.0)(rollup@2.79.2) + '@babel/core': 7.28.4 + '@babel/preset-env': 7.28.3(@babel/core@7.28.4) + '@babel/runtime': 7.28.4 + '@rollup/plugin-babel': 5.3.1(@babel/core@7.28.4)(rollup@2.79.2) '@rollup/plugin-node-resolve': 15.3.1(rollup@2.79.2) '@rollup/plugin-replace': 2.4.2(rollup@2.79.2) '@rollup/plugin-terser': 0.4.4(rollup@2.79.2) From 5eaa479b3c08fd57a5ac0d2e7f5fa9c3495c480a Mon Sep 17 00:00:00 2001 From: Jeremy Meyers Date: Sun, 21 Sep 2025 08:36:04 -0400 Subject: [PATCH 05/52] Update customservices.md (#887) updated paperless title to reflect active version of this project and added note about custom service info not showing up with subtitle enabled Co-authored-by: Bastien Wirtz --- docs/customservices.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/customservices.md b/docs/customservices.md index b8985e3..1970181 100644 --- a/docs/customservices.md +++ b/docs/customservices.md @@ -36,7 +36,7 @@ Available services are located in `src/components/`: - [Olivetin](#olivetin) - [OpenHAB](#openhab) - [OpenWeatherMap](#openweathermap) -- [PaperlessNG](#paperlessng) +- [Paperless-NGX](#paperlessng) - [PeaNUT](#peanut) - [PiAlert](#pialert) - [PiHole](#pihole) @@ -440,7 +440,7 @@ The following configuration is available for the OpenWeatherMap service: **Remarks:** If for some reason your city can't be found by entering the name in the `location` property, you could also try to configure the OWM city ID in the `locationId` property. To retrieve your specific City ID, go to the [OWM website](https://openweathermap.org), search for your city and retrieve the ID from the URL (for example, the City ID of Amsterdam is 2759794). -## PaperlessNG +## Paperless-NGX Displays total number of documents stored. From ee152fd20202d312f2209944e548c3a4713b998b Mon Sep 17 00:00:00 2001 From: 3thibaut1304 Date: Wed, 2 Jul 2025 12:56:04 +0200 Subject: [PATCH 06/52] fix service traefik with basic auth --- src/components/services/Traefik.vue | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/components/services/Traefik.vue b/src/components/services/Traefik.vue index 9d26bad..6d73779 100644 --- a/src/components/services/Traefik.vue +++ b/src/components/services/Traefik.vue @@ -42,7 +42,12 @@ export default { }, methods: { fetchStatus: async function () { - this.fetch("/api/version") + let headers = {}; + if (this.item.basic_auth) { + const encodedCredentials = btoa(this.item.basic_auth); + headers["Authorization"] = `Basic ${encodedCredentials}`; + } + this.fetch("/api/version", { headers }) .then((response) => { this.fetchOk = true; this.versionstring = response.Version; From a36634c2373a6b935d700e8420bd866d5de2b6f0 Mon Sep 17 00:00:00 2001 From: 3thibaut1304 Date: Wed, 2 Jul 2025 12:58:06 +0200 Subject: [PATCH 07/52] update customeservices docs --- docs/customservices.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/docs/customservices.md b/docs/customservices.md index 1970181..88d04b9 100644 --- a/docs/customservices.md +++ b/docs/customservices.md @@ -712,11 +712,14 @@ Displays the number of currently queued items for transcoding on your Tdarr inst Displays Traefik. ```yaml -- name: Traefik - type: Traefik - logo: assets/tools/sample.png - url: http://traefik.example.com +- name: "Traefik" + type: "Traefik" + logo: "assets/tools/sample.png" + url: "http://traefik.example.com" + basic_auth: "admin:password" ``` +- Authentication: If BasicAuth is set, credentials will be encoded in Base64 and sent as an Authorization header (Basic ). +- Format: The value must be formatted as "admin:password". ## Truenas Scale From 1f2c2058f6b043c29120a48894ea6dc484ec0112 Mon Sep 17 00:00:00 2001 From: Bastien Wirtz Date: Sun, 21 Sep 2025 14:44:44 +0200 Subject: [PATCH 08/52] doc: cosmetic update on Traefic documentation --- docs/customservices.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/customservices.md b/docs/customservices.md index 88d04b9..8ef2dc1 100644 --- a/docs/customservices.md +++ b/docs/customservices.md @@ -716,10 +716,10 @@ Displays Traefik. type: "Traefik" logo: "assets/tools/sample.png" url: "http://traefik.example.com" - basic_auth: "admin:password" + # basic_auth: "admin:password" # (Optional) Send Authorization header. ``` -- Authentication: If BasicAuth is set, credentials will be encoded in Base64 and sent as an Authorization header (Basic ). -- Format: The value must be formatted as "admin:password". + +**Authentication**: If BasicAuth is set, credentials will be encoded in Base64 and sent as an Authorization header (`Basic `). The value must be formatted as "admin:password". ## Truenas Scale From 8ce2daff4d19b0d5a4bf19a3754f7df6a9100c27 Mon Sep 17 00:00:00 2001 From: Bastien Wirtz Date: Sun, 21 Sep 2025 14:48:49 +0200 Subject: [PATCH 09/52] chore: dependencies updates --- package.json | 16 +- pnpm-lock.yaml | 467 +++++++++++++++++++++++-------------------------- 2 files changed, 231 insertions(+), 252 deletions(-) diff --git a/package.json b/package.json index 1727b3b..1363628 100644 --- a/package.json +++ b/package.json @@ -13,24 +13,24 @@ "@fortawesome/fontawesome-free": "^6.7.2", "bulma": "^1.0.4", "lodash.merge": "^4.6.2", - "vue": "^3.5.18", + "vue": "^3.5.21", "yaml": "^2.8.1" }, "devDependencies": { - "@eslint/js": "^9.32.0", + "@eslint/js": "^9.36.0", "@vitejs/plugin-vue": "^6.0.1", "@vue/eslint-config-prettier": "^10.2.0", - "eslint": "^9.32.0", + "eslint": "^9.36.0", "eslint-plugin-vue": "^9.33.0", - "globals": "^16.3.0", + "globals": "^16.4.0", "http-server": "^14.1.1", "prettier": "^3.6.2", - "sass-embedded": "^1.90.0", - "vite": "^7.0.7", - "vite-plugin-pwa": "^1.0.2" + "sass-embedded": "^1.93.0", + "vite": "^7.1.6", + "vite-plugin-pwa": "^1.0.3" }, "license": "Apache-2.0", - "packageManager": "pnpm@10.14.0+sha512.ad27a79641b49c3e481a16a805baa71817a04bbe06a38d17e60e2eaee83f6a146c6a688125f5792e48dd5ba30e7da52a5cda4c3992b9ccf333f9ce223af84748", + "packageManager": "pnpm@10.17.0+sha512.fce8a3dd29a4ed2ec566fb53efbb04d8c44a0f05bc6f24a73046910fb9c3ce7afa35a0980500668fa3573345bd644644fa98338fa168235c80f4aa17aa17fbef", "pnpm": { "neverBuiltDependencies": [] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9180bf0..574f12a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,30 +18,30 @@ importers: specifier: ^4.6.2 version: 4.6.2 vue: - specifier: ^3.5.18 - version: 3.5.18 + specifier: ^3.5.21 + version: 3.5.21 yaml: specifier: ^2.8.1 version: 2.8.1 devDependencies: '@eslint/js': - specifier: ^9.32.0 - version: 9.32.0 + specifier: ^9.36.0 + version: 9.36.0 '@vitejs/plugin-vue': specifier: ^6.0.1 - version: 6.0.1(vite@7.0.7(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.18) + version: 6.0.1(vite@7.1.6(sass-embedded@1.93.0)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.21) '@vue/eslint-config-prettier': specifier: ^10.2.0 - version: 10.2.0(eslint@9.32.0)(prettier@3.6.2) + version: 10.2.0(eslint@9.36.0)(prettier@3.6.2) eslint: - specifier: ^9.32.0 - version: 9.32.0 + specifier: ^9.36.0 + version: 9.36.0 eslint-plugin-vue: specifier: ^9.33.0 - version: 9.33.0(eslint@9.32.0) + version: 9.33.0(eslint@9.36.0) globals: - specifier: ^16.3.0 - version: 16.3.0 + specifier: ^16.4.0 + version: 16.4.0 http-server: specifier: ^14.1.1 version: 14.1.1 @@ -49,14 +49,14 @@ importers: specifier: ^3.6.2 version: 3.6.2 sass-embedded: - specifier: ^1.90.0 - version: 1.90.0 + specifier: ^1.93.0 + version: 1.93.0 vite: - specifier: ^7.0.7 - version: 7.0.7(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.44.0)(yaml@2.8.1) + specifier: ^7.1.6 + version: 7.1.6(sass-embedded@1.93.0)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1) vite-plugin-pwa: - specifier: ^1.0.2 - version: 1.0.2(vite@7.0.7(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.44.0)(yaml@2.8.1))(workbox-build@7.3.0)(workbox-window@7.3.0) + specifier: ^1.0.3 + version: 1.0.3(vite@7.1.6(sass-embedded@1.93.0)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))(workbox-build@7.3.0)(workbox-window@7.3.0) packages: @@ -169,11 +169,6 @@ packages: resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.0': - resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.28.4': resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} engines: {node: '>=6.0.0'} @@ -562,10 +557,6 @@ packages: resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.2': - resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} - engines: {node: '>=6.9.0'} - '@babel/types@7.28.4': resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} engines: {node: '>=6.9.0'} @@ -735,6 +726,12 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/eslint-utils@4.9.0': + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/regexpp@4.12.1': resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -743,28 +740,28 @@ packages: resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.3.0': - resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==} + '@eslint/config-helpers@0.3.1': + resolution: {integrity: sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.15.1': - resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==} + '@eslint/core@0.15.2': + resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.32.0': - resolution: {integrity: sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==} + '@eslint/js@9.36.0': + resolution: {integrity: sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.3.4': - resolution: {integrity: sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==} + '@eslint/plugin-kit@0.3.5': + resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@fortawesome/fontawesome-free@6.7.2': @@ -804,9 +801,6 @@ packages: '@jridgewell/source-map@0.3.11': resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} - '@jridgewell/sourcemap-codec@1.5.4': - resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} - '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} @@ -1081,17 +1075,17 @@ packages: vite: ^5.0.0 || ^6.0.0 || ^7.0.0 vue: ^3.2.25 - '@vue/compiler-core@3.5.18': - resolution: {integrity: sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==} + '@vue/compiler-core@3.5.21': + resolution: {integrity: sha512-8i+LZ0vf6ZgII5Z9XmUvrCyEzocvWT+TeR2VBUVlzIH6Tyv57E20mPZ1bCS+tbejgUgmjrEh7q/0F0bibskAmw==} - '@vue/compiler-dom@3.5.18': - resolution: {integrity: sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==} + '@vue/compiler-dom@3.5.21': + resolution: {integrity: sha512-jNtbu/u97wiyEBJlJ9kmdw7tAr5Vy0Aj5CgQmo+6pxWNQhXZDPsRr1UWPN4v3Zf82s2H3kF51IbzZ4jMWAgPlQ==} - '@vue/compiler-sfc@3.5.18': - resolution: {integrity: sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==} + '@vue/compiler-sfc@3.5.21': + resolution: {integrity: sha512-SXlyk6I5eUGBd2v8Ie7tF6ADHE9kCR6mBEuPyH1nUZ0h6Xx6nZI29i12sJKQmzbDyr2tUHMhhTt51Z6blbkTTQ==} - '@vue/compiler-ssr@3.5.18': - resolution: {integrity: sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==} + '@vue/compiler-ssr@3.5.21': + resolution: {integrity: sha512-vKQ5olH5edFZdf5ZrlEgSO1j1DMA4u23TVK5XR1uMhvwnYvVdDF0nHXJUblL/GvzlShQbjhZZ2uvYmDlAbgo9w==} '@vue/eslint-config-prettier@10.2.0': resolution: {integrity: sha512-GL3YBLwv/+b86yHcNNfPJxOTtVFJ4Mbc9UU3zR+KVoG7SwGTjPT+32fXamscNumElhcpXW3mT0DgzS9w32S7Bw==} @@ -1099,22 +1093,22 @@ packages: eslint: '>= 8.21.0' prettier: '>= 3.0.0' - '@vue/reactivity@3.5.18': - resolution: {integrity: sha512-x0vPO5Imw+3sChLM5Y+B6G1zPjwdOri9e8V21NnTnlEvkxatHEH5B5KEAJcjuzQ7BsjGrKtfzuQ5eQwXh8HXBg==} + '@vue/reactivity@3.5.21': + resolution: {integrity: sha512-3ah7sa+Cwr9iiYEERt9JfZKPw4A2UlbY8RbbnH2mGCE8NwHkhmlZt2VsH0oDA3P08X3jJd29ohBDtX+TbD9AsA==} - '@vue/runtime-core@3.5.18': - resolution: {integrity: sha512-DUpHa1HpeOQEt6+3nheUfqVXRog2kivkXHUhoqJiKR33SO4x+a5uNOMkV487WPerQkL0vUuRvq/7JhRgLW3S+w==} + '@vue/runtime-core@3.5.21': + resolution: {integrity: sha512-+DplQlRS4MXfIf9gfD1BOJpk5RSyGgGXD/R+cumhe8jdjUcq/qlxDawQlSI8hCKupBlvM+3eS1se5xW+SuNAwA==} - '@vue/runtime-dom@3.5.18': - resolution: {integrity: sha512-YwDj71iV05j4RnzZnZtGaXwPoUWeRsqinblgVJwR8XTXYZ9D5PbahHQgsbmzUvCWNF6x7siQ89HgnX5eWkr3mw==} + '@vue/runtime-dom@3.5.21': + resolution: {integrity: sha512-3M2DZsOFwM5qI15wrMmNF5RJe1+ARijt2HM3TbzBbPSuBHOQpoidE+Pa+XEaVN+czbHf81ETRoG1ltztP2em8w==} - '@vue/server-renderer@3.5.18': - resolution: {integrity: sha512-PvIHLUoWgSbDG7zLHqSqaCoZvHi6NNmfVFOqO+OnwvqMz/tqQr3FuGWS8ufluNddk7ZLBJYMrjcw1c6XzR12mA==} + '@vue/server-renderer@3.5.21': + resolution: {integrity: sha512-qr8AqgD3DJPJcGvLcJKQo2tAc8OnXRcfxhOJCPF+fcfn5bBGz7VCcO7t+qETOPxpWK1mgysXvVT/j+xWaHeMWA==} peerDependencies: - vue: 3.5.18 + vue: 3.5.21 - '@vue/shared@3.5.18': - resolution: {integrity: sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==} + '@vue/shared@3.5.21': + resolution: {integrity: sha512-+2k1EQpnYuVuu3N7atWyG3/xoFWIVJZq4Mz8XNOdScFI0etES75fbny/oU4lKWk/577P1zmg0ioYvpGEDZ3DLw==} acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -1420,8 +1414,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.32.0: - resolution: {integrity: sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==} + eslint@9.36.0: + resolution: {integrity: sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -1579,8 +1573,8 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@16.3.0: - resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==} + globals@16.4.0: + resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==} engines: {node: '>=18'} globalthis@1.0.4: @@ -1874,8 +1868,8 @@ packages: magic-string@0.25.9: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + magic-string@0.30.19: + resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} @@ -2113,117 +2107,117 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sass-embedded-all-unknown@1.90.0: - resolution: {integrity: sha512-/n7jTQvI+hftDDrHzK19G4pxfDzOhtjuQO1K54ui1pT2S0sWfWDjCYUbQgtWQ6FO7g5qWS0hgmrWdc7fmS3rgA==} + sass-embedded-all-unknown@1.93.0: + resolution: {integrity: sha512-fBTnh5qgOyw0CGVaF2iPsIIRj40D9Mnf19WerixjmWwmYKaGhxd62STsuMt6t1dWS5lkUZWRgrJ+2biQiEcCBg==} cpu: ['!arm', '!arm64', '!riscv64', '!x64'] - sass-embedded-android-arm64@1.90.0: - resolution: {integrity: sha512-bkTlewzWksa6Sj4Zs1CWiutnvUbsO3xuYh2QBRknXsOtuMlfTPoXnwhCnyE4lSvUxw2qxSbv+NdQev9qMfsBgA==} + sass-embedded-android-arm64@1.93.0: + resolution: {integrity: sha512-bwU+0uWUVoATaYAb9mnDj7GCEnNAIrinzT4UlA6GlicH+ELEZlNwVjaPJfdCyyYs8iOKuzUPfZrFZuwRCsXXqw==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [android] - sass-embedded-android-arm@1.90.0: - resolution: {integrity: sha512-usF6kVJQWa1CMgPH1nCT1y8KEmAT2fzB00dDIPBYHq8U5VZLCihi2bJRP5U9NlcwP1TlKGKCjwsbIdSjDKfecg==} + sass-embedded-android-arm@1.93.0: + resolution: {integrity: sha512-oMm6RafXdpWDejufUs+GcgBSS/wa/iG1zRhwsCrkIkMLhqa34oN7xLkNs9Ieg337nlIryUBijwAVMFlAs/mgIg==} engines: {node: '>=14.0.0'} cpu: [arm] os: [android] - sass-embedded-android-riscv64@1.90.0: - resolution: {integrity: sha512-bpqCIOaX+0Lou/BNJ4iJIKbWbVaYXFdg26C3gG6gxxKZRzp/6OYCxHrIQDwhKz6YC8Q5rwNPMpfDVYbWPcgroA==} + sass-embedded-android-riscv64@1.93.0: + resolution: {integrity: sha512-lKk7elql2abYeLY+wNBW8DB13W8An9JWlAr/BWOAtluz1RMsPVZwv0amQiP2PcR6HA02QDoLfRE/QpnPDHzCuw==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [android] - sass-embedded-android-x64@1.90.0: - resolution: {integrity: sha512-GNxVKnCMd/p2icZ+Q4mhvNk19NrLXq1C4guiqjrycHYQLEnxRkjbW1QXYiL+XyDn4e+Bcq0knzG0I9pMuNZxkg==} + sass-embedded-android-x64@1.93.0: + resolution: {integrity: sha512-wuyphs1VMS/PRXtCBLhA0bVo5nyKFCXKaVKMbqPylOTvoTHe7u0zxjWRN4eF5LTPVuQp0A+LYgJz07duzxwJew==} engines: {node: '>=14.0.0'} cpu: [x64] os: [android] - sass-embedded-darwin-arm64@1.90.0: - resolution: {integrity: sha512-qr4KBMJfBA+lzXiWnP00qzpLzHQzGd1OSK3VHcUFjZ8l7VOYf2R7Tc3fcTLhpaNPMJtTK0jrk8rFqBvsiZExnA==} + sass-embedded-darwin-arm64@1.93.0: + resolution: {integrity: sha512-lEb5J/jabesh16xdocRFgpzIa8GAZCLrdKtUnGbn9a4Y4WkEKHtUkvAm9ZtqE8YiuIm8PwHW/zBUKtZYoGYoYA==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [darwin] - sass-embedded-darwin-x64@1.90.0: - resolution: {integrity: sha512-z2nr1nNqtWDLVRwTbHtL7zriK90U7O/Gb15UaCSMYeAz9Y+wog5s/sDEKm0+GsVdzzkaCaMZRWGN4jTilnUwmQ==} + sass-embedded-darwin-x64@1.93.0: + resolution: {integrity: sha512-mo9OfKyNF6MiFf711c+QGR7aPpFqAC9FttiLKPYH3RRBZQZU/UcG4mbg+yXfKbhZrJmYngbGiTzE9B+xiOz27Q==} engines: {node: '>=14.0.0'} cpu: [x64] os: [darwin] - sass-embedded-linux-arm64@1.90.0: - resolution: {integrity: sha512-SPMcGZuP71Fj8btCGtlBnv8h8DAbJn8EQfLzXs9oo6NGFFLVjNGiFpqGfgtUV6DLWCuaRyEFeViO7wZow/vKGQ==} + sass-embedded-linux-arm64@1.93.0: + resolution: {integrity: sha512-bJclpjTeP/qCu7zYLZQXROx4xIT3x+qfj/q92fripV9L9Oj2khfUm+2nW0Cq7DS6UrHphrWZ9QSnVYFhkCKtEA==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] - sass-embedded-linux-arm@1.90.0: - resolution: {integrity: sha512-FeBxI5Q2HvM3CCadcEcQgvWbDPVs2YEF0PZ87fbAVTCG8dV+iNnQreSz7GRJroknpvbRhm5t2gedvcgmTnPb2Q==} + sass-embedded-linux-arm@1.93.0: + resolution: {integrity: sha512-wtO2vB8rMc5zF29xwC3AMgmBgNgm3i3/8zog5vQBD4yddqCJ93JcWDjdUqYmq0H/DLD/Z7q91j6X/YgPq1WuEg==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] - sass-embedded-linux-musl-arm64@1.90.0: - resolution: {integrity: sha512-xLH7+PFq763MoEm3vI7hQk5E+nStiLWbijHEYW/tEtCbcQIphgzSkDItEezxXew3dU4EJ1jqrBUySPdoXFLqWA==} + sass-embedded-linux-musl-arm64@1.93.0: + resolution: {integrity: sha512-VH0zFGqsTy+lThHAm3y8Dpd/X4nC5DLJvk66+mJTg7rwblRhfPpsVO6n8QHeN5ZV1ATTnLh/PbZ7uEPiyAg2wg==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] - sass-embedded-linux-musl-arm@1.90.0: - resolution: {integrity: sha512-EB2z0fUXdUdvSoddf4DzdZQkD/xyreD72gwAi8YScgUvR4HMXI7bLcK/n78Rft6OnqvV8090hjC8FsLDo3x5xQ==} + sass-embedded-linux-musl-arm@1.93.0: + resolution: {integrity: sha512-mMGAy+2VLLTMDPDG/mfzMmoy09potXp/ZRPRsyJEYVjF0rQij6Iss3qsZbCjVJa4atLwBtPJ14M0NvqpAa2WIg==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] - sass-embedded-linux-musl-riscv64@1.90.0: - resolution: {integrity: sha512-L21UkOgnSrD+ERF+jo1IWneGv40t0ap9+3cI+wZWYhQS5MkxponhT9QaNU57JEDJwB9mOl01LVw14opz4SN+VQ==} + sass-embedded-linux-musl-riscv64@1.93.0: + resolution: {integrity: sha512-/a+MvExFEKvwPXyZsQ8b1DWYJMpTnXSdwpe9pDNkdTIcliMAtP952krCx14nBP0UqqNoU/TetyMR8H0WwyeJEA==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] - sass-embedded-linux-musl-x64@1.90.0: - resolution: {integrity: sha512-NeAycQlsdhFdnIeSmRmScYUyCd+uE+x15NLFunbF8M0PgCKurrUhaxgGKSuBbaK56FpxarKOHCqcOrWbemIGzQ==} + sass-embedded-linux-musl-x64@1.93.0: + resolution: {integrity: sha512-o168nV9QI5U+2LFBMmMecWzu6yJ7WJZZfQGlo4Frvg9vC3Em3W02GfAel+g9leJg+0PDnpJLqOsPdrngg25T/Q==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] - sass-embedded-linux-riscv64@1.90.0: - resolution: {integrity: sha512-lJopaQhW8S+kaQ61vMqq3c+bOurcf9RdZf2EmzQYpc2y1vT5cWfRNrRkbAgO/23IQxsk/fq3UIUnsjnyQmi6MA==} + sass-embedded-linux-riscv64@1.93.0: + resolution: {integrity: sha512-KYHED49coJQT633cBbqBfBOPmRe3yNbE+D2kqMONADBqzGyxHZpQRStCenhPmDabVLI4fgc3fn//6ubqH724jA==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] - sass-embedded-linux-x64@1.90.0: - resolution: {integrity: sha512-Cc061gBfMPwH9rN7neQaH36cvOQC+dFMSGIeX5qUOhrEL4Ng51iqBV6aI4RIB1jCFGth6eDydVRN1VdV9qom8A==} + sass-embedded-linux-x64@1.93.0: + resolution: {integrity: sha512-9OD9OlZ61dmz/BbW4n29l3v74//ibiQCmWu8YBoXVgxxgcbi+2CFv+vRE8guA73BgEdPComw0tpgD1FkW3v12g==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] - sass-embedded-unknown-all@1.90.0: - resolution: {integrity: sha512-DBGzHVCJDqtjTHZFohush9YTxd4ZxhIygIRTNRXnA0359woF9Z8AS7/YxfzwkqrTX5durSJa6ZamGFYVLoRphQ==} + sass-embedded-unknown-all@1.93.0: + resolution: {integrity: sha512-Hh9OPBMg+i1g8OzQyOtQuJg/3ncup4Z+FHdXNzPIeFXcIeS+TVuVQyvJfnB+hYgvVGyBJ+9ekuUYzB+1zA82nw==} os: ['!android', '!darwin', '!linux', '!win32'] - sass-embedded-win32-arm64@1.90.0: - resolution: {integrity: sha512-c3/vL/CATnaW3x/6kcNbCROEOUU7zvJpIURp7M9664GJj08/gLPRWKNruw0OkAPQ3C5TTQz7+/fQWEpRA6qmvA==} + sass-embedded-win32-arm64@1.93.0: + resolution: {integrity: sha512-3SNRTxBVk+c0Oyd4gCp4/KAQ+S6B9S5ihq5dxMMfWpvoQSUqn6mqhkEFrofG1oNlP7KsA2UzhTnFGDRid1An+A==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [win32] - sass-embedded-win32-x64@1.90.0: - resolution: {integrity: sha512-PFwdW7AYtCkwi3NfWFeexvIZEJ0nuShp8Bjjc3px756+18yYwBWa78F4TGdIQmJfpYKBhgkVjFOctwq+NCHntA==} + sass-embedded-win32-x64@1.93.0: + resolution: {integrity: sha512-6/RJGOdm3bwe71YJaYanQ81I6KA//T/a+MnKlRpP5zk5fy2ygAIGNeNr2ENEBu/KZCuFg7KY49g46v+hPKT6Ow==} engines: {node: '>=14.0.0'} cpu: [x64] os: [win32] - sass-embedded@1.90.0: - resolution: {integrity: sha512-XP1EltyLLfuU5FsGVjSz8PcT925oA3rDnJTWOEBHR42k62ZEbKTcZ4gVlFwKi0Ggzi5E8v1K2BplD8ELHwusYg==} + sass-embedded@1.93.0: + resolution: {integrity: sha512-dQACVfrbwKtvnrA0xH67YAdUYi6k7XcPg8uNF3DPf/VaJMQzduE1z5w3NFa9oVjtqXM4+FA9P7Qdv06Bzf614g==} engines: {node: '>=16.0.0'} hasBin: true - sass@1.90.0: - resolution: {integrity: sha512-9GUyuksjw70uNpb1MTYWsH9MQHOHY6kwfnkafC24+7aOMZn9+rVMBxRbLvw756mrBFbIsFg6Xw9IkR2Fnn3k+Q==} + sass@1.93.0: + resolution: {integrity: sha512-CQi5/AzCwiubU3dSqRDJ93RfOfg/hhpW1l6wCIvolmehfwgCI35R/0QDs1+R+Ygrl8jFawwwIojE2w47/mf94A==} engines: {node: '>=14.0.0'} hasBin: true @@ -2370,10 +2364,6 @@ packages: engines: {node: '>=10'} hasBin: true - tinyglobby@0.2.14: - resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} - engines: {node: '>=12.0.0'} - tinyglobby@0.2.15: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} @@ -2470,8 +2460,8 @@ packages: varint@6.0.0: resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} - vite-plugin-pwa@1.0.2: - resolution: {integrity: sha512-O3UwjsCnoDclgJANoOgzzqW7SFgwXE/th2OmUP/ILxHKwzWxxKDBu+B/Xa9Cv4IgSVSnj2HgRVIJ7F15+vQFkA==} + vite-plugin-pwa@1.0.3: + resolution: {integrity: sha512-/OpqIpUldALGxcsEnv/ekQiQ5xHkQ53wcoN5ewX4jiIDNGs3W+eNcI1WYZeyOLmzoEjg09D7aX0O89YGjen1aw==} engines: {node: '>=16.0.0'} peerDependencies: '@vite-pwa/assets-generator': ^1.0.0 @@ -2482,8 +2472,8 @@ packages: '@vite-pwa/assets-generator': optional: true - vite@7.0.7: - resolution: {integrity: sha512-hc6LujN/EkJHmxeiDJMs0qBontZ1cdBvvoCbWhVjzUFTU329VRyOC46gHNSA8NcOC5yzCeXpwI40tieI3DEZqg==} + vite@7.1.6: + resolution: {integrity: sha512-SRYIB8t/isTwNn8vMB3MR6E+EQZM/WG1aKmmIUCfDXfVvKfc20ZpamngWHKzAmmu9ppsgxsg4b2I7c90JZudIQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -2528,8 +2518,8 @@ packages: peerDependencies: eslint: '>=6.0.0' - vue@3.5.18: - resolution: {integrity: sha512-7W4Y4ZbMiQ3SEo+m9lnoNpV9xG7QVMLa+/0RFwwiAVkeYoyGXqWE85jabU4pllJNUzqfLShJ5YLptewhCWUgNA==} + vue@3.5.21: + resolution: {integrity: sha512-xxf9rum9KtOdwdRkiApWL+9hZEMWE90FHh8yS1+KJAiWYh+iGWV1FquPjoO9VUHQ+VIhsCXNNyZ5Sf4++RVZBA==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -2802,10 +2792,6 @@ snapshots: '@babel/template': 7.27.2 '@babel/types': 7.28.4 - '@babel/parser@7.28.0': - dependencies: - '@babel/types': 7.28.2 - '@babel/parser@7.28.4': dependencies: '@babel/types': 7.28.4 @@ -3301,11 +3287,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/types@7.28.2': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/types@7.28.4': dependencies: '@babel/helper-string-parser': 7.27.1 @@ -3391,9 +3372,14 @@ snapshots: '@esbuild/win32-x64@0.25.9': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.32.0)': + '@eslint-community/eslint-utils@4.7.0(eslint@9.36.0)': dependencies: - eslint: 9.32.0 + eslint: 9.36.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/eslint-utils@4.9.0(eslint@9.36.0)': + dependencies: + eslint: 9.36.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -3406,9 +3392,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.3.0': {} + '@eslint/config-helpers@0.3.1': {} - '@eslint/core@0.15.1': + '@eslint/core@0.15.2': dependencies: '@types/json-schema': 7.0.15 @@ -3426,13 +3412,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.32.0': {} + '@eslint/js@9.36.0': {} '@eslint/object-schema@2.1.6': {} - '@eslint/plugin-kit@0.3.4': + '@eslint/plugin-kit@0.3.5': dependencies: - '@eslint/core': 0.15.1 + '@eslint/core': 0.15.2 levn: 0.4.1 '@fortawesome/fontawesome-free@6.7.2': {} @@ -3467,8 +3453,6 @@ snapshots: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.30 - '@jridgewell/sourcemap-codec@1.5.4': {} - '@jridgewell/sourcemap-codec@1.5.5': {} '@jridgewell/trace-mapping@0.3.30': @@ -3669,74 +3653,74 @@ snapshots: '@types/trusted-types@2.0.7': {} - '@vitejs/plugin-vue@6.0.1(vite@7.0.7(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.18)': + '@vitejs/plugin-vue@6.0.1(vite@7.1.6(sass-embedded@1.93.0)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.21)': dependencies: '@rolldown/pluginutils': 1.0.0-beta.29 - vite: 7.0.7(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.44.0)(yaml@2.8.1) - vue: 3.5.18 + vite: 7.1.6(sass-embedded@1.93.0)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1) + vue: 3.5.21 - '@vue/compiler-core@3.5.18': + '@vue/compiler-core@3.5.21': dependencies: - '@babel/parser': 7.28.0 - '@vue/shared': 3.5.18 + '@babel/parser': 7.28.4 + '@vue/shared': 3.5.21 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-dom@3.5.18': + '@vue/compiler-dom@3.5.21': dependencies: - '@vue/compiler-core': 3.5.18 - '@vue/shared': 3.5.18 + '@vue/compiler-core': 3.5.21 + '@vue/shared': 3.5.21 - '@vue/compiler-sfc@3.5.18': + '@vue/compiler-sfc@3.5.21': dependencies: - '@babel/parser': 7.28.0 - '@vue/compiler-core': 3.5.18 - '@vue/compiler-dom': 3.5.18 - '@vue/compiler-ssr': 3.5.18 - '@vue/shared': 3.5.18 + '@babel/parser': 7.28.4 + '@vue/compiler-core': 3.5.21 + '@vue/compiler-dom': 3.5.21 + '@vue/compiler-ssr': 3.5.21 + '@vue/shared': 3.5.21 estree-walker: 2.0.2 - magic-string: 0.30.17 + magic-string: 0.30.19 postcss: 8.5.6 source-map-js: 1.2.1 - '@vue/compiler-ssr@3.5.18': + '@vue/compiler-ssr@3.5.21': dependencies: - '@vue/compiler-dom': 3.5.18 - '@vue/shared': 3.5.18 + '@vue/compiler-dom': 3.5.21 + '@vue/shared': 3.5.21 - '@vue/eslint-config-prettier@10.2.0(eslint@9.32.0)(prettier@3.6.2)': + '@vue/eslint-config-prettier@10.2.0(eslint@9.36.0)(prettier@3.6.2)': dependencies: - eslint: 9.32.0 - eslint-config-prettier: 10.1.8(eslint@9.32.0) - eslint-plugin-prettier: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.32.0))(eslint@9.32.0)(prettier@3.6.2) + eslint: 9.36.0 + eslint-config-prettier: 10.1.8(eslint@9.36.0) + eslint-plugin-prettier: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.36.0))(eslint@9.36.0)(prettier@3.6.2) prettier: 3.6.2 transitivePeerDependencies: - '@types/eslint' - '@vue/reactivity@3.5.18': + '@vue/reactivity@3.5.21': dependencies: - '@vue/shared': 3.5.18 + '@vue/shared': 3.5.21 - '@vue/runtime-core@3.5.18': + '@vue/runtime-core@3.5.21': dependencies: - '@vue/reactivity': 3.5.18 - '@vue/shared': 3.5.18 + '@vue/reactivity': 3.5.21 + '@vue/shared': 3.5.21 - '@vue/runtime-dom@3.5.18': + '@vue/runtime-dom@3.5.21': dependencies: - '@vue/reactivity': 3.5.18 - '@vue/runtime-core': 3.5.18 - '@vue/shared': 3.5.18 + '@vue/reactivity': 3.5.21 + '@vue/runtime-core': 3.5.21 + '@vue/shared': 3.5.21 csstype: 3.1.3 - '@vue/server-renderer@3.5.18(vue@3.5.18)': + '@vue/server-renderer@3.5.21(vue@3.5.21)': dependencies: - '@vue/compiler-ssr': 3.5.18 - '@vue/shared': 3.5.18 - vue: 3.5.18 + '@vue/compiler-ssr': 3.5.21 + '@vue/shared': 3.5.21 + vue: 3.5.21 - '@vue/shared@3.5.18': {} + '@vue/shared@3.5.21': {} acorn-jsx@5.3.2(acorn@8.15.0): dependencies: @@ -4079,29 +4063,29 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.1.8(eslint@9.32.0): + eslint-config-prettier@10.1.8(eslint@9.36.0): dependencies: - eslint: 9.32.0 + eslint: 9.36.0 - eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.32.0))(eslint@9.32.0)(prettier@3.6.2): + eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.36.0))(eslint@9.36.0)(prettier@3.6.2): dependencies: - eslint: 9.32.0 + eslint: 9.36.0 prettier: 3.6.2 prettier-linter-helpers: 1.0.0 synckit: 0.11.11 optionalDependencies: - eslint-config-prettier: 10.1.8(eslint@9.32.0) + eslint-config-prettier: 10.1.8(eslint@9.36.0) - eslint-plugin-vue@9.33.0(eslint@9.32.0): + eslint-plugin-vue@9.33.0(eslint@9.36.0): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0) - eslint: 9.32.0 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.36.0) + eslint: 9.36.0 globals: 13.24.0 natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 6.1.2 semver: 7.7.2 - vue-eslint-parser: 9.4.3(eslint@9.32.0) + vue-eslint-parser: 9.4.3(eslint@9.36.0) xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color @@ -4120,16 +4104,16 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.32.0: + eslint@9.36.0: dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 - '@eslint/config-helpers': 0.3.0 - '@eslint/core': 0.15.1 + '@eslint/config-helpers': 0.3.1 + '@eslint/core': 0.15.2 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.32.0 - '@eslint/plugin-kit': 0.3.4 + '@eslint/js': 9.36.0 + '@eslint/plugin-kit': 0.3.5 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 @@ -4307,7 +4291,7 @@ snapshots: globals@14.0.0: {} - globals@16.3.0: {} + globals@16.4.0: {} globalthis@1.0.4: dependencies: @@ -4590,9 +4574,9 @@ snapshots: dependencies: sourcemap-codec: 1.4.8 - magic-string@0.30.17: + magic-string@0.30.19: dependencies: - '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/sourcemap-codec': 1.5.5 math-intrinsics@1.1.0: {} @@ -4847,65 +4831,65 @@ snapshots: safer-buffer@2.1.2: {} - sass-embedded-all-unknown@1.90.0: + sass-embedded-all-unknown@1.93.0: dependencies: - sass: 1.90.0 + sass: 1.93.0 optional: true - sass-embedded-android-arm64@1.90.0: + sass-embedded-android-arm64@1.93.0: optional: true - sass-embedded-android-arm@1.90.0: + sass-embedded-android-arm@1.93.0: optional: true - sass-embedded-android-riscv64@1.90.0: + sass-embedded-android-riscv64@1.93.0: optional: true - sass-embedded-android-x64@1.90.0: + sass-embedded-android-x64@1.93.0: optional: true - sass-embedded-darwin-arm64@1.90.0: + sass-embedded-darwin-arm64@1.93.0: optional: true - sass-embedded-darwin-x64@1.90.0: + sass-embedded-darwin-x64@1.93.0: optional: true - sass-embedded-linux-arm64@1.90.0: + sass-embedded-linux-arm64@1.93.0: optional: true - sass-embedded-linux-arm@1.90.0: + sass-embedded-linux-arm@1.93.0: optional: true - sass-embedded-linux-musl-arm64@1.90.0: + sass-embedded-linux-musl-arm64@1.93.0: optional: true - sass-embedded-linux-musl-arm@1.90.0: + sass-embedded-linux-musl-arm@1.93.0: optional: true - sass-embedded-linux-musl-riscv64@1.90.0: + sass-embedded-linux-musl-riscv64@1.93.0: optional: true - sass-embedded-linux-musl-x64@1.90.0: + sass-embedded-linux-musl-x64@1.93.0: optional: true - sass-embedded-linux-riscv64@1.90.0: + sass-embedded-linux-riscv64@1.93.0: optional: true - sass-embedded-linux-x64@1.90.0: + sass-embedded-linux-x64@1.93.0: optional: true - sass-embedded-unknown-all@1.90.0: + sass-embedded-unknown-all@1.93.0: dependencies: - sass: 1.90.0 + sass: 1.93.0 optional: true - sass-embedded-win32-arm64@1.90.0: + sass-embedded-win32-arm64@1.93.0: optional: true - sass-embedded-win32-x64@1.90.0: + sass-embedded-win32-x64@1.93.0: optional: true - sass-embedded@1.90.0: + sass-embedded@1.93.0: dependencies: '@bufbuild/protobuf': 2.6.3 buffer-builder: 0.2.0 @@ -4916,26 +4900,26 @@ snapshots: sync-child-process: 1.0.2 varint: 6.0.0 optionalDependencies: - sass-embedded-all-unknown: 1.90.0 - sass-embedded-android-arm: 1.90.0 - sass-embedded-android-arm64: 1.90.0 - sass-embedded-android-riscv64: 1.90.0 - sass-embedded-android-x64: 1.90.0 - sass-embedded-darwin-arm64: 1.90.0 - sass-embedded-darwin-x64: 1.90.0 - sass-embedded-linux-arm: 1.90.0 - sass-embedded-linux-arm64: 1.90.0 - sass-embedded-linux-musl-arm: 1.90.0 - sass-embedded-linux-musl-arm64: 1.90.0 - sass-embedded-linux-musl-riscv64: 1.90.0 - sass-embedded-linux-musl-x64: 1.90.0 - sass-embedded-linux-riscv64: 1.90.0 - sass-embedded-linux-x64: 1.90.0 - sass-embedded-unknown-all: 1.90.0 - sass-embedded-win32-arm64: 1.90.0 - sass-embedded-win32-x64: 1.90.0 + sass-embedded-all-unknown: 1.93.0 + sass-embedded-android-arm: 1.93.0 + sass-embedded-android-arm64: 1.93.0 + sass-embedded-android-riscv64: 1.93.0 + sass-embedded-android-x64: 1.93.0 + sass-embedded-darwin-arm64: 1.93.0 + sass-embedded-darwin-x64: 1.93.0 + sass-embedded-linux-arm: 1.93.0 + sass-embedded-linux-arm64: 1.93.0 + sass-embedded-linux-musl-arm: 1.93.0 + sass-embedded-linux-musl-arm64: 1.93.0 + sass-embedded-linux-musl-riscv64: 1.93.0 + sass-embedded-linux-musl-x64: 1.93.0 + sass-embedded-linux-riscv64: 1.93.0 + sass-embedded-linux-x64: 1.93.0 + sass-embedded-unknown-all: 1.93.0 + sass-embedded-win32-arm64: 1.93.0 + sass-embedded-win32-x64: 1.93.0 - sass@1.90.0: + sass@1.93.0: dependencies: chokidar: 4.0.3 immutable: 5.1.3 @@ -5117,11 +5101,6 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 - tinyglobby@0.2.14: - dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.3) @@ -5225,18 +5204,18 @@ snapshots: varint@6.0.0: {} - vite-plugin-pwa@1.0.2(vite@7.0.7(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.44.0)(yaml@2.8.1))(workbox-build@7.3.0)(workbox-window@7.3.0): + vite-plugin-pwa@1.0.3(vite@7.1.6(sass-embedded@1.93.0)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1))(workbox-build@7.3.0)(workbox-window@7.3.0): dependencies: debug: 4.4.1 pretty-bytes: 6.1.1 - tinyglobby: 0.2.14 - vite: 7.0.7(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.44.0)(yaml@2.8.1) + tinyglobby: 0.2.15 + vite: 7.1.6(sass-embedded@1.93.0)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1) workbox-build: 7.3.0 workbox-window: 7.3.0 transitivePeerDependencies: - supports-color - vite@7.0.7(sass-embedded@1.90.0)(sass@1.90.0)(terser@5.44.0)(yaml@2.8.1): + vite@7.1.6(sass-embedded@1.93.0)(sass@1.93.0)(terser@5.44.0)(yaml@2.8.1): dependencies: esbuild: 0.25.9 fdir: 6.5.0(picomatch@4.0.3) @@ -5246,15 +5225,15 @@ snapshots: tinyglobby: 0.2.15 optionalDependencies: fsevents: 2.3.3 - sass: 1.90.0 - sass-embedded: 1.90.0 + sass: 1.93.0 + sass-embedded: 1.93.0 terser: 5.44.0 yaml: 2.8.1 - vue-eslint-parser@9.4.3(eslint@9.32.0): + vue-eslint-parser@9.4.3(eslint@9.36.0): dependencies: debug: 4.4.1 - eslint: 9.32.0 + eslint: 9.36.0 eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 @@ -5264,13 +5243,13 @@ snapshots: transitivePeerDependencies: - supports-color - vue@3.5.18: + vue@3.5.21: dependencies: - '@vue/compiler-dom': 3.5.18 - '@vue/compiler-sfc': 3.5.18 - '@vue/runtime-dom': 3.5.18 - '@vue/server-renderer': 3.5.18(vue@3.5.18) - '@vue/shared': 3.5.18 + '@vue/compiler-dom': 3.5.21 + '@vue/compiler-sfc': 3.5.21 + '@vue/runtime-dom': 3.5.21 + '@vue/server-renderer': 3.5.21(vue@3.5.21) + '@vue/shared': 3.5.21 webidl-conversions@4.0.2: {} From 2df7d5947baa2f21856eff19c3b322dbc6e61b54 Mon Sep 17 00:00:00 2001 From: Bastien Wirtz Date: Sun, 21 Sep 2025 14:50:10 +0200 Subject: [PATCH 10/52] chore: add ai generated data for missing mocks --- dummy-data/adguardhome/control/stats | 51 +++ dummy-data/adguardhome/control/status | 16 + dummy-data/dockersocketproxy/containers/json | 215 +++++++++++ dummy-data/emby/System/info/public | 24 ++ dummy-data/emby/items/counts | 12 + dummy-data/gotify/health | 4 + dummy-data/gotify/message | 65 ++++ dummy-data/healthchecks/api/v1/checks | 95 +++++ dummy-data/homeassistant/api/config | 45 +++ dummy-data/homeassistant/api/states | 141 ++++++++ dummy-data/homeassistant/api_root | 3 + dummy-data/immich/api/server/statistics | 41 +++ dummy-data/jellystat/proxy/getSessions | 342 ++++++++++++++++++ dummy-data/lidarr/api/v1/health | 35 ++ dummy-data/lidarr/api/v1/queue/status | 7 + dummy-data/lidarr/api/v1/wanted/missing | 179 +++++++++ dummy-data/linkding/api/bookmarks | 61 ++++ .../matrix/_matrix/federation/v1/version | 6 + dummy-data/mealie/api/admin/about/statistics | 18 + dummy-data/mealie/api/groups/mealplans/today | 64 ++++ dummy-data/medusa/api/v2/config | 108 ++++++ dummy-data/nextcloud/status.php | 10 + dummy-data/paperlessng/api/documents | 88 +++++ dummy-data/plex/library/sections | 12 + dummy-data/plex/library/sections1all | 7 + dummy-data/plex/library/sections2all | 13 + dummy-data/plex/status/sessions | 19 + dummy-data/portainer/api/endpoints | 94 +++++ dummy-data/portainer/api/endpoints.backup | 94 +++++ dummy-data/portainer/api/status | 38 ++ dummy-data/prometheus/api/v1/alerts | 99 +++++ dummy-data/prowlarr/api/v1/health | 41 +++ dummy-data/radarr/api/v3/health | 35 ++ dummy-data/radarr/api/v3/queue | 8 + dummy-data/radarr/api/v3/queuedetails | 16 + dummy-data/radarr/api/v3/wanted/missing | 161 +++++++++ dummy-data/sabnzbd/api | 97 +++++ dummy-data/scrutiny/api/summary | 162 +++++++++ dummy-data/sonarr/api/v3/health | 29 ++ dummy-data/sonarr/api/v3/queue | 77 ++++ dummy-data/sonarr/api/v3/wanted/missing | 129 +++++++ dummy-data/tautulli/api/v2 | 185 ++++++++++ .../truenasscale/api/v2.0/system/version | 1 + dummy-data/uptimekuma/api/status-page/default | 64 ++++ .../api/status-page/heartbeat/default | 114 ++++++ dummy-data/vaultwarden/api/version | 1 + dummy-data/wud/api/containers | 182 ++++++++++ 47 files changed, 3308 insertions(+) create mode 100644 dummy-data/adguardhome/control/stats create mode 100644 dummy-data/adguardhome/control/status create mode 100644 dummy-data/dockersocketproxy/containers/json create mode 100644 dummy-data/emby/System/info/public create mode 100644 dummy-data/emby/items/counts create mode 100644 dummy-data/gotify/health create mode 100644 dummy-data/gotify/message create mode 100644 dummy-data/healthchecks/api/v1/checks create mode 100644 dummy-data/homeassistant/api/config create mode 100644 dummy-data/homeassistant/api/states create mode 100644 dummy-data/homeassistant/api_root create mode 100644 dummy-data/immich/api/server/statistics create mode 100644 dummy-data/jellystat/proxy/getSessions create mode 100644 dummy-data/lidarr/api/v1/health create mode 100644 dummy-data/lidarr/api/v1/queue/status create mode 100644 dummy-data/lidarr/api/v1/wanted/missing create mode 100644 dummy-data/linkding/api/bookmarks create mode 100644 dummy-data/matrix/_matrix/federation/v1/version create mode 100644 dummy-data/mealie/api/admin/about/statistics create mode 100644 dummy-data/mealie/api/groups/mealplans/today create mode 100644 dummy-data/medusa/api/v2/config create mode 100644 dummy-data/nextcloud/status.php create mode 100644 dummy-data/paperlessng/api/documents create mode 100644 dummy-data/plex/library/sections create mode 100644 dummy-data/plex/library/sections1all create mode 100644 dummy-data/plex/library/sections2all create mode 100644 dummy-data/plex/status/sessions create mode 100644 dummy-data/portainer/api/endpoints create mode 100644 dummy-data/portainer/api/endpoints.backup create mode 100644 dummy-data/portainer/api/status create mode 100644 dummy-data/prometheus/api/v1/alerts create mode 100644 dummy-data/prowlarr/api/v1/health create mode 100644 dummy-data/radarr/api/v3/health create mode 100644 dummy-data/radarr/api/v3/queue create mode 100644 dummy-data/radarr/api/v3/queuedetails create mode 100644 dummy-data/radarr/api/v3/wanted/missing create mode 100644 dummy-data/sabnzbd/api create mode 100644 dummy-data/scrutiny/api/summary create mode 100644 dummy-data/sonarr/api/v3/health create mode 100644 dummy-data/sonarr/api/v3/queue create mode 100644 dummy-data/sonarr/api/v3/wanted/missing create mode 100644 dummy-data/tautulli/api/v2 create mode 100644 dummy-data/truenasscale/api/v2.0/system/version create mode 100644 dummy-data/uptimekuma/api/status-page/default create mode 100644 dummy-data/uptimekuma/api/status-page/heartbeat/default create mode 100644 dummy-data/vaultwarden/api/version create mode 100644 dummy-data/wud/api/containers diff --git a/dummy-data/adguardhome/control/stats b/dummy-data/adguardhome/control/stats new file mode 100644 index 0000000..c2c8815 --- /dev/null +++ b/dummy-data/adguardhome/control/stats @@ -0,0 +1,51 @@ +{ + "time_units": "hours", + "num_dns_queries": 28947, + "num_blocked_filtering": 12489, + "num_replaced_safebrowsing": 0, + "num_replaced_safesearch": 0, + "num_replaced_parental": 0, + "avg_processing_time": 0.34, + "top_queried_domains": [ + { + "name": "example.com", + "count": 1289 + }, + { + "name": "api.github.com", + "count": 892 + } + ], + "top_clients": [ + { + "name": "192.168.1.100", + "count": 8945 + }, + { + "name": "192.168.1.101", + "count": 6234 + } + ], + "top_blocked_domains": [ + { + "name": "ads.google.com", + "count": 1245 + }, + { + "name": "tracker.example.com", + "count": 987 + } + ], + "dns_queries": [ + 12450, 13200, 14100, 13800, 12900, 11200, 10800, 9600, 8200, 7800, + 9200, 10500, 12100, 13600, 14800, 15200, 14900, 13700, 12800, 11900, + 11200, 10800, 10200, 9800 + ], + "blocked_filtering": [ + 5200, 5800, 6100, 5900, 5400, 4800, 4600, 4200, 3600, 3400, + 4000, 4500, 5200, 5800, 6300, 6500, 6300, 5800, 5400, 5100, + 4800, 4600, 4300, 4200 + ], + "replaced_safebrowsing": [], + "replaced_parental": [] +} \ No newline at end of file diff --git a/dummy-data/adguardhome/control/status b/dummy-data/adguardhome/control/status new file mode 100644 index 0000000..3c47165 --- /dev/null +++ b/dummy-data/adguardhome/control/status @@ -0,0 +1,16 @@ +{ + "protection_enabled": true, + "version": "v0.107.48", + "language": "en", + "dns_address": "127.0.0.1:53", + "dns_port": 53, + "protection_disabled_duration": null, + "http_port": 80, + "https_port": 443, + "querylog_enabled": true, + "querylog_size": 5000, + "querylog_size_memory": 1000, + "querylog_interval": 2160, + "dhcp_available": true, + "running": true +} \ No newline at end of file diff --git a/dummy-data/dockersocketproxy/containers/json b/dummy-data/dockersocketproxy/containers/json new file mode 100644 index 0000000..e41c72f --- /dev/null +++ b/dummy-data/dockersocketproxy/containers/json @@ -0,0 +1,215 @@ +[ + { + "Id": "8dfafdbc3a40", + "Names": ["/boring_feynman"], + "Image": "nginx:latest", + "ImageID": "sha256:f6d0b4767a6c", + "Command": "/docker-entrypoint.sh nginx -g 'daemon off;'", + "Created": 1640995200, + "Ports": [ + { + "IP": "0.0.0.0", + "PrivatePort": 80, + "PublicPort": 8080, + "Type": "tcp" + } + ], + "Labels": { + "maintainer": "NGINX Docker Maintainers " + }, + "State": "running", + "Status": "Up 2 hours", + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "IPAMConfig": null, + "Links": null, + "Aliases": null, + "NetworkID": "f2de39df4171", + "EndpointID": "2cdc4edb1ded", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.2", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:11:00:02" + } + } + }, + "Mounts": [] + }, + { + "Id": "9e87a2b84b8e", + "Names": ["/web-app"], + "Image": "node:16-alpine", + "ImageID": "sha256:c85b8f829d1f", + "Command": "npm start", + "Created": 1640991600, + "Ports": [ + { + "IP": "0.0.0.0", + "PrivatePort": 3000, + "PublicPort": 3000, + "Type": "tcp" + } + ], + "Labels": {}, + "State": "running", + "Status": "Up 3 hours", + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "IPAMConfig": null, + "Links": null, + "Aliases": null, + "NetworkID": "f2de39df4171", + "EndpointID": "3edc5fdb2efe", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.3", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:11:00:03" + } + } + }, + "Mounts": [ + { + "Type": "bind", + "Source": "/home/user/app", + "Destination": "/app", + "Mode": "", + "RW": true, + "Propagation": "rprivate" + } + ] + }, + { + "Id": "7b9a3c6d2e1f", + "Names": ["/database"], + "Image": "postgres:13", + "ImageID": "sha256:b4ed8d5b4f3a", + "Command": "docker-entrypoint.sh postgres", + "Created": 1640988000, + "Ports": [ + { + "IP": "127.0.0.1", + "PrivatePort": 5432, + "PublicPort": 5432, + "Type": "tcp" + } + ], + "Labels": {}, + "State": "dead", + "Status": "Up 4 hours", + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "IPAMConfig": null, + "Links": null, + "Aliases": null, + "NetworkID": "f2de39df4171", + "EndpointID": "4fdc6gdb3gfg", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.4", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:11:00:04" + } + } + }, + "Mounts": [ + { + "Type": "volume", + "Name": "postgres_data", + "Source": "/var/lib/docker/volumes/postgres_data/_data", + "Destination": "/var/lib/postgresql/data", + "Driver": "local", + "Mode": "rw", + "RW": true, + "Propagation": "" + } + ] + }, + { + "Id": "5c8d1f4e9a2b", + "Names": ["/old-service"], + "Image": "ubuntu:20.04", + "ImageID": "sha256:f643c72bc252", + "Command": "/bin/bash", + "Created": 1640984400, + "Ports": [], + "Labels": {}, + "State": "exited", + "Status": "Exited (0) 2 hours ago", + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "IPAMConfig": null, + "Links": null, + "Aliases": null, + "NetworkID": "", + "EndpointID": "", + "Gateway": "", + "IPAddress": "", + "IPPrefixLen": 0, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "" + } + } + }, + "Mounts": [] + }, + { + "Id": "1a2b3c4d5e6f", + "Names": ["/backup-job"], + "Image": "alpine:latest", + "ImageID": "sha256:c059bfaa849c", + "Command": "sh -c 'sleep 3600'", + "Created": 1640980800, + "Ports": [], + "Labels": {}, + "State": "exited", + "Status": "Exited (0) 30 minutes ago", + "HostConfig": { + "NetworkMode": "default" + }, + "NetworkSettings": { + "Networks": { + "bridge": { + "IPAMConfig": null, + "Links": null, + "Aliases": null, + "NetworkID": "", + "EndpointID": "", + "Gateway": "", + "IPAddress": "", + "IPPrefixLen": 0, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "" + } + } + }, + "Mounts": [] + } +] \ No newline at end of file diff --git a/dummy-data/emby/System/info/public b/dummy-data/emby/System/info/public new file mode 100644 index 0000000..ca727dc --- /dev/null +++ b/dummy-data/emby/System/info/public @@ -0,0 +1,24 @@ +{ + "LocalAddress": "192.168.1.100:8096", + "ServerName": "Homer-Emby-Server", + "Version": "4.8.8.0", + "ProductName": "Emby Server", + "OperatingSystem": "Linux", + "Id": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6", + "StartupWizardCompleted": true, + "SupportsLibraryMonitor": true, + "WebSocketPortNumber": 8096, + "CompletedInstallations": [], + "CanSelfRestart": true, + "CanSelfUpdate": true, + "CanLaunchWebBrowser": false, + "WanAddress": "192.168.1.100:8096", + "HasUpdateAvailable": false, + "SupportsAutoRunAtStartup": false, + "TranscodingTempPath": "/var/lib/emby/transcoding-temp", + "CachePath": "/var/lib/emby/cache", + "LogPath": "/var/log/emby", + "InternalMetadataPath": "/var/lib/emby/metadata", + "ItemsByNamePath": "/var/lib/emby/metadata/People", + "ProgramDataPath": "/var/lib/emby" +} \ No newline at end of file diff --git a/dummy-data/emby/items/counts b/dummy-data/emby/items/counts new file mode 100644 index 0000000..4c5243f --- /dev/null +++ b/dummy-data/emby/items/counts @@ -0,0 +1,12 @@ +{ + "MovieCount": 1247, + "SeriesCount": 89, + "EpisodeCount": 2156, + "ArtistCount": 234, + "AlbumCount": 567, + "SongCount": 8923, + "MusicVideoCount": 42, + "BoxSetCount": 23, + "BookCount": 156, + "ItemCount": 13437 +} \ No newline at end of file diff --git a/dummy-data/gotify/health b/dummy-data/gotify/health new file mode 100644 index 0000000..6df9f42 --- /dev/null +++ b/dummy-data/gotify/health @@ -0,0 +1,4 @@ +{ + "health": "green", + "database": "green" +} \ No newline at end of file diff --git a/dummy-data/gotify/message b/dummy-data/gotify/message new file mode 100644 index 0000000..3909775 --- /dev/null +++ b/dummy-data/gotify/message @@ -0,0 +1,65 @@ +{ + "messages": [ + { + "id": 1, + "appid": 1, + "message": "System backup completed successfully", + "title": "Backup Service", + "priority": 2, + "date": "2024-01-15T10:30:00Z" + }, + { + "id": 2, + "appid": 2, + "message": "Database optimization finished", + "title": "Database Manager", + "priority": 1, + "date": "2024-01-15T09:15:00Z" + }, + { + "id": 3, + "appid": 1, + "message": "Server restart scheduled for maintenance", + "title": "System Admin", + "priority": 5, + "date": "2024-01-15T08:45:00Z" + }, + { + "id": 4, + "appid": 3, + "message": "New user registration: john.doe@example.com", + "title": "User Management", + "priority": 1, + "date": "2024-01-15T07:20:00Z" + }, + { + "id": 5, + "appid": 2, + "message": "Weekly report generated and sent", + "title": "Report Generator", + "priority": 2, + "date": "2024-01-14T18:00:00Z" + }, + { + "id": 6, + "appid": 4, + "message": "Security scan completed - no threats detected", + "title": "Security Monitor", + "priority": 2, + "date": "2024-01-14T16:30:00Z" + }, + { + "id": 7, + "appid": 1, + "message": "Disk usage is at 85% on /var partition", + "title": "System Monitor", + "priority": 4, + "date": "2024-01-14T14:15:00Z" + } + ], + "paging": { + "size": 7, + "since": 0, + "limit": 100 + } +} \ No newline at end of file diff --git a/dummy-data/healthchecks/api/v1/checks b/dummy-data/healthchecks/api/v1/checks new file mode 100644 index 0000000..8db7e92 --- /dev/null +++ b/dummy-data/healthchecks/api/v1/checks @@ -0,0 +1,95 @@ +{ + "checks": [ + { + "name": "Database Backup", + "tags": "backup database", + "desc": "Daily database backup job", + "grace": 3600, + "n_pings": 127, + "status": "up", + "last_ping": "2024-01-15T10:30:00+00:00", + "next_ping": "2024-01-16T10:30:00+00:00", + "manual_resume": false, + "methods": "", + "unique_key": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + { + "name": "Web Server Monitoring", + "tags": "web server nginx", + "desc": "Monitor web server health", + "grace": 300, + "n_pings": 2847, + "status": "up", + "last_ping": "2024-01-15T10:25:00+00:00", + "next_ping": "2024-01-15T10:30:00+00:00", + "manual_resume": false, + "methods": "", + "unique_key": "b2c3d4e5-f6g7-8901-bcde-f23456789012" + }, + { + "name": "SSL Certificate Check", + "tags": "ssl certificate", + "desc": "Weekly SSL certificate expiry check", + "grace": 86400, + "n_pings": 52, + "status": "up", + "last_ping": "2024-01-14T12:00:00+00:00", + "next_ping": "2024-01-21T12:00:00+00:00", + "manual_resume": false, + "methods": "", + "unique_key": "c3d4e5f6-g7h8-9012-cdef-345678901234" + }, + { + "name": "Log Cleanup Service", + "tags": "cleanup logs maintenance", + "desc": "Weekly log file cleanup", + "grace": 7200, + "n_pings": 15, + "status": "grace", + "last_ping": "2024-01-13T02:00:00+00:00", + "next_ping": "2024-01-20T02:00:00+00:00", + "manual_resume": false, + "methods": "", + "unique_key": "d4e5f6g7-h8i9-0123-defa-456789012345" + }, + { + "name": "Email Service", + "tags": "email smtp", + "desc": "Email service availability check", + "grace": 600, + "n_pings": 0, + "status": "down", + "last_ping": "2024-01-12T08:15:00+00:00", + "next_ping": "2024-01-15T08:15:00+00:00", + "manual_resume": false, + "methods": "", + "unique_key": "e5f6g7h8-i9j0-1234-efab-567890123456" + }, + { + "name": "API Health Check", + "tags": "api health", + "desc": "External API endpoint health monitoring", + "grace": 180, + "n_pings": 1440, + "status": "up", + "last_ping": "2024-01-15T10:28:00+00:00", + "next_ping": "2024-01-15T10:30:00+00:00", + "manual_resume": false, + "methods": "", + "unique_key": "f6g7h8i9-j0k1-2345-fabc-678901234567" + }, + { + "name": "Backup Verification", + "tags": "backup verify", + "desc": "Verify backup integrity", + "grace": 1800, + "n_pings": 45, + "status": "grace", + "last_ping": "2024-01-14T22:30:00+00:00", + "next_ping": "2024-01-15T22:30:00+00:00", + "manual_resume": false, + "methods": "", + "unique_key": "g7h8i9j0-k1l2-3456-gbcd-789012345678" + } + ] +} \ No newline at end of file diff --git a/dummy-data/homeassistant/api/config b/dummy-data/homeassistant/api/config new file mode 100644 index 0000000..209ee32 --- /dev/null +++ b/dummy-data/homeassistant/api/config @@ -0,0 +1,45 @@ +{ + "location_name": "Home", + "latitude": 40.7128, + "longitude": -74.0060, + "elevation": 10, + "unit_system": { + "length": "km", + "mass": "kg", + "pressure": "Pa", + "temperature": "°C", + "volume": "L" + }, + "time_zone": "America/New_York", + "components": [ + "automation", + "climate", + "device_tracker", + "frontend", + "history", + "light", + "logger", + "media_player", + "recorder", + "script", + "sensor", + "switch", + "system_health", + "weather" + ], + "config_dir": "/config", + "allowlist_external_dirs": [ + "/config", + "/share" + ], + "allowlist_external_urls": [], + "version": "2024.1.5", + "config_source": "storage", + "recovery_mode": false, + "state": "RUNNING", + "external_url": null, + "internal_url": null, + "currency": "USD", + "country": "US", + "language": "en" +} \ No newline at end of file diff --git a/dummy-data/homeassistant/api/states b/dummy-data/homeassistant/api/states new file mode 100644 index 0000000..2cc8989 --- /dev/null +++ b/dummy-data/homeassistant/api/states @@ -0,0 +1,141 @@ +[ + { + "entity_id": "sensor.living_room_temperature", + "state": "22.5", + "attributes": { + "unit_of_measurement": "°C", + "device_class": "temperature", + "friendly_name": "Living Room Temperature" + }, + "last_changed": "2024-01-15T10:30:00+00:00", + "last_updated": "2024-01-15T10:30:00+00:00", + "context": { + "id": "01HMV123456789", + "parent_id": null, + "user_id": null + } + }, + { + "entity_id": "light.bedroom_ceiling", + "state": "on", + "attributes": { + "brightness": 180, + "color_mode": "brightness", + "supported_color_modes": ["brightness"], + "friendly_name": "Bedroom Ceiling Light" + }, + "last_changed": "2024-01-15T09:15:00+00:00", + "last_updated": "2024-01-15T09:15:00+00:00", + "context": { + "id": "01HMV234567890", + "parent_id": null, + "user_id": "user123" + } + }, + { + "entity_id": "switch.coffee_maker", + "state": "off", + "attributes": { + "friendly_name": "Coffee Maker" + }, + "last_changed": "2024-01-14T22:00:00+00:00", + "last_updated": "2024-01-14T22:00:00+00:00", + "context": { + "id": "01HMV345678901", + "parent_id": null, + "user_id": null + } + }, + { + "entity_id": "climate.living_room", + "state": "heat", + "attributes": { + "temperature": 21.0, + "current_temperature": 20.5, + "hvac_modes": ["off", "heat", "cool", "auto"], + "min_temp": 7.0, + "max_temp": 35.0, + "target_temp_step": 0.5, + "friendly_name": "Living Room Thermostat" + }, + "last_changed": "2024-01-15T08:00:00+00:00", + "last_updated": "2024-01-15T10:25:00+00:00", + "context": { + "id": "01HMV456789012", + "parent_id": null, + "user_id": "user123" + } + }, + { + "entity_id": "sensor.front_door", + "state": "closed", + "attributes": { + "device_class": "door", + "friendly_name": "Front Door" + }, + "last_changed": "2024-01-15T07:30:00+00:00", + "last_updated": "2024-01-15T07:30:00+00:00", + "context": { + "id": "01HMV567890123", + "parent_id": null, + "user_id": null + } + }, + { + "entity_id": "media_player.living_room_tv", + "state": "playing", + "attributes": { + "volume_level": 0.4, + "is_volume_muted": false, + "media_content_type": "tvshow", + "media_title": "The Office", + "app_name": "Netflix", + "friendly_name": "Living Room TV" + }, + "last_changed": "2024-01-15T10:00:00+00:00", + "last_updated": "2024-01-15T10:20:00+00:00", + "context": { + "id": "01HMV678901234", + "parent_id": null, + "user_id": "user123" + } + }, + { + "entity_id": "automation.morning_routine", + "state": "on", + "attributes": { + "last_triggered": "2024-01-15T07:00:00+00:00", + "mode": "single", + "current": 0, + "friendly_name": "Morning Routine" + }, + "last_changed": "2024-01-14T07:00:00+00:00", + "last_updated": "2024-01-15T07:00:00+00:00", + "context": { + "id": "01HMV789012345", + "parent_id": null, + "user_id": null + } + }, + { + "entity_id": "weather.home", + "state": "partly-cloudy", + "attributes": { + "temperature": 18.0, + "humidity": 65, + "pressure": 1013.2, + "wind_speed": 12.5, + "wind_bearing": 225, + "visibility": 16.0, + "forecast": [], + "friendly_name": "Home Weather" + }, + "last_changed": "2024-01-15T10:00:00+00:00", + "last_updated": "2024-01-15T10:30:00+00:00", + "context": { + "id": "01HMV890123456", + "parent_id": null, + "user_id": null + } + } +] \ No newline at end of file diff --git a/dummy-data/homeassistant/api_root b/dummy-data/homeassistant/api_root new file mode 100644 index 0000000..a7ea0ce --- /dev/null +++ b/dummy-data/homeassistant/api_root @@ -0,0 +1,3 @@ +{ + "message": "API running." +} \ No newline at end of file diff --git a/dummy-data/immich/api/server/statistics b/dummy-data/immich/api/server/statistics new file mode 100644 index 0000000..1679d5e --- /dev/null +++ b/dummy-data/immich/api/server/statistics @@ -0,0 +1,41 @@ +{ + "photos": 12847, + "videos": 1523, + "usage": 248576851456, + "usageByUser": [ + { + "userId": "user-1234-5678-9abc-def0", + "userName": "john.doe", + "photos": 8945, + "videos": 892, + "usage": 156789012345 + }, + { + "userId": "user-2345-6789-abcd-ef01", + "userName": "jane.smith", + "photos": 2134, + "videos": 423, + "usage": 67891234567 + }, + { + "userId": "user-3456-789a-bcde-f012", + "userName": "family.shared", + "photos": 1768, + "videos": 208, + "usage": 23896604544 + } + ], + "usageRaw": 248576851456, + "photosGrowth": { + "date": "2024-01-15", + "value": 42 + }, + "videosGrowth": { + "date": "2024-01-15", + "value": 7 + }, + "usageGrowth": { + "date": "2024-01-15", + "value": 2147483648 + } +} \ No newline at end of file diff --git a/dummy-data/jellystat/proxy/getSessions b/dummy-data/jellystat/proxy/getSessions new file mode 100644 index 0000000..a1bbcb0 --- /dev/null +++ b/dummy-data/jellystat/proxy/getSessions @@ -0,0 +1,342 @@ +[ + { + "PlayState": { + "CanSeek": true, + "IsPaused": false, + "IsMuted": false, + "RepeatMode": "RepeatNone", + "ShuffleMode": "Sorted", + "VolumeLevel": 85, + "AudioStreamIndex": 1, + "SubtitleStreamIndex": -1, + "MediaSourceId": "12345abcdef", + "PlayMethod": "DirectPlay", + "PlaySessionId": "session-1-abc123", + "PlaylistItemId": "playlist-item-1", + "PositionTicks": 18000000000 + }, + "AdditionalUsers": [], + "Capabilities": { + "PlayableMediaTypes": ["Audio", "Video"], + "SupportedCommands": ["Play", "Pause", "Stop", "Seek"] + }, + "RemoteEndPoint": "192.168.1.100", + "PlayableMediaTypes": ["Audio", "Video"], + "Id": "session-1-abc123", + "UserId": "user123abc", + "UserName": "john_doe", + "Client": "Jellyfin Web", + "LastActivityDate": "2024-01-15T10:30:00.0000000Z", + "LastPlaybackCheckIn": "2024-01-15T10:30:00.0000000Z", + "DeviceName": "Chrome on Desktop", + "DeviceId": "device-desktop-chrome", + "ApplicationVersion": "10.8.13", + "IsActive": true, + "SupportsMediaControl": true, + "SupportsRemoteControl": true, + "NowPlayingItem": { + "Name": "The Office - S03E01 - Gay Witch Hunt", + "OriginalTitle": "Gay Witch Hunt", + "Id": "episode123abc", + "Etag": "etag123", + "SourceType": "Library", + "PlaylistItemId": "playlist-item-1", + "DateCreated": "2024-01-10T00:00:00.0000000Z", + "DateLastMediaAdded": "2024-01-10T00:00:00.0000000Z", + "ExtraType": null, + "AirsBeforeSeasonNumber": null, + "AirsAfterSeasonNumber": null, + "AirsBeforeEpisodeNumber": null, + "CanDelete": false, + "CanDownload": false, + "HasSubtitles": true, + "Container": "mkv", + "SortName": "office s03e01 gay witch hunt", + "ForcedSortName": null, + "Video3DFormat": null, + "PremiereDate": "2006-09-21T00:00:00.0000000Z", + "ExternalUrls": [], + "MediaSources": [], + "CriticRating": null, + "ProductionLocations": [], + "Path": "/media/tv/The Office/Season 03/S03E01.mkv", + "EnableMediaSourceDisplay": true, + "OfficialRating": "TV-14", + "CustomRating": null, + "ChannelId": null, + "ChannelName": null, + "Overview": "Michael's kiss with Oscar at the Dundies leads to sensitivity training for the office.", + "Taglines": [], + "Genres": ["Comedy"], + "CommunityRating": 8.1, + "CumulativeRunTimeTicks": 13050000000, + "RunTimeTicks": 13050000000, + "PlayAccess": "Full", + "AspectRatio": "16:9", + "ProductionYear": 2006, + "IsPlaceHolder": false, + "Number": null, + "ChannelNumber": null, + "IndexNumber": 1, + "IndexNumberEnd": null, + "ParentIndexNumber": 3, + "RemoteTrailers": [], + "ProviderIds": {}, + "IsHD": true, + "IsFolder": false, + "ParentId": "season3abc", + "Type": "Episode", + "People": [], + "Studios": [], + "GenreItems": [], + "ParentLogoItemId": null, + "ParentBackdropItemId": "series123", + "ParentBackdropImageTags": ["backdrop1"], + "LocalTrailerCount": 0, + "UserData": { + "Rating": null, + "PlayedPercentage": 75.5, + "UnplayedItemCount": null, + "PlaybackPositionTicks": 18000000000, + "PlayCount": 1, + "IsFavorite": false, + "Likes": null, + "LastPlayedDate": "2024-01-15T10:30:00.0000000Z", + "Played": false, + "Key": "episode123abc" + }, + "RecursiveItemCount": 0, + "ChildCount": 0, + "SeriesName": "The Office", + "SeriesId": "series123", + "SeasonId": "season3abc", + "SpecialFeatureCount": 0, + "DisplayPreferencesId": "episode123abc", + "Status": null, + "AirTime": null, + "AirDays": [], + "Tags": [], + "PrimaryImageAspectRatio": 1.777777777777778, + "Artists": [], + "ArtistItems": [], + "Album": null, + "CollectionType": null, + "DisplayOrder": null, + "AlbumId": null, + "AlbumPrimaryImageTag": null, + "SeriesPrimaryImageTag": "series-primary", + "AlbumArtist": null, + "AlbumArtists": [], + "SeasonName": "Season 3", + "MediaStreams": [], + "VideoType": "VideoFile", + "PartCount": 1, + "MediaSourceCount": 1, + "ImageTags": { + "Primary": "episode-primary" + }, + "BackdropImageTags": [], + "ScreenshotImageTags": [], + "ParentLogoImageTag": null, + "ParentArtItemId": null, + "ParentArtImageTag": null, + "SeriesThumbImageTag": null, + "ImageBlurHashes": {}, + "SeriesStudio": "NBC", + "ParentThumbItemId": null, + "ParentThumbImageTag": null, + "ParentPrimaryImageItemId": "series123", + "ParentPrimaryImageTag": "series-primary", + "Chapters": [], + "LocationType": "FileSystem", + "IsoType": null, + "MediaType": "Video", + "EndDate": null, + "LockedFields": [], + "TrailerCount": 0, + "MovieCount": 0, + "SeriesCount": 0, + "ProgramCount": 0, + "EpisodeCount": 0, + "SongCount": 0, + "AlbumCount": 0, + "ArtistCount": 0, + "MusicVideoCount": 0, + "LockData": false, + "Width": 1920, + "Height": 1080, + "CameraMake": null, + "CameraModel": null, + "Software": null, + "ExposureTime": null, + "FocalLength": null, + "ImageOrientation": null, + "Aperture": null, + "ShutterSpeed": null, + "Latitude": null, + "Longitude": null, + "Altitude": null, + "IsoSpeedRating": null, + "SeriesTimerId": null, + "ProgramId": null, + "ChannelPrimaryImageTag": null, + "StartDate": null, + "CompletionPercentage": null, + "IsRepeat": null, + "EpisodeTitle": "Gay Witch Hunt", + "ChannelType": null, + "Audio": null, + "IsMovie": false, + "IsSports": false, + "IsNews": false, + "IsKids": false, + "IsPremiere": false, + "TimerId": null, + "NormalizationGain": null, + "CurrentProgram": null + }, + "FullNowPlayingItem": {}, + "NowViewingItem": null, + "DeviceType": "Desktop", + "NowPlayingQueue": [], + "NowPlayingQueueFullItems": [], + "HasCustomDeviceName": false, + "PlaylistItemId": "playlist-item-1", + "ServerId": "jellyfin-server-123", + "UserPrimaryImageTag": null, + "SupportedCommands": [] + }, + { + "PlayState": { + "CanSeek": true, + "IsPaused": true, + "IsMuted": false, + "RepeatMode": "RepeatNone", + "ShuffleMode": "Sorted", + "VolumeLevel": 65, + "AudioStreamIndex": 1, + "SubtitleStreamIndex": 2, + "MediaSourceId": "67890defghi", + "PlayMethod": "DirectPlay", + "PlaySessionId": "session-2-def456", + "PlaylistItemId": "playlist-item-2", + "PositionTicks": 45000000000 + }, + "AdditionalUsers": [], + "Capabilities": { + "PlayableMediaTypes": ["Audio", "Video"], + "SupportedCommands": ["Play", "Pause", "Stop", "Seek"] + }, + "RemoteEndPoint": "192.168.1.101", + "PlayableMediaTypes": ["Audio", "Video"], + "Id": "session-2-def456", + "UserId": "user456def", + "UserName": "jane_smith", + "Client": "Jellyfin Android", + "LastActivityDate": "2024-01-15T10:25:00.0000000Z", + "LastPlaybackCheckIn": "2024-01-15T10:25:00.0000000Z", + "DeviceName": "Samsung Galaxy S21", + "DeviceId": "device-android-samsung", + "ApplicationVersion": "2.6.2", + "IsActive": true, + "SupportsMediaControl": true, + "SupportsRemoteControl": true, + "NowPlayingItem": { + "Name": "Inception", + "OriginalTitle": "Inception", + "Id": "movie456def", + "Etag": "etag456", + "SourceType": "Library", + "PlaylistItemId": "playlist-item-2", + "DateCreated": "2024-01-05T00:00:00.0000000Z", + "DateLastMediaAdded": "2024-01-05T00:00:00.0000000Z", + "Container": "mkv", + "SortName": "inception", + "PremiereDate": "2010-07-16T00:00:00.0000000Z", + "Path": "/media/movies/Inception (2010)/Inception.mkv", + "EnableMediaSourceDisplay": true, + "OfficialRating": "PG-13", + "Overview": "A thief who steals corporate secrets through the use of dream-sharing technology is given the inverse task of planting an idea into the mind of a C.E.O.", + "Taglines": ["Your mind is the scene of the crime"], + "Genres": ["Action", "Sci-Fi", "Thriller"], + "CommunityRating": 8.8, + "CumulativeRunTimeTicks": 88800000000, + "RunTimeTicks": 88800000000, + "PlayAccess": "Full", + "AspectRatio": "2.40:1", + "ProductionYear": 2010, + "IsPlaceHolder": false, + "IsHD": true, + "IsFolder": false, + "Type": "Movie", + "LocalTrailerCount": 0, + "UserData": { + "PlayedPercentage": 50.6, + "PlaybackPositionTicks": 45000000000, + "PlayCount": 0, + "IsFavorite": true, + "LastPlayedDate": "2024-01-15T10:25:00.0000000Z", + "Played": false, + "Key": "movie456def" + }, + "PrimaryImageAspectRatio": 0.6666666666666666, + "VideoType": "VideoFile", + "PartCount": 1, + "MediaSourceCount": 1, + "ImageTags": { + "Primary": "movie-primary" + }, + "BackdropImageTags": ["backdrop1", "backdrop2"], + "LocationType": "FileSystem", + "MediaType": "Video", + "Width": 1920, + "Height": 800, + "IsMovie": true, + "IsSports": false, + "IsNews": false, + "IsKids": false, + "IsPremiere": false + }, + "FullNowPlayingItem": {}, + "NowViewingItem": null, + "DeviceType": "Phone", + "NowPlayingQueue": [], + "NowPlayingQueueFullItems": [], + "HasCustomDeviceName": false, + "PlaylistItemId": "playlist-item-2", + "ServerId": "jellyfin-server-123", + "UserPrimaryImageTag": null, + "SupportedCommands": [] + }, + { + "PlayState": null, + "AdditionalUsers": [], + "Capabilities": { + "PlayableMediaTypes": ["Audio", "Video"], + "SupportedCommands": ["Play", "Pause", "Stop"] + }, + "RemoteEndPoint": "192.168.1.102", + "PlayableMediaTypes": ["Audio", "Video"], + "Id": "session-3-ghi789", + "UserId": "user789ghi", + "UserName": "family_user", + "Client": "Jellyfin for Roku", + "LastActivityDate": "2024-01-15T10:20:00.0000000Z", + "LastPlaybackCheckIn": "2024-01-15T10:20:00.0000000Z", + "DeviceName": "Roku Ultra", + "DeviceId": "device-roku-ultra", + "ApplicationVersion": "1.6.8", + "IsActive": true, + "SupportsMediaControl": true, + "SupportsRemoteControl": true, + "FullNowPlayingItem": {}, + "NowViewingItem": null, + "DeviceType": "Tv", + "NowPlayingQueue": [], + "NowPlayingQueueFullItems": [], + "HasCustomDeviceName": false, + "ServerId": "jellyfin-server-123", + "UserPrimaryImageTag": null, + "SupportedCommands": [] + } +] \ No newline at end of file diff --git a/dummy-data/lidarr/api/v1/health b/dummy-data/lidarr/api/v1/health new file mode 100644 index 0000000..af26676 --- /dev/null +++ b/dummy-data/lidarr/api/v1/health @@ -0,0 +1,35 @@ +[ + { + "source": "IndexerStatusCheck", + "type": "warning", + "message": "Indexer MusicBrainzDB is unavailable due to recent indexer errors: Service temporarily unavailable", + "wikiUrl": "https://wiki.servarr.com/lidarr/health#indexers-are-unavailable-due-to-recent-failures" + }, + { + "source": "ImportMechanismCheck", + "type": "ok", + "message": "No issues with import mechanism checks" + }, + { + "source": "DownloadClientStatusCheck", + "type": "ok", + "message": "All download clients are available" + }, + { + "source": "RootFolderCheck", + "type": "error", + "message": "Missing root folder: /music", + "wikiUrl": "https://wiki.servarr.com/lidarr/health#missing-root-folder" + }, + { + "source": "UpdateCheck", + "type": "ok", + "message": "Update available: 1.3.6.3557 -> 2.0.7.3849" + }, + { + "source": "MetadataProviderCheck", + "type": "warning", + "message": "Metadata provider Last.fm API key is invalid or expired", + "wikiUrl": "https://wiki.servarr.com/lidarr/health#metadata-provider-issues" + } +] \ No newline at end of file diff --git a/dummy-data/lidarr/api/v1/queue/status b/dummy-data/lidarr/api/v1/queue/status new file mode 100644 index 0000000..cc7e0d1 --- /dev/null +++ b/dummy-data/lidarr/api/v1/queue/status @@ -0,0 +1,7 @@ +{ + "totalCount": 4, + "count": 4, + "unknownCount": 0, + "errors": false, + "warnings": false +} \ No newline at end of file diff --git a/dummy-data/lidarr/api/v1/wanted/missing b/dummy-data/lidarr/api/v1/wanted/missing new file mode 100644 index 0000000..6b81a1b --- /dev/null +++ b/dummy-data/lidarr/api/v1/wanted/missing @@ -0,0 +1,179 @@ +{ + "page": 1, + "pageSize": 20, + "sortKey": "releaseDate", + "sortDirection": "descending", + "totalRecords": 7, + "records": [ + { + "artistId": 1, + "albumId": 12345, + "foreignAlbumId": "mbid-123-456-789", + "title": "Dark Side of the Moon", + "disambiguation": "", + "overview": "The eighth studio album by Pink Floyd, released in 1973.", + "artistName": "Pink Floyd", + "foreignArtistId": "mbid-artist-123", + "monitored": true, + "anyReleaseOk": true, + "profileId": 1, + "duration": 2580000, + "albumType": "Album", + "secondaryTypes": [], + "mediumCount": 1, + "releaseDate": "1973-03-01T00:00:00Z", + "releases": [ + { + "id": 67890, + "albumId": 12345, + "foreignReleaseId": "mbid-release-123", + "title": "Dark Side of the Moon", + "status": "Official", + "duration": 2580000, + "trackCount": 10, + "mediumCount": 1, + "disambiguation": "", + "country": ["US"], + "label": ["Harvest", "Capitol"], + "monitored": true + } + ], + "genres": ["Progressive Rock", "Psychedelic Rock"], + "media": [ + { + "mediumNumber": 1, + "mediumName": "", + "mediumFormat": "CD" + } + ], + "artist": { + "artistName": "Pink Floyd", + "foreignArtistId": "mbid-artist-123", + "nameSlug": "pink-floyd", + "overview": "English rock band formed in London in 1965.", + "disambiguation": "", + "links": [], + "images": [], + "path": "/music/Pink Floyd", + "qualityProfileId": 1, + "metadataProfileId": 1, + "monitored": true, + "monitorNewItems": "all", + "genres": ["Progressive Rock", "Psychedelic Rock", "Art Rock"], + "cleanName": "pinkfloyd", + "sortName": "Pink Floyd", + "tags": [], + "added": "2024-01-01T00:00:00Z", + "ratings": { + "votes": 54321, + "value": 9.2 + }, + "statistics": { + "albumCount": 15, + "trackFileCount": 142, + "trackCount": 149, + "totalTrackCount": 149, + "sizeOnDisk": 7516192768, + "percentOfTracks": 95.3 + }, + "id": 1 + }, + "images": [], + "links": [], + "statistics": { + "trackFileCount": 0, + "trackCount": 10, + "totalTrackCount": 10, + "sizeOnDisk": 0, + "percentOfTracks": 0.0 + }, + "grabbed": false, + "id": 12345 + }, + { + "artistId": 2, + "albumId": 23456, + "foreignAlbumId": "mbid-234-567-890", + "title": "OK Computer", + "disambiguation": "", + "overview": "The third studio album by Radiohead, released in 1997.", + "artistName": "Radiohead", + "foreignArtistId": "mbid-artist-234", + "monitored": true, + "anyReleaseOk": true, + "profileId": 1, + "duration": 3230000, + "albumType": "Album", + "secondaryTypes": [], + "mediumCount": 1, + "releaseDate": "1997-06-16T00:00:00Z", + "releases": [ + { + "id": 78901, + "albumId": 23456, + "foreignReleaseId": "mbid-release-234", + "title": "OK Computer", + "status": "Official", + "duration": 3230000, + "trackCount": 12, + "mediumCount": 1, + "disambiguation": "", + "country": ["GB"], + "label": ["Parlophone", "Capitol"], + "monitored": true + } + ], + "genres": ["Alternative Rock", "Art Rock"], + "media": [ + { + "mediumNumber": 1, + "mediumName": "", + "mediumFormat": "CD" + } + ], + "artist": { + "artistName": "Radiohead", + "foreignArtistId": "mbid-artist-234", + "nameSlug": "radiohead", + "overview": "English rock band formed in Abingdon, Oxfordshire, in 1985.", + "disambiguation": "", + "links": [], + "images": [], + "path": "/music/Radiohead", + "qualityProfileId": 1, + "metadataProfileId": 1, + "monitored": true, + "monitorNewItems": "all", + "genres": ["Alternative Rock", "Art Rock", "Electronic"], + "cleanName": "radiohead", + "sortName": "Radiohead", + "tags": [], + "added": "2024-01-01T00:00:00Z", + "ratings": { + "votes": 45678, + "value": 8.9 + }, + "statistics": { + "albumCount": 9, + "trackFileCount": 89, + "trackCount": 95, + "totalTrackCount": 95, + "sizeOnDisk": 4831838208, + "percentOfTracks": 93.7 + }, + "id": 2 + }, + "images": [], + "links": [], + "statistics": { + "trackFileCount": 0, + "trackCount": 12, + "totalTrackCount": 12, + "sizeOnDisk": 0, + "percentOfTracks": 0.0 + }, + "grabbed": false, + "id": 23456 + } + ] +} \ No newline at end of file diff --git a/dummy-data/linkding/api/bookmarks b/dummy-data/linkding/api/bookmarks new file mode 100644 index 0000000..9701f65 --- /dev/null +++ b/dummy-data/linkding/api/bookmarks @@ -0,0 +1,61 @@ +{ + "count": 12, + "next": null, + "previous": null, + "results": [ + { + "id": 1, + "url": "https://github.com/bastienwirtz/homer", + "title": "Homer - A very simple static homepage for your server", + "description": "A dead simple static HOMepage for your servER to keep your services on hand, from a simple yaml configuration file.", + "notes": "", + "website_title": "GitHub", + "website_description": "GitHub is where over 100 million developers shape the future of software, together.", + "web_archive_snapshot_url": "", + "favicon_url": "https://github.githubassets.com/favicons/favicon.svg", + "preview_image_url": "", + "is_archived": false, + "unread": false, + "shared": false, + "tag_names": ["selfhosted", "dashboard", "yaml"], + "date_added": "2024-01-15T10:30:00.123456Z", + "date_modified": "2024-01-15T10:30:00.123456Z" + }, + { + "id": 2, + "url": "https://docs.docker.com/", + "title": "Docker Documentation", + "description": "Official Docker documentation with guides, references, and tutorials for containerization.", + "notes": "Essential for container management", + "website_title": "Docker Docs", + "website_description": "Docker helps developers build, share, run, and verify applications anywhere.", + "web_archive_snapshot_url": "", + "favicon_url": "https://docs.docker.com/favicons/docs@2x.ico", + "preview_image_url": "", + "is_archived": false, + "unread": false, + "shared": false, + "tag_names": ["docker", "containers", "documentation"], + "date_added": "2024-01-14T15:20:00.123456Z", + "date_modified": "2024-01-14T15:20:00.123456Z" + }, + { + "id": 3, + "url": "https://nginx.org/en/docs/", + "title": "nginx documentation", + "description": "Official nginx web server documentation covering installation, configuration, and modules.", + "notes": "", + "website_title": "nginx", + "website_description": "nginx [engine x] is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP proxy server.", + "web_archive_snapshot_url": "", + "favicon_url": "https://nginx.org/favicon.ico", + "preview_image_url": "", + "is_archived": false, + "unread": false, + "shared": false, + "tag_names": ["nginx", "webserver", "proxy"], + "date_added": "2024-01-13T09:45:00.123456Z", + "date_modified": "2024-01-13T09:45:00.123456Z" + } + ] +} \ No newline at end of file diff --git a/dummy-data/matrix/_matrix/federation/v1/version b/dummy-data/matrix/_matrix/federation/v1/version new file mode 100644 index 0000000..fbc4e1a --- /dev/null +++ b/dummy-data/matrix/_matrix/federation/v1/version @@ -0,0 +1,6 @@ +{ + "server": { + "name": "Synapse", + "version": "1.99.0" + } +} \ No newline at end of file diff --git a/dummy-data/mealie/api/admin/about/statistics b/dummy-data/mealie/api/admin/about/statistics new file mode 100644 index 0000000..80d793f --- /dev/null +++ b/dummy-data/mealie/api/admin/about/statistics @@ -0,0 +1,18 @@ +{ + "totalRecipes": 247, + "totalUsers": 5, + "totalGroups": 2, + "totalCategories": 18, + "totalTags": 42, + "totalTools": 15, + "totalMealPlans": 156, + "totalShoppingLists": 28, + "totalComments": 89, + "lastUpdated": "2024-01-15T10:30:00Z", + "version": "1.0.0", + "demoStatus": false, + "allowSignup": true, + "defaultGroup": "Home", + "buildVersion": "v1.0.0-1234567", + "apiVersion": "v1" +} \ No newline at end of file diff --git a/dummy-data/mealie/api/groups/mealplans/today b/dummy-data/mealie/api/groups/mealplans/today new file mode 100644 index 0000000..82e3ffa --- /dev/null +++ b/dummy-data/mealie/api/groups/mealplans/today @@ -0,0 +1,64 @@ +[ + { + "id": "meal-123-abc", + "date": "2024-01-15", + "entryType": "dinner", + "title": "Dinner", + "text": "", + "recipe": { + "id": "recipe-456-def", + "name": "Chicken Tikka Masala", + "slug": "chicken-tikka-masala", + "image": "recipe-456-def.webp", + "description": "Creamy tomato-based curry with tender chicken pieces and aromatic spices", + "recipeCategory": [ + { + "id": "cat-1", + "name": "Indian", + "slug": "indian" + }, + { + "id": "cat-2", + "name": "Main Course", + "slug": "main-course" + } + ], + "tags": [ + { + "id": "tag-1", + "name": "Curry", + "slug": "curry" + }, + { + "id": "tag-2", + "name": "Chicken", + "slug": "chicken" + }, + { + "id": "tag-3", + "name": "Spicy", + "slug": "spicy" + } + ], + "rating": 4.5, + "totalTime": "45 minutes", + "prepTime": "15 minutes", + "cookTime": "30 minutes", + "performTime": null, + "servings": 4, + "dateAdded": "2024-01-10T00:00:00Z", + "dateUpdated": "2024-01-14T12:30:00Z", + "createdBy": { + "id": "user-789", + "username": "chef_sarah", + "fullName": "Sarah Mitchell" + }, + "updateBy": { + "id": "user-789", + "username": "chef_sarah", + "fullName": "Sarah Mitchell" + } + }, + "groupId": "group-default-123" + } +] \ No newline at end of file diff --git a/dummy-data/medusa/api/v2/config b/dummy-data/medusa/api/v2/config new file mode 100644 index 0000000..2a1cd54 --- /dev/null +++ b/dummy-data/medusa/api/v2/config @@ -0,0 +1,108 @@ +{ + "system": { + "news": { + "unread": 3, + "latest": [ + { + "title": "Medusa v1.0.19 Released", + "date": "2024-01-14", + "content": "Bug fixes and performance improvements", + "read": false + }, + { + "title": "New indexer support added", + "date": "2024-01-12", + "content": "Support for additional torrent indexers", + "read": false + }, + { + "title": "Database maintenance completed", + "date": "2024-01-10", + "content": "Weekly database optimization finished", + "read": false + } + ] + }, + "version": { + "version": "1.0.19", + "branch": "master", + "commit": "abc123def456", + "dbVersion": 44, + "pythonVersion": "3.11.7" + }, + "os": { + "platform": "Linux", + "release": "6.5.0-15-generic", + "version": "#15~22.04.1-Ubuntu" + }, + "memory": { + "used": 512.5, + "total": 8192.0, + "percent": 6.3 + } + }, + "main": { + "logs": { + "numWarnings": 2, + "numErrors": 1, + "loggingLevels": [ + "DEBUG", + "INFO", + "WARNING", + "ERROR" + ], + "currentLevel": "INFO" + }, + "general": { + "webHost": "0.0.0.0", + "webPort": 8081, + "webRoot": "", + "launchBrowser": false, + "versionNotify": true, + "autoUpdate": false, + "logDir": "/app/Logs", + "dataDir": "/app/Data", + "configVersion": 12 + }, + "showDefaults": { + "status": "Skipped/Wanted/Snatched/Downloaded", + "statusAfter": "Downloaded", + "season_folders": true, + "anime": false, + "scene": false, + "archive_firstmatch": false, + "quality_default": "Standard Definition", + "subtitles": false, + "flatten_folders": false, + "indexer_default": "tvdb", + "indexer_timeout": 20, + "skip_removed_files": false + } + }, + "search": { + "general": { + "randomize_providers": false, + "download_propers": true, + "check_propers_interval": "daily", + "propers_search_days": 2, + "backlog_days": 7, + "cache_trimming": false, + "max_cache_age": 30 + }, + "nzb": { + "nzbs": false, + "nzbs_uid": "", + "nzbs_hash": "" + }, + "torrent": { + "torrent_method": "blackhole", + "torrent_path": "", + "torrent_seed_time": 0, + "torrent_paused": false, + "torrent_high_bandwidth": false, + "torrent_label": "", + "torrent_label_anime": "", + "torrent_verify_cert": false + } + } +} \ No newline at end of file diff --git a/dummy-data/nextcloud/status.php b/dummy-data/nextcloud/status.php new file mode 100644 index 0000000..058e022 --- /dev/null +++ b/dummy-data/nextcloud/status.php @@ -0,0 +1,10 @@ +{ + "installed": true, + "maintenance": false, + "needsDbUpgrade": false, + "version": "28.0.2.1", + "versionstring": "28.0.2", + "edition": "", + "productname": "Nextcloud", + "extendedSupport": false +} \ No newline at end of file diff --git a/dummy-data/paperlessng/api/documents b/dummy-data/paperlessng/api/documents new file mode 100644 index 0000000..de575ec --- /dev/null +++ b/dummy-data/paperlessng/api/documents @@ -0,0 +1,88 @@ +{ + "count": 1847, + "next": "http://paperless.local/api/documents/?page=2", + "previous": null, + "all": [1, 2, 3, 4, 5], + "results": [ + { + "id": 1847, + "correspondent": 15, + "document_type": 12, + "storage_path": null, + "title": "Bank Statement - January 2024", + "content": "Monthly bank statement with account summary and transaction details", + "tags": [8, 15, 23], + "created": "2024-01-15T10:30:00Z", + "created_date": "2024-01-15", + "modified": "2024-01-15T10:30:00Z", + "added": "2024-01-15T10:30:00Z", + "archive_serial_number": "ASN2024001847", + "original_file_name": "bank_statement_202401.pdf", + "archived_file_name": "0001847.pdf" + }, + { + "id": 1846, + "correspondent": 23, + "document_type": 5, + "storage_path": null, + "title": "Utility Bill - Electric Company", + "content": "Monthly electricity bill for December 2023", + "tags": [12, 18], + "created": "2024-01-14T16:45:00Z", + "created_date": "2024-01-14", + "modified": "2024-01-14T16:45:00Z", + "added": "2024-01-14T16:45:00Z", + "archive_serial_number": "ASN2024001846", + "original_file_name": "electric_bill_202312.pdf", + "archived_file_name": "0001846.pdf" + }, + { + "id": 1845, + "correspondent": 7, + "document_type": 18, + "storage_path": null, + "title": "Insurance Policy Renewal Notice", + "content": "Annual home insurance policy renewal documentation", + "tags": [5, 11, 19], + "created": "2024-01-13T14:20:00Z", + "created_date": "2024-01-13", + "modified": "2024-01-13T14:20:00Z", + "added": "2024-01-13T14:20:00Z", + "archive_serial_number": "ASN2024001845", + "original_file_name": "insurance_renewal_2024.pdf", + "archived_file_name": "0001845.pdf" + }, + { + "id": 1844, + "correspondent": 31, + "document_type": 9, + "storage_path": null, + "title": "Tax Document - W2 Form 2023", + "content": "Annual W2 tax form from employer", + "tags": [2, 14, 25], + "created": "2024-01-12T09:15:00Z", + "created_date": "2024-01-12", + "modified": "2024-01-12T09:15:00Z", + "added": "2024-01-12T09:15:00Z", + "archive_serial_number": "ASN2024001844", + "original_file_name": "w2_form_2023.pdf", + "archived_file_name": "0001844.pdf" + }, + { + "id": 1843, + "correspondent": 42, + "document_type": 21, + "storage_path": null, + "title": "Medical Records - Annual Checkup", + "content": "Annual physical examination results and health summary", + "tags": [6, 17, 28], + "created": "2024-01-11T11:30:00Z", + "created_date": "2024-01-11", + "modified": "2024-01-11T11:30:00Z", + "added": "2024-01-11T11:30:00Z", + "archive_serial_number": "ASN2024001843", + "original_file_name": "medical_checkup_2024.pdf", + "archived_file_name": "0001843.pdf" + } + ] +} \ No newline at end of file diff --git a/dummy-data/plex/library/sections b/dummy-data/plex/library/sections new file mode 100644 index 0000000..982a6ad --- /dev/null +++ b/dummy-data/plex/library/sections @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/dummy-data/plex/library/sections1all b/dummy-data/plex/library/sections1all new file mode 100644 index 0000000..e29c733 --- /dev/null +++ b/dummy-data/plex/library/sections1all @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/dummy-data/plex/library/sections2all b/dummy-data/plex/library/sections2all new file mode 100644 index 0000000..bd7ea41 --- /dev/null +++ b/dummy-data/plex/library/sections2all @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/dummy-data/plex/status/sessions b/dummy-data/plex/status/sessions new file mode 100644 index 0000000..7a1a1ff --- /dev/null +++ b/dummy-data/plex/status/sessions @@ -0,0 +1,19 @@ + + + + + \ No newline at end of file diff --git a/dummy-data/portainer/api/endpoints b/dummy-data/portainer/api/endpoints new file mode 100644 index 0000000..124afd3 --- /dev/null +++ b/dummy-data/portainer/api/endpoints @@ -0,0 +1,94 @@ +[ + { + "Id": 1, + "Name": "local", + "Type": 1, + "URL": "unix:///var/run/docker.sock", + "GroupId": 1, + "PublicURL": "", + "Status": 1, + "UserAccessPolicies": {}, + "TeamAccessPolicies": {}, + "Extensions": [], + "TagIds": [], + "AssociatedEndpoints": [], + "Snapshots": [ + { + "Time": 1705317600, + "DockerVersion": "24.0.7", + "Swarm": false, + "TotalCPU": 8, + "TotalMemory": 16777216000, + "RunningContainerCount": 12, + "StoppedContainerCount": 5, + "HealthyContainerCount": 10, + "UnhealthyContainerCount": 0, + "VolumeCount": 25, + "ImageCount": 47, + "ServiceCount": 0, + "StackCount": 0, + "DockerRootDir": "/var/lib/docker" + } + ], + "Kubernetes": { + "Snapshots": [] + }, + "Agent": { + "NodeName": "", + "ChecklnInterval": 5, + "Version": "" + }, + "Edge": { + "AsyncMode": false, + "PingInterval": 60, + "CommandInterval": 5, + "SnapshotInterval": 5 + } + }, + { + "Id": 2, + "Name": "production", + "Type": 2, + "URL": "tcp://prod-docker:2376", + "GroupId": 1, + "PublicURL": "https://prod-docker.example.com", + "Status": 1, + "UserAccessPolicies": {}, + "TeamAccessPolicies": {}, + "Extensions": [], + "TagIds": [], + "AssociatedEndpoints": [], + "Snapshots": [ + { + "Time": 1705317600, + "DockerVersion": "24.0.7", + "Swarm": false, + "TotalCPU": 16, + "TotalMemory": 33554432000, + "RunningContainerCount": 25, + "StoppedContainerCount": 3, + "HealthyContainerCount": 23, + "UnhealthyContainerCount": 2, + "VolumeCount": 40, + "ImageCount": 75, + "ServiceCount": 0, + "StackCount": 0, + "DockerRootDir": "/var/lib/docker" + } + ], + "Kubernetes": { + "Snapshots": [] + }, + "Agent": { + "NodeName": "", + "ChecklnInterval": 5, + "Version": "" + }, + "Edge": { + "AsyncMode": false, + "PingInterval": 60, + "CommandInterval": 5, + "SnapshotInterval": 5 + } + } +] \ No newline at end of file diff --git a/dummy-data/portainer/api/endpoints.backup b/dummy-data/portainer/api/endpoints.backup new file mode 100644 index 0000000..124afd3 --- /dev/null +++ b/dummy-data/portainer/api/endpoints.backup @@ -0,0 +1,94 @@ +[ + { + "Id": 1, + "Name": "local", + "Type": 1, + "URL": "unix:///var/run/docker.sock", + "GroupId": 1, + "PublicURL": "", + "Status": 1, + "UserAccessPolicies": {}, + "TeamAccessPolicies": {}, + "Extensions": [], + "TagIds": [], + "AssociatedEndpoints": [], + "Snapshots": [ + { + "Time": 1705317600, + "DockerVersion": "24.0.7", + "Swarm": false, + "TotalCPU": 8, + "TotalMemory": 16777216000, + "RunningContainerCount": 12, + "StoppedContainerCount": 5, + "HealthyContainerCount": 10, + "UnhealthyContainerCount": 0, + "VolumeCount": 25, + "ImageCount": 47, + "ServiceCount": 0, + "StackCount": 0, + "DockerRootDir": "/var/lib/docker" + } + ], + "Kubernetes": { + "Snapshots": [] + }, + "Agent": { + "NodeName": "", + "ChecklnInterval": 5, + "Version": "" + }, + "Edge": { + "AsyncMode": false, + "PingInterval": 60, + "CommandInterval": 5, + "SnapshotInterval": 5 + } + }, + { + "Id": 2, + "Name": "production", + "Type": 2, + "URL": "tcp://prod-docker:2376", + "GroupId": 1, + "PublicURL": "https://prod-docker.example.com", + "Status": 1, + "UserAccessPolicies": {}, + "TeamAccessPolicies": {}, + "Extensions": [], + "TagIds": [], + "AssociatedEndpoints": [], + "Snapshots": [ + { + "Time": 1705317600, + "DockerVersion": "24.0.7", + "Swarm": false, + "TotalCPU": 16, + "TotalMemory": 33554432000, + "RunningContainerCount": 25, + "StoppedContainerCount": 3, + "HealthyContainerCount": 23, + "UnhealthyContainerCount": 2, + "VolumeCount": 40, + "ImageCount": 75, + "ServiceCount": 0, + "StackCount": 0, + "DockerRootDir": "/var/lib/docker" + } + ], + "Kubernetes": { + "Snapshots": [] + }, + "Agent": { + "NodeName": "", + "ChecklnInterval": 5, + "Version": "" + }, + "Edge": { + "AsyncMode": false, + "PingInterval": 60, + "CommandInterval": 5, + "SnapshotInterval": 5 + } + } +] \ No newline at end of file diff --git a/dummy-data/portainer/api/status b/dummy-data/portainer/api/status new file mode 100644 index 0000000..7e892da --- /dev/null +++ b/dummy-data/portainer/api/status @@ -0,0 +1,38 @@ +{ + "Version": "2.19.4", + "APIVersion": "2.19.4", + "DatabaseVersion": "34", + "Build": { + "BuildNumber": "1234567890", + "ImageTag": "2.19.4-alpine", + "NodejsVersion": "v18.17.1", + "YarnVersion": "1.22.19", + "WebpackVersion": "5.88.2", + "GoVersion": "go1.21.5" + }, + "InstanceID": "portainer-instance-abc123def456", + "Edition": "CE", + "DemoEnvironment": { + "Enabled": false, + "URL": "" + }, + "AnalyticsEnabled": false, + "AuthenticationMethod": 1, + "Users": 3, + "ValidLicense": false, + "LicenseInfo": { + "Company": "", + "CreatedAt": 0, + "ExpiresAt": 0, + "LicenseKey": "", + "ProductEdition": "", + "Seats": 0, + "Valid": false + }, + "RequiredPasswordLength": 12, + "UserSessionTimeout": "8h", + "Features": { + "EdgeDeviceUntrustedMode": false + }, + "EdgeAgentCheckinIntervalSeconds": 5 +} \ No newline at end of file diff --git a/dummy-data/prometheus/api/v1/alerts b/dummy-data/prometheus/api/v1/alerts new file mode 100644 index 0000000..b09c90a --- /dev/null +++ b/dummy-data/prometheus/api/v1/alerts @@ -0,0 +1,99 @@ +{ + "status": "success", + "data": { + "alerts": [ + { + "labels": { + "alertname": "HighCPUUsage", + "instance": "localhost:9090", + "job": "prometheus", + "severity": "warning" + }, + "annotations": { + "description": "CPU usage is above 80% for more than 5 minutes", + "summary": "High CPU usage detected" + }, + "state": "firing", + "activeAt": "2024-01-15T10:30:00.000Z", + "value": "85.2" + }, + { + "labels": { + "alertname": "HighMemoryUsage", + "instance": "web-server-01:9090", + "job": "node-exporter", + "severity": "critical" + }, + "annotations": { + "description": "Memory usage is above 90% for more than 10 minutes", + "summary": "Critical memory usage detected" + }, + "state": "firing", + "activeAt": "2024-01-15T10:25:00.000Z", + "value": "92.8" + }, + { + "labels": { + "alertname": "DiskSpaceLow", + "instance": "db-server-01:9090", + "job": "node-exporter", + "severity": "warning", + "device": "/dev/sda1" + }, + "annotations": { + "description": "Disk space is below 20% on {{ $labels.device }}", + "summary": "Low disk space warning" + }, + "state": "pending", + "activeAt": "2024-01-15T11:00:00.000Z", + "value": "18.5" + }, + { + "labels": { + "alertname": "ServiceDown", + "instance": "api-server-02:8080", + "job": "api-health-check", + "severity": "critical", + "service": "user-api" + }, + "annotations": { + "description": "Service {{ $labels.service }} is not responding", + "summary": "Service is down" + }, + "state": "pending", + "activeAt": "2024-01-15T11:10:00.000Z", + "value": "0" + }, + { + "labels": { + "alertname": "DatabaseConnections", + "instance": "db-server-01:5432", + "job": "postgres-exporter", + "severity": "info" + }, + "annotations": { + "description": "Database connection count is normal", + "summary": "Database connections stable" + }, + "state": "inactive", + "activeAt": "2024-01-15T09:00:00.000Z", + "value": "45" + }, + { + "labels": { + "alertname": "HTTPResponseTime", + "instance": "web-server-02:80", + "job": "blackbox-exporter", + "severity": "info" + }, + "annotations": { + "description": "HTTP response time is within acceptable limits", + "summary": "Response time normal" + }, + "state": "inactive", + "activeAt": "2024-01-15T08:30:00.000Z", + "value": "150" + } + ] + } +} \ No newline at end of file diff --git a/dummy-data/prowlarr/api/v1/health b/dummy-data/prowlarr/api/v1/health new file mode 100644 index 0000000..5809a87 --- /dev/null +++ b/dummy-data/prowlarr/api/v1/health @@ -0,0 +1,41 @@ +[ + { + "source": "IndexerStatusCheck", + "type": "warning", + "message": "Indexer 1337x has been disabled due to recent failures: Connection timeout after 30 seconds", + "wikiUrl": "https://wiki.servarr.com/prowlarr/health#indexers-are-unavailable-due-to-recent-failures" + }, + { + "source": "IndexerRSSCheck", + "type": "ok", + "message": "All indexer RSS feeds are functioning normally" + }, + { + "source": "ApplicationStatusCheck", + "type": "warning", + "message": "Application Sonarr sync failed: Unable to connect to Sonarr at http://sonarr:8989", + "wikiUrl": "https://wiki.servarr.com/prowlarr/health#applications-are-unavailable-due-to-recent-failures" + }, + { + "source": "UpdateCheck", + "type": "ok", + "message": "Update available: 1.11.4.4173 -> 1.12.2.4211" + }, + { + "source": "IndexerSearchCheck", + "type": "error", + "message": "Indexer TorrentLeech returned invalid search results: Malformed JSON response", + "wikiUrl": "https://wiki.servarr.com/prowlarr/health#indexer-search-failures" + }, + { + "source": "ProxyCheck", + "type": "ok", + "message": "No proxy configuration issues detected" + }, + { + "source": "IndexerLongTermStatusCheck", + "type": "warning", + "message": "Indexer RARBG has been failing for more than 6 hours: HTTP 403 Forbidden", + "wikiUrl": "https://wiki.servarr.com/prowlarr/health#indexers-are-unavailable-due-to-recent-failures" + } +] \ No newline at end of file diff --git a/dummy-data/radarr/api/v3/health b/dummy-data/radarr/api/v3/health new file mode 100644 index 0000000..67ffd2b --- /dev/null +++ b/dummy-data/radarr/api/v3/health @@ -0,0 +1,35 @@ +[ + { + "source": "IndexerStatusCheck", + "type": "warning", + "message": "Indexer TorrentDay is unavailable due to recent indexer errors: HTTP 503 Service Unavailable", + "wikiUrl": "https://wiki.servarr.com/radarr/health#indexers-are-unavailable-due-to-recent-failures" + }, + { + "source": "ImportMechanismCheck", + "type": "ok", + "message": "No issues with import mechanism checks" + }, + { + "source": "DownloadClientStatusCheck", + "type": "ok", + "message": "All download clients are available" + }, + { + "source": "RootFolderCheck", + "type": "warning", + "message": "Missing root folder: /movies", + "wikiUrl": "https://wiki.servarr.com/radarr/health#missing-root-folder" + }, + { + "source": "UpdateCheck", + "type": "ok", + "message": "Update available: 4.7.5.7809 -> 5.0.3.8127" + }, + { + "source": "DiskSpaceCheck", + "type": "error", + "message": "Disk space is critically low on /movies: 2.1 GB remaining", + "wikiUrl": "https://wiki.servarr.com/radarr/health#disk-space" + } +] \ No newline at end of file diff --git a/dummy-data/radarr/api/v3/queue b/dummy-data/radarr/api/v3/queue new file mode 100644 index 0000000..14785fd --- /dev/null +++ b/dummy-data/radarr/api/v3/queue @@ -0,0 +1,8 @@ +{ + "page": 1, + "pageSize": 20, + "sortKey": "progress", + "sortDirection": "descending", + "totalRecords": 2, + "records": [] +} \ No newline at end of file diff --git a/dummy-data/radarr/api/v3/queuedetails b/dummy-data/radarr/api/v3/queuedetails new file mode 100644 index 0000000..e459947 --- /dev/null +++ b/dummy-data/radarr/api/v3/queuedetails @@ -0,0 +1,16 @@ +[ + { + "movieId": 1, + "title": "Inception (2010)", + "trackedDownloadStatus": "ok", + "trackedDownloadState": "importPending", + "id": 1 + }, + { + "movieId": 2, + "title": "The Matrix (1999)", + "trackedDownloadStatus": "warning", + "trackedDownloadState": "downloading", + "id": 2 + } +] \ No newline at end of file diff --git a/dummy-data/radarr/api/v3/wanted/missing b/dummy-data/radarr/api/v3/wanted/missing new file mode 100644 index 0000000..2a0b134 --- /dev/null +++ b/dummy-data/radarr/api/v3/wanted/missing @@ -0,0 +1,161 @@ +{ + "page": 1, + "pageSize": 20, + "sortKey": "digitalRelease", + "sortDirection": "descending", + "totalRecords": 5, + "records": [ + { + "title": "Dune: Part Two", + "originalTitle": "Dune: Part Two", + "originalLanguage": { + "id": 1, + "name": "English" + }, + "alternateTitles": [], + "secondaryYear": null, + "secondaryYearSourceId": 0, + "sortTitle": "dune part two", + "sizeOnDisk": 0, + "status": "released", + "overview": "Follow the mythic journey of Paul Atreides as he unites with Chani and the Fremen while on a path of revenge against the conspirators who destroyed his family.", + "inCinemas": "2024-02-29T00:00:00Z", + "physicalRelease": "2024-05-14T00:00:00Z", + "digitalRelease": "2024-04-16T00:00:00Z", + "images": [], + "website": "", + "remotePoster": "", + "year": 2024, + "hasFile": false, + "youTubeTrailerId": "", + "studio": "Warner Bros. Pictures", + "path": "/movies/Dune Part Two (2024)", + "qualityProfileId": 1, + "monitored": true, + "minimumAvailability": "announced", + "isAvailable": true, + "folderName": "Dune Part Two (2024)", + "runtime": 166, + "cleanTitle": "duneparttwo", + "imdbId": "tt15239678", + "tmdbId": 693134, + "titleSlug": "dune-part-two-2024", + "certification": "PG-13", + "genres": ["Adventure", "Drama", "Science Fiction"], + "tags": [], + "added": "2024-01-10T00:00:00Z", + "ratings": { + "votes": 234567, + "value": 8.9 + }, + "movieFile": null, + "collection": { + "name": "Dune Collection", + "tmdbId": 726871, + "images": [] + }, + "popularity": 89.245, + "id": 3 + }, + { + "title": "Oppenheimer", + "originalTitle": "Oppenheimer", + "originalLanguage": { + "id": 1, + "name": "English" + }, + "alternateTitles": [], + "secondaryYear": null, + "secondaryYearSourceId": 0, + "sortTitle": "oppenheimer", + "sizeOnDisk": 0, + "status": "released", + "overview": "The story of J. Robert Oppenheimer's role in the development of the atomic bomb during World War II.", + "inCinemas": "2023-07-21T00:00:00Z", + "physicalRelease": "2023-11-21T00:00:00Z", + "digitalRelease": "2023-10-31T00:00:00Z", + "images": [], + "website": "", + "remotePoster": "", + "year": 2023, + "hasFile": false, + "youTubeTrailerId": "", + "studio": "Universal Pictures", + "path": "/movies/Oppenheimer (2023)", + "qualityProfileId": 1, + "monitored": true, + "minimumAvailability": "announced", + "isAvailable": true, + "folderName": "Oppenheimer (2023)", + "runtime": 180, + "cleanTitle": "oppenheimer", + "imdbId": "tt15398776", + "tmdbId": 872585, + "titleSlug": "oppenheimer-2023", + "certification": "R", + "genres": ["Drama", "History"], + "tags": [], + "added": "2024-01-05T00:00:00Z", + "ratings": { + "votes": 456789, + "value": 8.4 + }, + "movieFile": null, + "collection": null, + "popularity": 92.567, + "id": 4 + }, + { + "title": "Spider-Man: Across the Spider-Verse", + "originalTitle": "Spider-Man: Across the Spider-Verse", + "originalLanguage": { + "id": 1, + "name": "English" + }, + "alternateTitles": [], + "secondaryYear": null, + "secondaryYearSourceId": 0, + "sortTitle": "spider man across spider verse", + "sizeOnDisk": 0, + "status": "released", + "overview": "After reuniting with Gwen Stacy, Brooklyn's full-time, friendly neighborhood Spider-Man is catapulted across the Multiverse, where he encounters the Spider-Society.", + "inCinemas": "2023-06-02T00:00:00Z", + "physicalRelease": "2023-09-05T00:00:00Z", + "digitalRelease": "2023-08-08T00:00:00Z", + "images": [], + "website": "", + "remotePoster": "", + "year": 2023, + "hasFile": false, + "youTubeTrailerId": "", + "studio": "Sony Pictures Animation", + "path": "/movies/Spider-Man Across the Spider-Verse (2023)", + "qualityProfileId": 2, + "monitored": true, + "minimumAvailability": "announced", + "isAvailable": true, + "folderName": "Spider-Man Across the Spider-Verse (2023)", + "runtime": 140, + "cleanTitle": "spidermanacrossthespiderverse", + "imdbId": "tt9362722", + "tmdbId": 569094, + "titleSlug": "spider-man-across-the-spider-verse-2023", + "certification": "PG", + "genres": ["Animation", "Action", "Adventure"], + "tags": [], + "added": "2024-01-03T00:00:00Z", + "ratings": { + "votes": 345678, + "value": 8.7 + }, + "movieFile": null, + "collection": { + "name": "Spider-Verse Collection", + "tmdbId": 573436, + "images": [] + }, + "popularity": 85.432, + "id": 5 + } + ] +} \ No newline at end of file diff --git a/dummy-data/sabnzbd/api b/dummy-data/sabnzbd/api new file mode 100644 index 0000000..290561f --- /dev/null +++ b/dummy-data/sabnzbd/api @@ -0,0 +1,97 @@ +{ + "queue": { + "version": "4.1.0", + "paused": false, + "pause_int": "0", + "paused_all": false, + "diskspace1": "465.47", + "diskspace2": "465.47", + "diskspacetotal1": "931.51", + "diskspacetotal2": "931.51", + "speedlimit": "", + "speedlimit_abs": "", + "have_warnings": "0", + "finishaction": null, + "quota": "", + "left_quota": "0 ", + "cache_art": "0", + "cache_size": "0 B", + "kbpersec": "8547.82", + "speed": "8.35", + "mbleft": "2847.93", + "mb": "2847.93", + "noofslots": 3, + "noofslots_total": 8, + "status": "Downloading", + "timeleft": "0:05:41", + "eta": "22:15:41", + "slots": [ + { + "index": 0, + "nzo_id": "SABnzbd_nzo_abc123", + "unpackopts": "3", + "priority": "Normal", + "script": "None", + "filename": "Ubuntu.22.04.3.Desktop.amd64.iso", + "labels": [], + "password": "", + "cat": "software", + "mbleft": "1847.52", + "mb": "1847.52", + "size": "1.8 GB", + "sizeleft": "1.8 GB", + "percentage": "0", + "mbmissing": "0.00", + "direct_unpack": "0", + "status": "Downloading", + "timeleft": "0:03:41", + "eta": "unknown", + "avg_age": "4d" + }, + { + "index": 1, + "nzo_id": "SABnzbd_nzo_def456", + "unpackopts": "3", + "priority": "High", + "script": "None", + "filename": "Movie.Collection.2023.1080p.BluRay.x264", + "labels": ["movie"], + "password": "", + "cat": "movies", + "mbleft": "756.41", + "mb": "756.41", + "size": "756.4 MB", + "sizeleft": "756.4 MB", + "percentage": "12", + "mbmissing": "0.00", + "direct_unpack": "0", + "status": "Downloading", + "timeleft": "0:01:35", + "eta": "unknown", + "avg_age": "1d" + }, + { + "index": 2, + "nzo_id": "SABnzbd_nzo_ghi789", + "unpackopts": "3", + "priority": "Normal", + "script": "cleanup.py", + "filename": "TV.Show.S05E08.1080p.WEB.H264-GROUP", + "labels": ["tv"], + "password": "", + "cat": "tv", + "mbleft": "244.00", + "mb": "244.00", + "size": "244.0 MB", + "sizeleft": "244.0 MB", + "percentage": "65", + "mbmissing": "0.00", + "direct_unpack": "1", + "status": "Downloading", + "timeleft": "0:00:25", + "eta": "unknown", + "avg_age": "12h" + } + ] + } +} \ No newline at end of file diff --git a/dummy-data/scrutiny/api/summary b/dummy-data/scrutiny/api/summary new file mode 100644 index 0000000..0adeabc --- /dev/null +++ b/dummy-data/scrutiny/api/summary @@ -0,0 +1,162 @@ +{ + "success": true, + "data": { + "summary": { + "0x5000cca264eb01d7": { + "device": { + "wwn": "0x5000cca264eb01d7", + "device_name": "Samsung SSD 980 1TB", + "device_uuid": "WWN-0x5000cca264eb01d7", + "device_serial_id": "S64HNE0T123456A", + "device_label": "", + "manufacture": "Samsung", + "model_name": "Samsung SSD 980 1TB", + "interface_type": "nvme", + "interface_speed": "", + "serial_number": "S64HNE0T123456A", + "firmware": "2B4QGXA7", + "rotational_speed": 0, + "capacity": 1000204886016, + "form_factor": "", + "smart_support": true, + "device_protocol": "NVMe", + "device_type": "", + "device_status": 0, + "created_at": "2024-01-15T10:30:00Z", + "updated_at": "2024-01-15T11:45:00Z", + "deleted_at": null + }, + "smart": { + "collector_date": "2024-01-15T11:45:00Z", + "temp": 35, + "power_on_hours": 2847, + "power_cycle_count": 1247 + } + }, + "0x5000cca264eb01d8": { + "device": { + "wwn": "0x5000cca264eb01d8", + "device_name": "Western Digital WD Blue 2TB", + "device_uuid": "WWN-0x5000cca264eb01d8", + "device_serial_id": "WD-WCC4N7DS2468", + "device_label": "", + "manufacture": "Western Digital", + "model_name": "WDC WD20EZAZ-00GXCB0", + "interface_type": "ata", + "interface_speed": "", + "serial_number": "WD-WCC4N7DS2468", + "firmware": "80.00A80", + "rotational_speed": 5400, + "capacity": 2000398934016, + "form_factor": "", + "smart_support": true, + "device_protocol": "ATA", + "device_type": "", + "device_status": 0, + "created_at": "2024-01-15T10:30:00Z", + "updated_at": "2024-01-15T11:45:00Z", + "deleted_at": null + }, + "smart": { + "collector_date": "2024-01-15T11:45:00Z", + "temp": 41, + "power_on_hours": 8942, + "power_cycle_count": 892 + } + }, + "0x500a0751e6b8a7c3": { + "device": { + "wwn": "0x500a0751e6b8a7c3", + "device_name": "Seagate Barracuda 4TB", + "device_uuid": "WWN-0x500a0751e6b8a7c3", + "device_serial_id": "ST4000DM004-2CV104", + "device_label": "", + "manufacture": "Seagate", + "model_name": "ST4000DM004-2CV104", + "interface_type": "ata", + "interface_speed": "", + "serial_number": "ZFN123AB", + "firmware": "0001", + "rotational_speed": 5400, + "capacity": 4000787030016, + "form_factor": "", + "smart_support": true, + "device_protocol": "ATA", + "device_type": "", + "device_status": 2, + "created_at": "2024-01-15T10:30:00Z", + "updated_at": "2024-01-15T11:45:00Z", + "deleted_at": null + }, + "smart": { + "collector_date": "2024-01-15T11:45:00Z", + "temp": 47, + "power_on_hours": 12456, + "power_cycle_count": 456 + } + }, + "0x5000cca264eb01d9": { + "device": { + "wwn": "0x5000cca264eb01d9", + "device_name": "Kingston NV2 500GB", + "device_uuid": "WWN-0x5000cca264eb01d9", + "device_serial_id": "50026B7784123456", + "device_label": "", + "manufacture": "Kingston", + "model_name": "KINGSTON SNV2S500G", + "interface_type": "nvme", + "interface_speed": "", + "serial_number": "50026B7784123456", + "firmware": "SNV2S2.1.0", + "rotational_speed": 0, + "capacity": 500107862016, + "form_factor": "", + "smart_support": true, + "device_protocol": "NVMe", + "device_type": "", + "device_status": 4, + "created_at": "2024-01-15T10:30:00Z", + "updated_at": "2024-01-15T11:45:00Z", + "deleted_at": null + }, + "smart": { + "collector_date": "2024-01-15T11:45:00Z", + "temp": 52, + "power_on_hours": 1247, + "power_cycle_count": 89 + } + }, + "0x5000cca264eb01da": { + "device": { + "wwn": "0x5000cca264eb01da", + "device_name": "Crucial MX500 1TB", + "device_uuid": "WWN-0x5000cca264eb01da", + "device_serial_id": "194251A12345", + "device_label": "", + "manufacture": "Crucial", + "model_name": "CT1000MX500SSD1", + "interface_type": "ata", + "interface_speed": "", + "serial_number": "194251A12345", + "firmware": "M3CR033", + "rotational_speed": 0, + "capacity": 1000204886016, + "form_factor": "", + "smart_support": true, + "device_protocol": "ATA", + "device_type": "", + "device_status": 0, + "created_at": "2024-01-15T10:30:00Z", + "updated_at": "2024-01-15T11:45:00Z", + "deleted_at": null + }, + "smart": { + "collector_date": "2024-01-15T11:45:00Z", + "temp": 39, + "power_on_hours": 5642, + "power_cycle_count": 1089 + } + } + } + } +} \ No newline at end of file diff --git a/dummy-data/sonarr/api/v3/health b/dummy-data/sonarr/api/v3/health new file mode 100644 index 0000000..38bc506 --- /dev/null +++ b/dummy-data/sonarr/api/v3/health @@ -0,0 +1,29 @@ +[ + { + "source": "IndexerStatusCheck", + "type": "warning", + "message": "Indexer MyIndexer is unavailable due to recent indexer errors: Request timeout", + "wikiUrl": "https://wiki.servarr.com/sonarr/health#indexers-are-unavailable-due-to-recent-failures" + }, + { + "source": "ImportMechanismCheck", + "type": "ok", + "message": "No issues with import mechanism checks" + }, + { + "source": "DownloadClientStatusCheck", + "type": "ok", + "message": "All download clients are available" + }, + { + "source": "RootFolderCheck", + "type": "warning", + "message": "Missing root folder: /media/tv", + "wikiUrl": "https://wiki.servarr.com/sonarr/health#missing-root-folder" + }, + { + "source": "UpdateCheck", + "type": "ok", + "message": "Update available: 3.0.10.1567 -> 4.0.1.929" + } +] \ No newline at end of file diff --git a/dummy-data/sonarr/api/v3/queue b/dummy-data/sonarr/api/v3/queue new file mode 100644 index 0000000..64406b2 --- /dev/null +++ b/dummy-data/sonarr/api/v3/queue @@ -0,0 +1,77 @@ +{ + "page": 1, + "pageSize": 20, + "sortKey": "progress", + "sortDirection": "descending", + "totalRecords": 3, + "records": [ + { + "seriesId": 1, + "episodeId": 12345, + "seasonNumber": 5, + "episodeNumber": 8, + "title": "The Office S05E08 - Business Trip", + "size": 1073741824, + "sizeleft": 0, + "timeleft": "00:00:00", + "estimatedCompletionTime": "2024-01-15T10:30:00Z", + "status": "completed", + "trackedDownloadStatus": "ok", + "trackedDownloadState": "importPending", + "statusMessages": [], + "downloadId": "download123abc", + "protocol": "torrent", + "downloadClient": "qBittorrent", + "indexer": "Prowlarr", + "outputPath": "/downloads/complete/The.Office.US.S05E08.720p.WEB.x264-GROUP", + "id": 1 + }, + { + "seriesId": 2, + "episodeId": 67890, + "seasonNumber": 3, + "episodeNumber": 15, + "title": "Breaking Bad S03E15 - Half Measures", + "size": 2147483648, + "sizeleft": 536870912, + "timeleft": "00:15:23", + "estimatedCompletionTime": "2024-01-15T10:45:23Z", + "status": "downloading", + "trackedDownloadStatus": "ok", + "trackedDownloadState": "downloading", + "statusMessages": [], + "downloadId": "download456def", + "protocol": "torrent", + "downloadClient": "qBittorrent", + "indexer": "Prowlarr", + "outputPath": "/downloads/incomplete/Breaking.Bad.S03E15.1080p.BluRay.x264-GROUP", + "id": 2 + }, + { + "seriesId": 3, + "episodeId": 11121, + "seasonNumber": 1, + "episodeNumber": 3, + "title": "Better Call Saul S01E03 - Nacho", + "size": 1610612736, + "sizeleft": 1073741824, + "timeleft": "01:24:15", + "estimatedCompletionTime": "2024-01-15T12:09:15Z", + "status": "downloading", + "trackedDownloadStatus": "warning", + "trackedDownloadState": "downloading", + "statusMessages": [ + { + "title": "Slow Download Speed", + "messages": ["Download speed is below expected threshold"] + } + ], + "downloadId": "download789ghi", + "protocol": "usenet", + "downloadClient": "SABnzbd", + "indexer": "NZBgeek", + "outputPath": "/downloads/incomplete/Better.Call.Saul.S01E03.720p.WEB.x264-GROUP", + "id": 3 + } + ] +} \ No newline at end of file diff --git a/dummy-data/sonarr/api/v3/wanted/missing b/dummy-data/sonarr/api/v3/wanted/missing new file mode 100644 index 0000000..cc6c02f --- /dev/null +++ b/dummy-data/sonarr/api/v3/wanted/missing @@ -0,0 +1,129 @@ +{ + "page": 1, + "pageSize": 20, + "sortKey": "airDateUtc", + "sortDirection": "descending", + "totalRecords": 15, + "records": [ + { + "seriesId": 1, + "tvdbId": 73244, + "seasonNumber": 9, + "episodeNumber": 23, + "title": "Finale", + "airDate": "2013-05-16", + "airDateUtc": "2013-05-17T01:00:00Z", + "overview": "One year later, Dunder Mifflin Scranton has thrived, but Jim and Pam are looking to a move to Philadelphia.", + "episodeFile": null, + "hasFile": false, + "monitored": true, + "absoluteEpisodeNumber": 201, + "series": { + "title": "The Office (US)", + "sortTitle": "office us", + "seasonCount": 9, + "status": "ended", + "overview": "A mockumentary about a group of typical office workers.", + "network": "NBC", + "airTime": "21:00", + "images": [], + "seasons": [], + "year": 2005, + "path": "/media/tv/The Office (US)", + "qualityProfileId": 1, + "languageProfileId": 1, + "seasonFolder": true, + "monitored": true, + "useSceneNumbering": false, + "runtime": 22, + "tvdbId": 73244, + "tvRageId": 6061, + "tvMazeId": 526, + "firstAired": "2005-03-24T00:00:00Z", + "lastInfoSync": "2024-01-15T09:00:00Z", + "seriesType": "standard", + "cleanTitle": "theoffice", + "imdbId": "tt0386676", + "titleSlug": "the-office-us", + "certification": "TV-14", + "genres": ["Comedy"], + "tags": [], + "added": "2024-01-01T00:00:00Z", + "ratings": { + "votes": 654321, + "value": 8.9 + }, + "statistics": { + "seasonCount": 9, + "episodeFileCount": 200, + "episodeCount": 201, + "totalEpisodeCount": 201, + "sizeOnDisk": 107374182400, + "percentOfEpisodes": 99.5 + }, + "id": 1 + }, + "id": 4567 + }, + { + "seriesId": 2, + "tvdbId": 81189, + "seasonNumber": 5, + "episodeNumber": 16, + "title": "Felina", + "airDate": "2013-09-29", + "airDateUtc": "2013-09-30T01:00:00Z", + "overview": "Walt's final confrontation with his past mistakes leads to a climactic conclusion.", + "episodeFile": null, + "hasFile": false, + "monitored": true, + "absoluteEpisodeNumber": 62, + "series": { + "title": "Breaking Bad", + "sortTitle": "breaking bad", + "seasonCount": 5, + "status": "ended", + "overview": "A high school chemistry teacher turned methamphetamine manufacturer.", + "network": "AMC", + "airTime": "21:00", + "images": [], + "seasons": [], + "year": 2008, + "path": "/media/tv/Breaking Bad", + "qualityProfileId": 1, + "languageProfileId": 1, + "seasonFolder": true, + "monitored": true, + "useSceneNumbering": false, + "runtime": 47, + "tvdbId": 81189, + "tvRageId": 18164, + "tvMazeId": 169, + "firstAired": "2008-01-20T00:00:00Z", + "lastInfoSync": "2024-01-15T09:00:00Z", + "seriesType": "standard", + "cleanTitle": "breakingbad", + "imdbId": "tt0903747", + "titleSlug": "breaking-bad", + "certification": "TV-MA", + "genres": ["Crime", "Drama", "Thriller"], + "tags": [], + "added": "2024-01-01T00:00:00Z", + "ratings": { + "votes": 1234567, + "value": 9.5 + }, + "statistics": { + "seasonCount": 5, + "episodeFileCount": 61, + "episodeCount": 62, + "totalEpisodeCount": 62, + "sizeOnDisk": 161061273600, + "percentOfEpisodes": 98.4 + }, + "id": 2 + }, + "id": 8901 + } + ] +} \ No newline at end of file diff --git a/dummy-data/tautulli/api/v2 b/dummy-data/tautulli/api/v2 new file mode 100644 index 0000000..6dd7605 --- /dev/null +++ b/dummy-data/tautulli/api/v2 @@ -0,0 +1,185 @@ +{ + "response": { + "result": "success", + "message": null, + "data": { + "stream_count": 3, + "stream_count_direct_play": 1, + "stream_count_direct_stream": 1, + "stream_count_transcode": 1, + "total_bandwidth": 15420, + "wan_bandwidth": 8240, + "lan_bandwidth": 7180, + "sessions": [ + { + "session_key": "425", + "session_id": "tautulli_session_425", + "media_index": "1", + "parent_media_index": "1", + "art": "/library/metadata/98765/art/1705317600", + "thumb": "/library/metadata/98765/thumb/1705317600", + "grandparent_thumb": "/library/metadata/98765/thumb/1705317600", + "title": "The One Where Monica Gets a Roommate", + "parent_title": "Season 1", + "grandparent_title": "Friends", + "original_title": "", + "year": 1994, + "media_type": "episode", + "rating_key": "98765", + "parent_rating_key": "98764", + "grandparent_rating_key": "98763", + "state": "playing", + "session_progress": 42, + "view_offset": 630000, + "duration": 1500000, + "remaining_time": 870000, + "progress_percent": 42, + "username": "john_doe", + "friendly_name": "John's iPhone", + "user_id": 1, + "user": "john_doe", + "ip_address": "192.168.1.105", + "ip_address_public": "203.0.113.45", + "location": "lan", + "secure": 1, + "relayed": 0, + "platform": "iOS", + "platform_name": "iPhone", + "platform_version": "17.2", + "product": "Plex for iOS", + "product_version": "8.25.1", + "profile": "Mobile", + "player": "PlexMobile", + "machine_id": "abc123def456", + "bandwidth": 4820, + "quality_profile": "4 Mbps 720p", + "video_resolution": "720p", + "video_framerate": "24p", + "video_codec": "h264", + "video_bitrate": 4200, + "video_width": 1280, + "video_height": 720, + "audio_codec": "aac", + "audio_bitrate": 128, + "audio_channels": 2, + "transcode_decision": "transcode", + "stream_container": "mkv", + "stream_video_codec": "h264", + "stream_audio_codec": "aac" + }, + { + "session_key": "426", + "session_id": "tautulli_session_426", + "media_index": "3", + "parent_media_index": "2", + "art": "/library/metadata/45678/art/1705317600", + "thumb": "/library/metadata/45678/thumb/1705317600", + "grandparent_thumb": "/library/metadata/45678/thumb/1705317600", + "title": "The One with the Sonogram at the End", + "parent_title": "Season 1", + "grandparent_title": "Friends", + "original_title": "", + "year": 1994, + "media_type": "episode", + "rating_key": "45678", + "parent_rating_key": "45677", + "grandparent_rating_key": "45676", + "state": "playing", + "session_progress": 18, + "view_offset": 270000, + "duration": 1500000, + "remaining_time": 1230000, + "progress_percent": 18, + "username": "sarah_smith", + "friendly_name": "Sarah's TV", + "user_id": 2, + "user": "sarah_smith", + "ip_address": "192.168.1.110", + "ip_address_public": "203.0.113.45", + "location": "lan", + "secure": 1, + "relayed": 0, + "platform": "Roku", + "platform_name": "Roku Ultra", + "platform_version": "12.5.0", + "product": "Plex for Roku", + "product_version": "6.8.0", + "profile": "Roku", + "player": "Roku", + "machine_id": "def456ghi789", + "bandwidth": 2360, + "quality_profile": "2 Mbps 480p", + "video_resolution": "480p", + "video_framerate": "24p", + "video_codec": "h264", + "video_bitrate": 2000, + "video_width": 720, + "video_height": 480, + "audio_codec": "aac", + "audio_bitrate": 128, + "audio_channels": 2, + "transcode_decision": "direct_stream", + "stream_container": "mkv", + "stream_video_codec": "h264", + "stream_audio_codec": "aac" + }, + { + "session_key": "427", + "session_id": "tautulli_session_427", + "media_index": null, + "parent_media_index": null, + "art": "/library/metadata/12345/art/1705317600", + "thumb": "/library/metadata/12345/thumb/1705317600", + "grandparent_thumb": "", + "title": "Inception", + "parent_title": "", + "grandparent_title": "", + "original_title": "Inception", + "year": 2010, + "media_type": "movie", + "rating_key": "12345", + "parent_rating_key": "", + "grandparent_rating_key": "", + "state": "playing", + "session_progress": 67, + "view_offset": 5952000, + "duration": 8880000, + "remaining_time": 2928000, + "progress_percent": 67, + "username": "movie_buff", + "friendly_name": "Living Room TV", + "user_id": 3, + "user": "movie_buff", + "ip_address": "10.0.0.15", + "ip_address_public": "198.51.100.25", + "location": "wan", + "secure": 1, + "relayed": 1, + "platform": "Android TV", + "platform_name": "NVIDIA Shield TV", + "platform_version": "11", + "product": "Plex for Android TV", + "product_version": "9.12.0", + "profile": "Android TV", + "player": "AndroidTV", + "machine_id": "ghi789jkl012", + "bandwidth": 8240, + "quality_profile": "8 Mbps 1080p", + "video_resolution": "1080p", + "video_framerate": "24p", + "video_codec": "h264", + "video_bitrate": 8000, + "video_width": 1920, + "video_height": 1080, + "audio_codec": "ac3", + "audio_bitrate": 640, + "audio_channels": 6, + "transcode_decision": "direct_play", + "stream_container": "mkv", + "stream_video_codec": "h264", + "stream_audio_codec": "ac3" + } + ] + } + } +} \ No newline at end of file diff --git a/dummy-data/truenasscale/api/v2.0/system/version b/dummy-data/truenasscale/api/v2.0/system/version new file mode 100644 index 0000000..1d94464 --- /dev/null +++ b/dummy-data/truenasscale/api/v2.0/system/version @@ -0,0 +1 @@ +"TrueNAS-SCALE-22.12.4.2" \ No newline at end of file diff --git a/dummy-data/uptimekuma/api/status-page/default b/dummy-data/uptimekuma/api/status-page/default new file mode 100644 index 0000000..fb69a18 --- /dev/null +++ b/dummy-data/uptimekuma/api/status-page/default @@ -0,0 +1,64 @@ +{ + "config": { + "title": "Homer Dashboard Status", + "description": "Status page for all monitored services", + "icon": "/icon.svg", + "theme": "light", + "published": true, + "showTags": true, + "domainNames": [ + "status.homer.local" + ], + "customCSS": "", + "footerText": null, + "showPoweredBy": true, + "googleAnalyticsId": null, + "showCertificateExpiry": false, + "certExpiryDays": 14 + }, + "incident": null, + "publicGroupList": [ + { + "id": 1, + "name": "Web Services", + "weight": 1, + "monitorList": [ + { + "id": 1, + "name": "Main Website", + "url": "https://example.com", + "type": "http", + "interval": 60 + }, + { + "id": 2, + "name": "API Server", + "url": "https://api.example.com", + "type": "http", + "interval": 60 + } + ] + }, + { + "id": 2, + "name": "Infrastructure", + "weight": 2, + "monitorList": [ + { + "id": 3, + "name": "Database Server", + "url": "postgresql://db.example.com:5432", + "type": "postgres", + "interval": 120 + }, + { + "id": 4, + "name": "Redis Cache", + "url": "redis://cache.example.com:6379", + "type": "redis", + "interval": 60 + } + ] + } + ] +} \ No newline at end of file diff --git a/dummy-data/uptimekuma/api/status-page/heartbeat/default b/dummy-data/uptimekuma/api/status-page/heartbeat/default new file mode 100644 index 0000000..6c3032a --- /dev/null +++ b/dummy-data/uptimekuma/api/status-page/heartbeat/default @@ -0,0 +1,114 @@ +{ + "heartbeatList": { + "1": [ + { + "status": 1, + "time": "2024-01-15 10:00:00", + "msg": "200 - OK", + "ping": 45, + "important": false, + "duration": 0 + }, + { + "status": 1, + "time": "2024-01-15 10:01:00", + "msg": "200 - OK", + "ping": 52, + "important": false, + "duration": 0 + }, + { + "status": 1, + "time": "2024-01-15 10:02:00", + "msg": "200 - OK", + "ping": 38, + "important": false, + "duration": 0 + } + ], + "2": [ + { + "status": 1, + "time": "2024-01-15 10:00:00", + "msg": "200 - OK", + "ping": 67, + "important": false, + "duration": 0 + }, + { + "status": 1, + "time": "2024-01-15 10:01:00", + "msg": "200 - OK", + "ping": 71, + "important": false, + "duration": 0 + }, + { + "status": 1, + "time": "2024-01-15 10:02:00", + "msg": "200 - OK", + "ping": 63, + "important": false, + "duration": 0 + } + ], + "3": [ + { + "status": 1, + "time": "2024-01-15 10:00:00", + "msg": "Connected successfully", + "ping": 12, + "important": false, + "duration": 0 + }, + { + "status": 0, + "time": "2024-01-15 10:02:00", + "msg": "Connection timeout", + "ping": null, + "important": true, + "duration": 5000 + }, + { + "status": 1, + "time": "2024-01-15 10:04:00", + "msg": "Connected successfully", + "ping": 15, + "important": false, + "duration": 0 + } + ], + "4": [ + { + "status": 1, + "time": "2024-01-15 10:00:00", + "msg": "PONG received", + "ping": 3, + "important": false, + "duration": 0 + }, + { + "status": 1, + "time": "2024-01-15 10:01:00", + "msg": "PONG received", + "ping": 2, + "important": false, + "duration": 0 + }, + { + "status": 1, + "time": "2024-01-15 10:02:00", + "msg": "PONG received", + "ping": 4, + "important": false, + "duration": 0 + } + ] + }, + "uptimeList": { + "1": 1.0, + "2": 1.0, + "3": 0.95, + "4": 1.0 + } +} \ No newline at end of file diff --git a/dummy-data/vaultwarden/api/version b/dummy-data/vaultwarden/api/version new file mode 100644 index 0000000..c450c5e --- /dev/null +++ b/dummy-data/vaultwarden/api/version @@ -0,0 +1 @@ +"1.30.3" \ No newline at end of file diff --git a/dummy-data/wud/api/containers b/dummy-data/wud/api/containers new file mode 100644 index 0000000..e3e1b2e --- /dev/null +++ b/dummy-data/wud/api/containers @@ -0,0 +1,182 @@ +[ + { + "id": "nginx-proxy", + "name": "nginx-proxy", + "watcher": "docker", + "image": { + "registry": { + "name": "hub.docker.com", + "url": "https://registry-1.docker.io/v2" + }, + "name": "nginx", + "tag": { + "value": "1.25.3", + "semver": true + }, + "digest": { + "watch": false, + "repo": "sha256:1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef" + }, + "architecture": "amd64", + "os": "linux", + "created": "2023-12-15T10:30:00Z" + }, + "result": { + "tag": "1.25.4" + }, + "updateAvailable": true, + "status": "running", + "created": "2024-01-10T08:15:00Z", + "updated": "2024-01-15T11:30:00Z" + }, + { + "id": "postgres-db", + "name": "postgres-db", + "watcher": "docker", + "image": { + "registry": { + "name": "hub.docker.com", + "url": "https://registry-1.docker.io/v2" + }, + "name": "postgres", + "tag": { + "value": "15.5-alpine", + "semver": true + }, + "digest": { + "watch": false, + "repo": "sha256:2345678901abcdef2345678901abcdef2345678901abcdef2345678901abcdef" + }, + "architecture": "amd64", + "os": "linux", + "created": "2023-11-28T14:22:00Z" + }, + "result": { + "tag": "16.1-alpine" + }, + "updateAvailable": true, + "status": "running", + "created": "2024-01-08T12:45:00Z", + "updated": "2024-01-15T11:30:00Z" + }, + { + "id": "redis-cache", + "name": "redis-cache", + "watcher": "docker", + "image": { + "registry": { + "name": "hub.docker.com", + "url": "https://registry-1.docker.io/v2" + }, + "name": "redis", + "tag": { + "value": "7.2.4-alpine", + "semver": true + }, + "digest": { + "watch": false, + "repo": "sha256:3456789012abcdef3456789012abcdef3456789012abcdef3456789012abcdef" + }, + "architecture": "amd64", + "os": "linux", + "created": "2024-01-12T09:18:00Z" + }, + "result": { + "tag": "7.2.4-alpine" + }, + "updateAvailable": false, + "status": "running", + "created": "2024-01-12T16:20:00Z", + "updated": "2024-01-15T11:30:00Z" + }, + { + "id": "portainer-agent", + "name": "portainer-agent", + "watcher": "docker", + "image": { + "registry": { + "name": "hub.docker.com", + "url": "https://registry-1.docker.io/v2" + }, + "name": "portainer/agent", + "tag": { + "value": "2.19.4", + "semver": true + }, + "digest": { + "watch": false, + "repo": "sha256:4567890123abcdef4567890123abcdef4567890123abcdef4567890123abcdef" + }, + "architecture": "amd64", + "os": "linux", + "created": "2024-01-05T07:42:00Z" + }, + "result": { + "tag": "2.19.4" + }, + "updateAvailable": false, + "status": "running", + "created": "2024-01-05T14:30:00Z", + "updated": "2024-01-15T11:30:00Z" + }, + { + "id": "app-backend", + "name": "app-backend", + "watcher": "docker", + "image": { + "registry": { + "name": "hub.docker.com", + "url": "https://registry-1.docker.io/v2" + }, + "name": "node", + "tag": { + "value": "18.19.0-alpine", + "semver": true + }, + "digest": { + "watch": false, + "repo": "sha256:5678901234abcdef5678901234abcdef5678901234abcdef5678901234abcdef" + }, + "architecture": "amd64", + "os": "linux", + "created": "2023-12-28T11:15:00Z" + }, + "result": { + "tag": "20.11.0-alpine" + }, + "updateAvailable": true, + "status": "running", + "created": "2024-01-07T09:12:00Z", + "updated": "2024-01-15T11:30:00Z" + }, + { + "id": "prometheus", + "name": "prometheus", + "watcher": "docker", + "image": { + "registry": { + "name": "quay.io", + "url": "https://quay.io/v2" + }, + "name": "prometheus/prometheus", + "tag": { + "value": "v2.48.1", + "semver": true + }, + "digest": { + "watch": false, + "repo": "sha256:6789012345abcdef6789012345abcdef6789012345abcdef6789012345abcdef" + }, + "architecture": "amd64", + "os": "linux", + "created": "2023-12-20T16:33:00Z" + }, + "result": { + "tag": "v2.49.1" + }, + "updateAvailable": true, + "status": "running", + "created": "2024-01-03T13:55:00Z", + "updated": "2024-01-15T11:30:00Z" + } +] \ No newline at end of file From 63647e837ad00d165938694ac4759af8b94def4e Mon Sep 17 00:00:00 2001 From: Igor Kulman Date: Sun, 24 Aug 2025 18:13:20 +0200 Subject: [PATCH 11/52] Do not append subtitle to document title when empty --- src/App.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/App.vue b/src/App.vue index 364c611..0c3e15e 100644 --- a/src/App.vue +++ b/src/App.vue @@ -186,7 +186,7 @@ export default { document.title = this.config.documentTitle || - `${this.config.title} | ${this.config.subtitle}`; + [this.config.title, this.config.subtitle].filter(Boolean).join(" | "); if (this.config.stylesheet) { let stylesheet = ""; let addtionnal_styles = this.config.stylesheet; From 61d5d0b722a738a4a0fa5f790b330f1a49d0d5b2 Mon Sep 17 00:00:00 2001 From: Bastien Wirtz Date: Sun, 21 Sep 2025 15:43:28 +0200 Subject: [PATCH 12/52] fix: ensure independent service state between page --- src/App.vue | 3 ++- src/components/ServiceGroup.vue | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/App.vue b/src/App.vue index 0c3e15e..4f02320 100644 --- a/src/App.vue +++ b/src/App.vue @@ -78,7 +78,7 @@ > Date: Sat, 27 Sep 2025 14:42:31 +0200 Subject: [PATCH 15/52] doc: add agent instructions file. --- .gitignore | 6 +++- AGENTS.md | 84 +++++++++++++++++++++++++++++++++++++++++++++++++ CONTRIBUTING.md | 12 ++++++- 3 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 AGENTS.md diff --git a/.gitignore b/.gitignore index ee51c88..6eb9005 100644 --- a/.gitignore +++ b/.gitignore @@ -23,4 +23,8 @@ yarn-error.log* # App configuration config.yml -.drone.yml \ No newline at end of file +.drone.yml + +# Specific Agent file +CLAUDE.md +GEMINI.md diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..29d7dfb --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,84 @@ +# AGENTS Instructions + +This file provides guidance to AI Agents when working with code in this repository. + +## Development Commands + +```bash +pnpm install # Install dependencies (PNPM enforced via packageManager) +pnpm dev # Start development server on http://localhost:3000 +pnpm mock # Start mock API server for testing service integrations +pnpm build # Build for production +pnpm preview # Preview production build +pnpm lint # Run ESLint with auto-fix +``` + +## Architecture Overview + +Homer is a static Vue.js 3 PWA dashboard that loads configuration from YAML files. The architecture is service-oriented with dynamic component loading. + +### Core Application Structure + +- **Entry Point**: `src/main.js` mounts the Vue app +- **Root Component**: `src/App.vue` handles layout, configuration loading, and routing +- **Configuration System**: YAML-based with runtime merging of defaults (`src/assets/defaults.yml`) and user config (`/assets/config.yml`) +- **Service Components**: 53 specialized integrations in `src/components/services/` that extend a Generic component pattern + +### Service Integration Pattern + +All service components follow this architecture: + +- Extend `Generic.vue` using Vue slots (`