From ac41b6e18167b0fc8b093e6fa3a618bb5ab76a3a Mon Sep 17 00:00:00 2001 From: Miguel Valenzuela Date: Thu, 19 Oct 2023 15:14:56 -0700 Subject: [PATCH 01/41] Update Output Args Presets AAC (#8161) * Update Output Args Presets AAC Upon researching the nuances of preset-record-generic-audio-copy & preset-record-generic-audio-aac https://github.com/blakeblackshear/frigate/blob/4c7ea01137d5046879355e35fe9e260d1624d031/frigate/ffmpeg_presets.py#L341 https://ffmpeg.org/ffmpeg.html#Main-options https://stackoverflow.com/questions/70148683/will-ffmpeg-try-to-transcode-to-same-encoding I'd suggest to disambiguate what these two do * fix: lowercase --- docs/docs/configuration/ffmpeg_presets.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/configuration/ffmpeg_presets.md b/docs/docs/configuration/ffmpeg_presets.md index 66747350e..f346c92a0 100644 --- a/docs/docs/configuration/ffmpeg_presets.md +++ b/docs/docs/configuration/ffmpeg_presets.md @@ -72,8 +72,8 @@ Output args presets help make the config more readable and handle use cases for | Preset | Usage | Other Notes | | -------------------------------- | --------------------------------- | --------------------------------------------- | | preset-record-generic | Record WITHOUT audio | This is the default when nothing is specified | -| preset-record-generic-audio-aac | Record WITH aac audio | Use this to enable audio in recordings | | preset-record-generic-audio-copy | Record WITH original audio | Use this to enable audio in recordings | +| preset-record-generic-audio-aac | Record WITH transcoded aac audio | Use this to transcode to aac audio. If your source is already aac, use preset-record-generic-audio-copy instead to avoid re-encoding | | preset-record-mjpeg | Record an mjpeg stream | Recommend restreaming mjpeg stream instead | | preset-record-jpeg | Record live jpeg | Recommend restreaming live jpeg instead | | preset-record-ubiquiti | Record ubiquiti stream with audio | Recordings with ubiquiti non-standard audio | From 37b82c0d605d2530a15809ab078356fc35764600 Mon Sep 17 00:00:00 2001 From: wbradmoore Date: Thu, 2 Nov 2023 07:20:19 -0400 Subject: [PATCH 02/41] Update getting_started.md (#8420) fix configuring_go2rtc link --- docs/docs/guides/getting_started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/guides/getting_started.md b/docs/docs/guides/getting_started.md index adbddb9c2..04110cd1d 100644 --- a/docs/docs/guides/getting_started.md +++ b/docs/docs/guides/getting_started.md @@ -170,5 +170,5 @@ By default, Frigate will retain snapshots of all events for 10 days. The full se Now that you have a working install, you can use the following guides for additional features: -1. [Configuring go2rtc](configuring_go2rtc) - Additional live view options and RTSP relay +1. [Configuring go2rtc](configuring_go2rtc.md) - Additional live view options and RTSP relay 2. [Home Assistant Integration](../integrations/home-assistant.md) - Integrate with Home Assistant From fef6a7ca74968bf5d6ec5ae6c533c6c9c39bacf5 Mon Sep 17 00:00:00 2001 From: Jennifer <44507767+jenniferlee1818@users.noreply.github.com> Date: Mon, 27 Nov 2023 17:12:57 -0700 Subject: [PATCH 03/41] Update reverse_proxy.md (#8763) Thhe --- docs/docs/guides/reverse_proxy.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/guides/reverse_proxy.md b/docs/docs/guides/reverse_proxy.md index 165b4d517..479df53e8 100644 --- a/docs/docs/guides/reverse_proxy.md +++ b/docs/docs/guides/reverse_proxy.md @@ -125,7 +125,7 @@ This section points to your SSL files, the example below shows locations to a de ### Setup reverse proxy settings -Thhe settings below enabled connection upgrade, sets up logging (optional) and proxies everything from the `/` context to the docker host and port specified earlier in the configuration +The settings below enabled connection upgrade, sets up logging (optional) and proxies everything from the `/` context to the docker host and port specified earlier in the configuration ``` proxy_set_header Upgrade $http_upgrade; From 27cf1cdf150fbbf409286c631f873d8634f9ef6d Mon Sep 17 00:00:00 2001 From: Marc Altmann <40744649+MarcA711@users.noreply.github.com> Date: Tue, 28 Nov 2023 01:13:12 +0100 Subject: [PATCH 04/41] Fix path of device tree on HassOS add on (#8764) * fix device tree path for HassOS * fix symlink call * fix formatting --- frigate/detectors/plugins/rknn.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/frigate/detectors/plugins/rknn.py b/frigate/detectors/plugins/rknn.py index 38beec3b2..01c58b94d 100644 --- a/frigate/detectors/plugins/rknn.py +++ b/frigate/detectors/plugins/rknn.py @@ -42,6 +42,11 @@ class Rknn(DetectionApi): type_key = DETECTOR_KEY def __init__(self, config: RknnDetectorConfig): + # create symlink for Home Assistant add on + if not os.path.isfile("/proc/device-tree/compatible"): + if os.path.isfile("/device-tree/compatible"): + os.symlink("/device-tree/compatible", "/proc/device-tree/compatible") + # find out SoC try: with open("/proc/device-tree/compatible") as file: From 15644a2b0c027694f20a2ac4ac57b0d362271fd5 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Mon, 27 Nov 2023 17:13:41 -0700 Subject: [PATCH 05/41] Fix dark color scheme for exports (#8770) --- web/src/routes/Export.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/src/routes/Export.jsx b/web/src/routes/Export.jsx index 6a29f9ff9..84a6cff57 100644 --- a/web/src/routes/Export.jsx +++ b/web/src/routes/Export.jsx @@ -213,7 +213,7 @@ export default function Export() { {exports && ( -
+
Exports {exports.map((item) => ( -
+
{item.name.startsWith('in_progress') ? (
From a490c375f41077fd63df79d754a7815c2016233e Mon Sep 17 00:00:00 2001 From: Blake Blackshear Date: Tue, 28 Nov 2023 00:25:47 +0000 Subject: [PATCH 06/41] Limit exposed go2rtc api to bare minimum (#8762) * only permit GET requests to go2rtc * bare minimum go2rtc passthrough * support frigate card * expose go2rtc streams data only --- .../rootfs/usr/local/nginx/conf/nginx.conf | 33 +++++++++++++++---- frigate/http.py | 17 ++++++++++ web/src/routes/System.jsx | 26 +++++++-------- 3 files changed, 56 insertions(+), 20 deletions(-) diff --git a/docker/main/rootfs/usr/local/nginx/conf/nginx.conf b/docker/main/rootfs/usr/local/nginx/conf/nginx.conf index 1d3b80de3..b25c9897d 100644 --- a/docker/main/rootfs/usr/local/nginx/conf/nginx.conf +++ b/docker/main/rootfs/usr/local/nginx/conf/nginx.conf @@ -164,19 +164,38 @@ http { include proxy.conf; } - location /live/mse/ { - proxy_pass http://go2rtc/; + # frigate lovelace card uses this path + location /live/mse/api/ws { + limit_except GET { + deny all; + } + proxy_pass http://go2rtc/api/ws; include proxy.conf; } - location /live/webrtc/ { - proxy_pass http://go2rtc/; + location /live/webrtc/api/ws { + limit_except GET { + deny all; + } + proxy_pass http://go2rtc/api/ws; include proxy.conf; } - location ~* /api/go2rtc([/]?.*)$ { - proxy_pass http://go2rtc; - rewrite ^/api/go2rtc(.*)$ /api$1 break; + # pass through go2rtc player + location /live/webrtc/webrtc.html { + limit_except GET { + deny all; + } + proxy_pass http://go2rtc/webrtc.html; + include proxy.conf; + } + + # frontend uses this to fetch the version + location /api/go2rtc/api { + limit_except GET { + deny all; + } + proxy_pass http://go2rtc/api; include proxy.conf; } diff --git a/frigate/http.py b/frigate/http.py index 498f0d380..190ae4703 100644 --- a/frigate/http.py +++ b/frigate/http.py @@ -16,6 +16,7 @@ from urllib.parse import unquote import cv2 import numpy as np import pytz +import requests from flask import ( Blueprint, Flask, @@ -1345,6 +1346,22 @@ def config_schema(): ) +@bp.route("/go2rtc/streams") +def go2rtc_streams(): + r = requests.get("http://127.0.0.1:1984/api/streams") + if not r.ok: + logger.error("Failed to fetch streams from go2rtc") + return make_response( + jsonify({"success": False, "message": "Error fetching stream data"}), + 500, + ) + stream_data = r.json() + for data in stream_data.values(): + for producer in data["producers"]: + producer["url"] = clean_camera_user_pass(producer["url"]) + return jsonify(stream_data) + + @bp.route("/version") def version(): return VERSION diff --git a/web/src/routes/System.jsx b/web/src/routes/System.jsx index eb094faa2..77b37686f 100644 --- a/web/src/routes/System.jsx +++ b/web/src/routes/System.jsx @@ -41,7 +41,7 @@ export default function System() { const cameraNames = Object.keys(cameras || emptyObject); const processesNames = Object.keys(processes || emptyObject); - const { data: go2rtc } = useSWR('go2rtc'); + const { data: go2rtc } = useSWR('go2rtc/api'); const onHandleFfprobe = async (camera, e) => { if (e) { @@ -103,9 +103,9 @@ export default function System() { className="text-blue-500 hover:underline" target="_blank" rel="noopener noreferrer" - href="/live/webrtc/" + href="/api/go2rtc/streams" > - dashboard + streams info )} @@ -302,16 +302,16 @@ export default function System() { GPU % Memory % - {'dec' in gpu_usages[gpu] && (Decoder %)} - {'enc' in gpu_usages[gpu] && (Encoder %)} + {'dec' in gpu_usages[gpu] && Decoder %} + {'enc' in gpu_usages[gpu] && Encoder %} {gpu_usages[gpu]['gpu']} {gpu_usages[gpu]['mem']} - {'dec' in gpu_usages[gpu] && ({gpu_usages[gpu]['dec']})} - {'enc' in gpu_usages[gpu] && ({gpu_usages[gpu]['enc']})} + {'dec' in gpu_usages[gpu] && {gpu_usages[gpu]['dec']}} + {'enc' in gpu_usages[gpu] && {gpu_usages[gpu]['enc']}} @@ -350,14 +350,14 @@ export default function System() { {camera.replaceAll('_', ' ')}
{config.cameras[camera]['webui_url'] && ( - )} - +
From 9b003e175d74997de41e80c29b6d076e61982baa Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Wed, 29 Nov 2023 16:37:28 -0700 Subject: [PATCH 07/41] Don't incorrectly overwrite score history (#8795) --- frigate/object_processing.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/frigate/object_processing.py b/frigate/object_processing.py index afd2cb1a4..b0e5b9a52 100644 --- a/frigate/object_processing.py +++ b/frigate/object_processing.py @@ -128,9 +128,6 @@ class TrackedObject: self.frame = None self.previous = self.to_dict() - # start the score history - self.score_history = [self.obj_data["score"]] - def _is_false_positive(self): # once a true positive, always a true positive if not self.false_positive: From f00ced5a3332f1342d89b924a1e7ebb444528d0b Mon Sep 17 00:00:00 2001 From: Blake Blackshear Date: Wed, 29 Nov 2023 23:37:53 +0000 Subject: [PATCH 08/41] Show bbox on in_progress events (#8785) * fix default value in docs * use default snapshot config for in progress --- docs/docs/configuration/index.md | 2 +- web/src/routes/Events.jsx | 32 +++++++++++++++++++------------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/docs/docs/configuration/index.md b/docs/docs/configuration/index.md index c022d57c2..86f5174ae 100644 --- a/docs/docs/configuration/index.md +++ b/docs/docs/configuration/index.md @@ -408,7 +408,7 @@ snapshots: # Optional: print a timestamp on the snapshots (default: shown below) timestamp: False # Optional: draw bounding box on the snapshots (default: shown below) - bounding_box: False + bounding_box: True # Optional: crop the snapshot (default: shown below) crop: False # Optional: height to resize the snapshot to (default: original size) diff --git a/web/src/routes/Events.jsx b/web/src/routes/Events.jsx index dfa6b67bc..2b2b546ef 100644 --- a/web/src/routes/Events.jsx +++ b/web/src/routes/Events.jsx @@ -123,12 +123,21 @@ export default function Events({ path, ...props }) { [searchParams] ); - const { data: ongoingEvents, mutate: refreshOngoingEvents } = useSWR(['events', { in_progress: 1, include_thumbnails: 0 }]); - const { data: eventPages, mutate: refreshEvents, size, setSize, isValidating } = useSWRInfinite(getKey, eventsFetcher); + const { data: ongoingEvents, mutate: refreshOngoingEvents } = useSWR([ + 'events', + { in_progress: 1, include_thumbnails: 0 }, + ]); + const { + data: eventPages, + mutate: refreshEvents, + size, + setSize, + isValidating, + } = useSWRInfinite(getKey, eventsFetcher); const mutate = () => { refreshEvents(); refreshOngoingEvents(); - } + }; const { data: allLabels } = useSWR(['labels']); const { data: allSubLabels } = useSWR(['sub_labels', { split_joined: 1 }]); @@ -283,15 +292,12 @@ export default function Events({ path, ...props }) { [path, searchParams, setSearchParams] ); - const onClickFilterSubmitted = useCallback( - () => { - if( ++searchParams.is_submitted > 1 ) { - searchParams.is_submitted = -1; - } - onFilter('is_submitted', searchParams.is_submitted); - }, - [searchParams, onFilter] - ); + const onClickFilterSubmitted = useCallback(() => { + if (++searchParams.is_submitted > 1) { + searchParams.is_submitted = -1; + } + onFilter('is_submitted', searchParams.is_submitted); + }, [searchParams, onFilter]); const isDone = (eventPages?.[eventPages.length - 1]?.length ?? 0) < API_LIMIT; @@ -918,7 +924,7 @@ function Event({ className="flex-grow-0" src={ event.has_snapshot - ? `${apiHost}api/events/${event.id}/snapshot.jpg` + ? `${apiHost}api/events/${event.id}/snapshot.jpg?bbox=1` : `${apiHost}api/events/${event.id}/thumbnail.jpg` } alt={`${event.label} at ${((event?.data?.top_score || event.top_score) * 100).toFixed( From 89051c1b903a2621951b421e3ebdec6536234c31 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Fri, 1 Dec 2023 06:41:30 -0700 Subject: [PATCH 09/41] Create Edgetpu troubleshooting docs (#8827) * Link to edgetpu troublehsooting * Add troubleshooting docs for edgetpu * Add to sidebar * Add section about dual edge tpu --- docs/docs/configuration/object_detectors.md | 6 +++ docs/docs/troubleshooting/edgetpu.md | 48 +++++++++++++++++++++ docs/sidebars.js | 6 ++- 3 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 docs/docs/troubleshooting/edgetpu.md diff --git a/docs/docs/configuration/object_detectors.md b/docs/docs/configuration/object_detectors.md index 8de8db192..e0aca2b87 100644 --- a/docs/docs/configuration/object_detectors.md +++ b/docs/docs/configuration/object_detectors.md @@ -37,6 +37,12 @@ The EdgeTPU device can be specified using the `"device"` attribute according to A TensorFlow Lite model is provided in the container at `/edgetpu_model.tflite` and is used by this detector type by default. To provide your own model, bind mount the file into the container and provide the path with `model.path`. +:::tip + +See [common Edge-TPU troubleshooting steps](/troubleshooting/edgetpu) if the EdgeTPu is not detected. + +::: + ### Single USB Coral ```yaml diff --git a/docs/docs/troubleshooting/edgetpu.md b/docs/docs/troubleshooting/edgetpu.md new file mode 100644 index 000000000..b6cb8d878 --- /dev/null +++ b/docs/docs/troubleshooting/edgetpu.md @@ -0,0 +1,48 @@ +--- +id: edgetpu +title: Troubleshooting EdgeTPU +--- + +## USB Coral Not Detected + +There are many possible causes for a USB coral not being detected and some are OS specific. It is important to understand how the USB coral works: + +1. When the device is first plugged in and has not initialized it will appear as `1a6e:089a Global Unichip Corp.` when running `lsusb` or checking the hardware page in HA OS. +2. Once initialized, the device will appear as `18d1:9302 Google Inc.` when running `lsusb` or checking the hardware page in HA OS. + +If the coral does not initialize then Frigate can not interface with it. Some common reasons for the USB based Coral not initializing are: + +### Not Enough Power + +The USB coral can draw up to 900mA and this can be too much for some on-device USB ports, especially for small board computers like the RPi. If the coral is not initializing then some recommended steps are: + +1. Try a different port, some ports are capable of providing more power than others. +2. Make sure the port is USB3, this is important for power and to ensure the coral runs at max speed. +3. Try a different cable, some users have found the included cable to not work well. +4. Use an externally powered USB hub. + +### Incorrect Device Access + +The USB coral has different IDs when it is uninitialized and initialized. + +- When running Frigate in a VM, Proxmox lxc, etc. you must ensure both device IDs are mapped. +- When running HA OS you may need to run the Full Access version of the Frigate addon with the `Protected Mode` switch disabled so that the coral can be accessed. + +## USB Coral Detection Appears to be Stuck + +The USB Coral can become stuck and need to be restarted, this can happen for a number of reasons depending on hardware and software setup. Some common reasons are: + +1. Some users have found the cable included with the coral to cause this problem and that switching to a different cable fixed it entirely. +2. Running Frigate in a VM may cause communication with the device to be lost and need to be reset. + +## PCIe Coral Not Detected + +The most common reason for the PCIe coral not being detected is that the driver has not been installed. See [the coral docs(https://coral.ai/docs/m2/get-started/#2-install-the-pcie-driver-and-edge-tpu-runtime) for how to install the driver for the PCIe based coral. + +## Only One PCIe Coral Is Detected With Coral Dual EdgeTPU + +Coral Dual EdgeTPU is one card with two identical TPU cores. Each core has it's own PCIe interface and motherboard needs to have two PCIe busses on the m.2 slot to make them both work. + +E-key slot implemented to full m.2 electomechanical specification has two PCIe busses. Most motherboard manufacturers implement only one PCIe bus in m.2 E-key connector (this is why only one TPU is working). Some SBCs can have only USB bus on m.2 connector, ie none of TPUs will work. + +In this case it is recommended to use a Dual EdgeTPU Adapter [like the one from MagicBlueSmoke](https://github.com/magic-blue-smoke/Dual-Edge-TPU-Adapter) diff --git a/docs/sidebars.js b/docs/sidebars.js index b6a2e95f4..5a71ebfab 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -60,7 +60,11 @@ module.exports = { "integrations/third_party_extensions", ], "Frigate+": ["plus/index"], - Troubleshooting: ["troubleshooting/faqs", "troubleshooting/recordings"], + Troubleshooting: [ + "troubleshooting/faqs", + "troubleshooting/recordings", + "troubleshooting/edgetpu", + ], Development: [ "development/contributing", "development/contributing-boards", From 595fa3d111126ced3207c5b00ad182144b8968f8 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Fri, 1 Dec 2023 06:47:09 -0700 Subject: [PATCH 10/41] Re-add support for go2rtc webrtc api (#8828) --- docker/main/rootfs/usr/local/nginx/conf/nginx.conf | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docker/main/rootfs/usr/local/nginx/conf/nginx.conf b/docker/main/rootfs/usr/local/nginx/conf/nginx.conf index b25c9897d..46706a92f 100644 --- a/docker/main/rootfs/usr/local/nginx/conf/nginx.conf +++ b/docker/main/rootfs/usr/local/nginx/conf/nginx.conf @@ -199,6 +199,15 @@ http { include proxy.conf; } + # integration uses this to add webrtc candidate + location /api/go2rtc/webrtc { + limit_except POST { + deny all; + } + proxy_pass http://go2rtc/api/webrtc; + include proxy.conf; + } + location ~* /api/.*\.(jpg|jpeg|png)$ { rewrite ^/api/(.*)$ $1 break; proxy_pass http://frigate_api; From f27025aef3f32b0bbcd7e61dffceec31786a30ab Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Sat, 2 Dec 2023 20:14:30 -0700 Subject: [PATCH 11/41] don't fail on go2rtc stream with no url (#8839) --- frigate/http.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frigate/http.py b/frigate/http.py index 190ae4703..056ae4a4b 100644 --- a/frigate/http.py +++ b/frigate/http.py @@ -1358,7 +1358,7 @@ def go2rtc_streams(): stream_data = r.json() for data in stream_data.values(): for producer in data["producers"]: - producer["url"] = clean_camera_user_pass(producer["url"]) + producer["url"] = clean_camera_user_pass(producer.get("url", "")) return jsonify(stream_data) From cc5297f1802e0279310118ed42af1a718cc91821 Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Sat, 2 Dec 2023 21:14:52 -0600 Subject: [PATCH 12/41] handle onvif connection failure in autotrack init (#8838) * handle onvif connection failure in autotrack init * remove whitespace and add consistency * error message consistency * more consistency --- frigate/ptz/autotrack.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/frigate/ptz/autotrack.py b/frigate/ptz/autotrack.py index b5aee57dc..ee5ad9f31 100644 --- a/frigate/ptz/autotrack.py +++ b/frigate/ptz/autotrack.py @@ -238,32 +238,40 @@ class PtzAutoTracker: self.move_queues[camera] = queue.Queue() self.move_queue_locks[camera] = threading.Lock() + # handle onvif constructor failing due to no connection + if camera not in self.onvif.cams: + logger.warning( + f"Disabling autotracking for {camera}: onvif connection failed" + ) + camera_config.onvif.autotracking.enabled = False + self.ptz_metrics[camera]["ptz_autotracker_enabled"].value = False + return + if not self.onvif.cams[camera]["init"]: if not self.onvif._init_onvif(camera): - logger.warning(f"Unable to initialize onvif for {camera}") + logger.warning( + f"Disabling autotracking for {camera}: Unable to initialize onvif" + ) camera_config.onvif.autotracking.enabled = False self.ptz_metrics[camera]["ptz_autotracker_enabled"].value = False - return if "pt-r-fov" not in self.onvif.cams[camera]["features"]: - camera_config.onvif.autotracking.enabled = False - self.ptz_metrics[camera]["ptz_autotracker_enabled"].value = False logger.warning( f"Disabling autotracking for {camera}: FOV relative movement not supported" ) - + camera_config.onvif.autotracking.enabled = False + self.ptz_metrics[camera]["ptz_autotracker_enabled"].value = False return movestatus_supported = self.onvif.get_service_capabilities(camera) if movestatus_supported is None or movestatus_supported.lower() != "true": - camera_config.onvif.autotracking.enabled = False - self.ptz_metrics[camera]["ptz_autotracker_enabled"].value = False logger.warning( f"Disabling autotracking for {camera}: ONVIF MoveStatus not supported" ) - + camera_config.onvif.autotracking.enabled = False + self.ptz_metrics[camera]["ptz_autotracker_enabled"].value = False return if self.onvif.cams[camera]["init"]: From da5cf1867b1c9c150e0334142f766b217c333095 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Sat, 2 Dec 2023 20:15:43 -0700 Subject: [PATCH 13/41] Clarify radeon env variable (#8809) * Clarify radeon env variable * Make note consistent for intel as well --- docs/docs/configuration/hardware_acceleration.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/docs/docs/configuration/hardware_acceleration.md b/docs/docs/configuration/hardware_acceleration.md index 7f5e69108..ad9d27211 100644 --- a/docs/docs/configuration/hardware_acceleration.md +++ b/docs/docs/configuration/hardware_acceleration.md @@ -49,7 +49,11 @@ ffmpeg: hwaccel_args: preset-vaapi ``` -**NOTICE**: With some of the processors, like the J4125, the default driver `iHD` doesn't seem to work correctly for hardware acceleration. You may need to change the driver to `i965` by adding the following environment variable `LIBVA_DRIVER_NAME=i965` to your docker-compose file or [in the `frigate.yaml` for HA OS users](advanced.md#environment_vars). +:::note + +With some of the processors, like the J4125, the default driver `iHD` doesn't seem to work correctly for hardware acceleration. You may need to change the driver to `i965` by adding the following environment variable `LIBVA_DRIVER_NAME=i965` to your docker-compose file or [in the `frigate.yaml` for HA OS users](advanced.md#environment_vars). + +::: ### Via Quicksync (>=10th Generation only) @@ -137,7 +141,11 @@ Depending on your OS and kernel configuration, you may need to change the `/proc VAAPI supports automatic profile selection so it will work automatically with both H.264 and H.265 streams. -**Note:** You also need to set `LIBVA_DRIVER_NAME=radeonsi` as an environment variable on the container. +:::note + +You need to change the driver to `radeonsi` by adding the following environment variable `LIBVA_DRIVER_NAME=radeonsi` to your docker-compose file or [in the `frigate.yaml` for HA OS users](advanced.md#environment_vars). + +::: ```yaml ffmpeg: From eed08f534f8887927912211df67255bfeea3d7bd Mon Sep 17 00:00:00 2001 From: Eric M Date: Sat, 2 Dec 2023 19:22:50 -0800 Subject: [PATCH 14/41] Update output.py with NTSC DVT, Amcrest DV1 aspect ratio 704x480 (#8835) * Update output.py with NTSC DVT, Amcrest DV1 aspect ratio 704x480 * linter fix --- frigate/output.py | 1 + 1 file changed, 1 insertion(+) diff --git a/frigate/output.py b/frigate/output.py index 5d8013d2e..a70e5a804 100644 --- a/frigate/output.py +++ b/frigate/output.py @@ -45,6 +45,7 @@ def get_standard_aspect_ratio(width: int, height: int) -> tuple[int, int]: (32, 9), # panoramic cameras (12, 9), (9, 12), + (22, 15), # Amcrest, NTSC DVT ] # aspects are scaled to have common relative size known_aspects_ratios = list( map(lambda aspect: aspect[0] / aspect[1], known_aspects) From ebcf25741b54cbd841a11d96a5a133f3d02b4fdd Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Mon, 4 Dec 2023 13:43:23 -0700 Subject: [PATCH 15/41] Fix timeline overlay for in progress events (#8852) --- web/src/components/TimelineSummary.jsx | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/web/src/components/TimelineSummary.jsx b/web/src/components/TimelineSummary.jsx index b3f32c3af..89b8914c3 100644 --- a/web/src/components/TimelineSummary.jsx +++ b/web/src/components/TimelineSummary.jsx @@ -34,10 +34,18 @@ export default function TimelineSummary({ event, onFrameSelected }) { const [timeIndex, setTimeIndex] = useState(-1); - const recordingParams = { - before: event.end_time || Date.now(), - after: event.start_time, - }; + const recordingParams = useMemo(() => { + if (!event.end_time) { + return { + after: event.start_time, + }; + } + + return { + before: event.end_time, + after: event.start_time, + }; + }, [event]); const { data: recordings } = useSWR([`${event.camera}/recordings`, recordingParams], { revalidateOnFocus: false }); // calculates the seek seconds by adding up all the seconds in the segments prior to the playback time From 0de800a8e50e796a27102c04e86332cb6b7d4d86 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Mon, 4 Dec 2023 17:46:26 -0700 Subject: [PATCH 16/41] don't fail on empty producers (#8854) --- frigate/http.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frigate/http.py b/frigate/http.py index 056ae4a4b..d9bd5c29f 100644 --- a/frigate/http.py +++ b/frigate/http.py @@ -1357,7 +1357,7 @@ def go2rtc_streams(): ) stream_data = r.json() for data in stream_data.values(): - for producer in data["producers"]: + for producer in data.get("producers", []): producer["url"] = clean_camera_user_pass(producer.get("url", "")) return jsonify(stream_data) From f8153bdacc07fe1ffe3f70c2d410598d46842021 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Mon, 4 Dec 2023 17:46:54 -0700 Subject: [PATCH 17/41] Add docs specifically for reolink doorbell (#8851) * Add docs specifically for reolink doorbell * Update docs/docs/configuration/camera_specific.md --- docs/docs/configuration/camera_specific.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docs/docs/configuration/camera_specific.md b/docs/docs/configuration/camera_specific.md index 89dd440a2..b9b2fefb9 100644 --- a/docs/docs/configuration/camera_specific.md +++ b/docs/docs/configuration/camera_specific.md @@ -127,6 +127,20 @@ cameras: - detect ``` +#### Reolink Doorbell + +The reolink doorbell supports 2-way audio via go2rtc and other applications. It is important that the http-flv stream is still used for stability, a secondary rtsp stream can be added that will be using for the two way audio only. + +```yaml +go2rtc: + streams: + your_reolink_doorbell: + - "ffmpeg:http://reolink_ip/flv?port=1935&app=bcs&stream=channel0_main.bcs&user=username&password=password#video=copy#audio=copy#audio=opus" + - rtsp://reolink_ip/Preview_01_sub + your_reolink_doorbell_sub: + - "ffmpeg:http://reolink_ip/flv?port=1935&app=bcs&stream=channel0_ext.bcs&user=username&password=password" +``` + ### Unifi Protect Cameras Unifi protect cameras require the rtspx stream to be used with go2rtc. From a47068922f0dafce3b4c554032d27c446f648ae3 Mon Sep 17 00:00:00 2001 From: Blake Blackshear Date: Thu, 7 Dec 2023 12:09:20 +0000 Subject: [PATCH 18/41] Update deps (#8872) * update web deps * update docs deps * update gh actions --- .github/workflows/pull_request.yml | 2 +- docs/package-lock.json | 919 ++++++++++------------------- docs/package.json | 8 +- web/package-lock.json | 388 +++++++----- web/package.json | 2 +- 5 files changed, 563 insertions(+), 756 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 4b2d5fb4c..b86d9b658 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -65,7 +65,7 @@ jobs: - name: Check out the repository uses: actions/checkout@v4 - name: Set up Python ${{ env.DEFAULT_PYTHON }} - uses: actions/setup-python@v4.7.1 + uses: actions/setup-python@v5.0.0 with: python-version: ${{ env.DEFAULT_PYTHON }} - name: Install requirements diff --git a/docs/package-lock.json b/docs/package-lock.json index 6187b1afa..c21577b06 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -8,11 +8,11 @@ "name": "docs", "version": "0.0.0", "dependencies": { - "@docusaurus/core": "3.0.0", - "@docusaurus/preset-classic": "3.0.0", - "@docusaurus/theme-mermaid": "3.0.0", + "@docusaurus/core": "^3.0.0", + "@docusaurus/preset-classic": "^3.0.0", + "@docusaurus/theme-mermaid": "^3.0.0", "@mdx-js/react": "^3.0.0", - "clsx": "^1.2.1", + "clsx": "^2.0.0", "prism-react-renderer": "^2.1.0", "raw-loader": "^4.0.2", "react": "^18.2.0", @@ -277,9 +277,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz", - "integrity": "sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", "engines": { "node": ">=6.9.0" } @@ -381,16 +381,16 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", - "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.5.tgz", + "integrity": "sha512-QELlRWxSpgdwdJzSJn4WAhKC+hvw/AtHbbrIoncKHkhKKR/luAlKkgBDcri1EzWAo8f8VvYVryEHN4tax/V67A==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-replace-supers": "^7.22.20", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "semver": "^6.3.1" @@ -605,9 +605,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", "engines": { "node": ">=6.9.0" } @@ -621,9 +621,9 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", - "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", "engines": { "node": ">=6.9.0" } @@ -1058,9 +1058,9 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.3.tgz", - "integrity": "sha512-59GsVNavGxAXCDDbakWSMJhajASb4kBCqDjqJsv+p5nKdbz7istmZ3HrX3L2LuiI80+zsOADCvooqQH3qGCucQ==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz", + "integrity": "sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==", "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-plugin-utils": "^7.22.5", @@ -1105,9 +1105,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.3.tgz", - "integrity": "sha512-QPZxHrThbQia7UdvfpaRRlq/J9ciz1J4go0k+lPBXbgaNeY7IQrBj/9ceWjvMMI07/ZBzHl/F0R/2K0qH7jCVw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", + "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1134,9 +1134,9 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.3.tgz", - "integrity": "sha512-PENDVxdr7ZxKPyi5Ffc0LjXdnJyrJxyqF5T5YjlVg4a0VFfQHW0r8iAtRiDXkfHlu1wwcvdtnndGYIeJLSuRMQ==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", + "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", @@ -1150,9 +1150,9 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.3.tgz", - "integrity": "sha512-FGEQmugvAEu2QtgtU0uTASXevfLMFfBeVCIIdcQhn/uBQsMTjBajdnAtanQlOcuihWh10PZ7+HWvc7NtBwP74w==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz", + "integrity": "sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-compilation-targets": "^7.22.15", @@ -1230,9 +1230,9 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.3.tgz", - "integrity": "sha512-vTG+cTGxPFou12Rj7ll+eD5yWeNl5/8xvQvF08y5Gv3v4mZQoyFf8/n9zg4q5vvCWt5jmgymfzMAldO7orBn7A==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", + "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3" @@ -1260,9 +1260,9 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.3.tgz", - "integrity": "sha512-yCLhW34wpJWRdTxxWtFZASJisihrfyMOTOQexhVzA78jlU+dH7Dw+zQgcPepQ5F3C6bAIiblZZ+qBggJdHiBAg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", + "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" @@ -1305,9 +1305,9 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.3.tgz", - "integrity": "sha512-H9Ej2OiISIZowZHaBwF0tsJOih1PftXJtE8EWqlEIwpc7LMTGq0rPOrywKLQ4nefzx8/HMR0D3JGXoMHYvhi0A==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", + "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-json-strings": "^7.8.3" @@ -1334,9 +1334,9 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.3.tgz", - "integrity": "sha512-+pD5ZbxofyOygEp+zZAfujY2ShNCXRpDRIPOiBmTO693hhyOEteZgl876Xs9SAHPQpcV0vz8LvA/T+w8AzyX8A==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", + "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" @@ -1455,9 +1455,9 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.3.tgz", - "integrity": "sha512-xzg24Lnld4DYIdysyf07zJ1P+iIfJpxtVFOzX4g+bsJ3Ng5Le7rXx9KwqKzuyaUeRnt+I1EICwQITqc0E2PmpA==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", + "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" @@ -1470,9 +1470,9 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.3.tgz", - "integrity": "sha512-s9GO7fIBi/BLsZ0v3Rftr6Oe4t0ctJ8h4CCXfPoEJwmvAPMyNrfkOOJzm6b9PX9YXcCJWWQd/sBF/N26eBiMVw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", + "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-numeric-separator": "^7.10.4" @@ -1485,9 +1485,9 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.3.tgz", - "integrity": "sha512-VxHt0ANkDmu8TANdE9Kc0rndo/ccsmfe2Cx2y5sI4hu3AukHQ5wAu4cM7j3ba8B9548ijVyclBU+nuDQftZsog==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", + "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", "dependencies": { "@babel/compat-data": "^7.23.3", "@babel/helper-compilation-targets": "^7.22.15", @@ -1518,9 +1518,9 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.3.tgz", - "integrity": "sha512-LxYSb0iLjUamfm7f1D7GpiS4j0UAC8AOiehnsGAP8BEsIX8EOi3qV6bbctw8M7ZvLtcoZfZX5Z7rN9PlWk0m5A==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", + "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" @@ -1533,9 +1533,9 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.3.tgz", - "integrity": "sha512-zvL8vIfIUgMccIAK1lxjvNv572JHFJIKb4MWBz5OGdBQA0fB0Xluix5rmOby48exiJc987neOmP/m9Fnpkz3Tg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", + "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", @@ -1578,9 +1578,9 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.3.tgz", - "integrity": "sha512-a5m2oLNFyje2e/rGKjVfAELTVI5mbA0FeZpBnkOWWV7eSmKQ+T/XW0Vf+29ScLzSxX+rnsarvU0oie/4m6hkxA==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", + "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-create-class-features-plugin": "^7.22.15", @@ -1637,15 +1637,15 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz", - "integrity": "sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz", + "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-module-imports": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/types": "^7.22.15" + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/types": "^7.23.4" }, "engines": { "node": ">=6.9.0" @@ -1811,12 +1811,12 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.3.tgz", - "integrity": "sha512-ogV0yWnq38CFwH20l2Afz0dfKuZBx9o/Y2Rmh5vuSS0YD1hswgEgTfyTzuSrT2q9btmHRSqYoSfwFUVaC1M1Jw==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.5.tgz", + "integrity": "sha512-2fMkXEJkrmwgu2Bsv1Saxgj30IXZdJ+84lQcKKI7sm719oXs0BBw2ZENKdJdR1PjWndgLCEBNXJOri0fk7RYQA==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-create-class-features-plugin": "^7.23.5", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-typescript": "^7.23.3" }, @@ -1887,14 +1887,14 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.3.tgz", - "integrity": "sha512-ovzGc2uuyNfNAs/jyjIGxS8arOHS5FENZaNn4rtE7UdKMMkqHCvboHfcuhWLZNX5cB44QfcGNWjaevxMzzMf+Q==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.5.tgz", + "integrity": "sha512-0d/uxVD6tFGWXGDSfyMD1p2otoaKmu6+GD+NfAx0tMaH+dxORnp7T9TaVQ6mKyya7iBtCIVxHjWT7MuzzM9z+A==", "dependencies": { - "@babel/compat-data": "^7.23.3", + "@babel/compat-data": "^7.23.5", "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", + "@babel/helper-validator-option": "^7.23.5", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.3", @@ -1918,25 +1918,25 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.23.3", - "@babel/plugin-transform-async-generator-functions": "^7.23.3", + "@babel/plugin-transform-async-generator-functions": "^7.23.4", "@babel/plugin-transform-async-to-generator": "^7.23.3", "@babel/plugin-transform-block-scoped-functions": "^7.23.3", - "@babel/plugin-transform-block-scoping": "^7.23.3", + "@babel/plugin-transform-block-scoping": "^7.23.4", "@babel/plugin-transform-class-properties": "^7.23.3", - "@babel/plugin-transform-class-static-block": "^7.23.3", - "@babel/plugin-transform-classes": "^7.23.3", + "@babel/plugin-transform-class-static-block": "^7.23.4", + "@babel/plugin-transform-classes": "^7.23.5", "@babel/plugin-transform-computed-properties": "^7.23.3", "@babel/plugin-transform-destructuring": "^7.23.3", "@babel/plugin-transform-dotall-regex": "^7.23.3", "@babel/plugin-transform-duplicate-keys": "^7.23.3", - "@babel/plugin-transform-dynamic-import": "^7.23.3", + "@babel/plugin-transform-dynamic-import": "^7.23.4", "@babel/plugin-transform-exponentiation-operator": "^7.23.3", - "@babel/plugin-transform-export-namespace-from": "^7.23.3", + "@babel/plugin-transform-export-namespace-from": "^7.23.4", "@babel/plugin-transform-for-of": "^7.23.3", "@babel/plugin-transform-function-name": "^7.23.3", - "@babel/plugin-transform-json-strings": "^7.23.3", + "@babel/plugin-transform-json-strings": "^7.23.4", "@babel/plugin-transform-literals": "^7.23.3", - "@babel/plugin-transform-logical-assignment-operators": "^7.23.3", + "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", "@babel/plugin-transform-member-expression-literals": "^7.23.3", "@babel/plugin-transform-modules-amd": "^7.23.3", "@babel/plugin-transform-modules-commonjs": "^7.23.3", @@ -1944,15 +1944,15 @@ "@babel/plugin-transform-modules-umd": "^7.23.3", "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", "@babel/plugin-transform-new-target": "^7.23.3", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.3", - "@babel/plugin-transform-numeric-separator": "^7.23.3", - "@babel/plugin-transform-object-rest-spread": "^7.23.3", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", + "@babel/plugin-transform-numeric-separator": "^7.23.4", + "@babel/plugin-transform-object-rest-spread": "^7.23.4", "@babel/plugin-transform-object-super": "^7.23.3", - "@babel/plugin-transform-optional-catch-binding": "^7.23.3", - "@babel/plugin-transform-optional-chaining": "^7.23.3", + "@babel/plugin-transform-optional-catch-binding": "^7.23.4", + "@babel/plugin-transform-optional-chaining": "^7.23.4", "@babel/plugin-transform-parameters": "^7.23.3", "@babel/plugin-transform-private-methods": "^7.23.3", - "@babel/plugin-transform-private-property-in-object": "^7.23.3", + "@babel/plugin-transform-private-property-in-object": "^7.23.4", "@babel/plugin-transform-property-literals": "^7.23.3", "@babel/plugin-transform-regenerator": "^7.23.3", "@babel/plugin-transform-reserved-words": "^7.23.3", @@ -2099,11 +2099,11 @@ } }, "node_modules/@babel/types": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz", - "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.5.tgz", + "integrity": "sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, @@ -2170,12 +2170,12 @@ } }, "node_modules/@docusaurus/core": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.0.0.tgz", - "integrity": "sha512-bHWtY55tJTkd6pZhHrWz1MpWuwN4edZe0/UWgFF7PW/oJeDZvLSXKqwny3L91X1/LGGoypBGkeZn8EOuKeL4yQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.0.1.tgz", + "integrity": "sha512-CXrLpOnW+dJdSv8M5FAJ3JBwXtL6mhUWxFA8aS0ozK6jBG/wgxERk5uvH28fCeFxOGbAT9v1e9dOMo1X2IEVhQ==", "dependencies": { - "@babel/core": "^7.22.9", - "@babel/generator": "^7.22.9", + "@babel/core": "^7.23.3", + "@babel/generator": "^7.23.3", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-transform-runtime": "^7.22.9", "@babel/preset-env": "^7.22.9", @@ -2184,13 +2184,13 @@ "@babel/runtime": "^7.22.6", "@babel/runtime-corejs3": "^7.22.6", "@babel/traverse": "^7.22.8", - "@docusaurus/cssnano-preset": "3.0.0", - "@docusaurus/logger": "3.0.0", - "@docusaurus/mdx-loader": "3.0.0", + "@docusaurus/cssnano-preset": "3.0.1", + "@docusaurus/logger": "3.0.1", + "@docusaurus/mdx-loader": "3.0.1", "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/utils": "3.0.0", - "@docusaurus/utils-common": "3.0.0", - "@docusaurus/utils-validation": "3.0.0", + "@docusaurus/utils": "3.0.1", + "@docusaurus/utils-common": "3.0.1", + "@docusaurus/utils-validation": "3.0.1", "@slorber/static-site-generator-webpack-plugin": "^4.0.7", "@svgr/webpack": "^6.5.1", "autoprefixer": "^10.4.14", @@ -2238,7 +2238,6 @@ "tslib": "^2.6.0", "update-notifier": "^6.0.2", "url-loader": "^4.1.1", - "wait-on": "^7.0.1", "webpack": "^5.88.1", "webpack-bundle-analyzer": "^4.9.0", "webpack-dev-server": "^4.15.1", @@ -2257,9 +2256,9 @@ } }, "node_modules/@docusaurus/cssnano-preset": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.0.0.tgz", - "integrity": "sha512-FHiRfwmVvIVdIGsHcijUOaX7hMn0mugVYB7m4GkpYI6Mi56zwQV4lH5p7DxcW5CUYNWMVxz2loWSCiWEm5ikwA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.0.1.tgz", + "integrity": "sha512-wjuXzkHMW+ig4BD6Ya1Yevx9UJadO4smNZCEljqBoQfIQrQskTswBs7lZ8InHP7mCt273a/y/rm36EZhqJhknQ==", "dependencies": { "cssnano-preset-advanced": "^5.3.10", "postcss": "^8.4.26", @@ -2271,9 +2270,9 @@ } }, "node_modules/@docusaurus/logger": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.0.0.tgz", - "integrity": "sha512-6eX0eOfioMQCk+qgCnHvbLLuyIAA+r2lSID6d6JusiLtDKmYMfNp3F4yyE8bnb0Abmzt2w68XwptEFYyALSAXw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.0.1.tgz", + "integrity": "sha512-I5L6Nk8OJzkVA91O2uftmo71LBSxe1vmOn9AMR6JRCzYeEBrqneWMH02AqMvjJ2NpMiviO+t0CyPjyYV7nxCWQ==", "dependencies": { "chalk": "^4.1.2", "tslib": "^2.6.0" @@ -2283,15 +2282,15 @@ } }, "node_modules/@docusaurus/mdx-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.0.0.tgz", - "integrity": "sha512-JkGge6WYDrwjNgMxwkb6kNQHnpISt5L1tMaBWFDBKeDToFr5Kj29IL35MIQm0RfrnoOfr/29RjSH4aRtvlAR0A==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.0.1.tgz", + "integrity": "sha512-ldnTmvnvlrONUq45oKESrpy+lXtbnTcTsFkOTIDswe5xx5iWJjt6eSa0f99ZaWlnm24mlojcIGoUWNCS53qVlQ==", "dependencies": { "@babel/parser": "^7.22.7", "@babel/traverse": "^7.22.8", - "@docusaurus/logger": "3.0.0", - "@docusaurus/utils": "3.0.0", - "@docusaurus/utils-validation": "3.0.0", + "@docusaurus/logger": "3.0.1", + "@docusaurus/utils": "3.0.1", + "@docusaurus/utils-validation": "3.0.1", "@mdx-js/mdx": "^3.0.0", "@slorber/remark-comment": "^1.0.0", "escape-html": "^1.0.3", @@ -2323,12 +2322,12 @@ } }, "node_modules/@docusaurus/module-type-aliases": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.0.0.tgz", - "integrity": "sha512-CfC6CgN4u/ce+2+L1JdsHNyBd8yYjl4De2B2CBj2a9F7WuJ5RjV1ciuU7KDg8uyju+NRVllRgvJvxVUjCdkPiw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.0.1.tgz", + "integrity": "sha512-DEHpeqUDsLynl3AhQQiO7AbC7/z/lBra34jTcdYuvp9eGm01pfH1wTVq8YqWZq6Jyx0BgcVl/VJqtE9StRd9Ag==", "dependencies": { "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/types": "3.0.0", + "@docusaurus/types": "3.0.1", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -2342,17 +2341,17 @@ } }, "node_modules/@docusaurus/plugin-content-blog": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.0.0.tgz", - "integrity": "sha512-iA8Wc3tIzVnROJxrbIsU/iSfixHW16YeW9RWsBw7hgEk4dyGsip9AsvEDXobnRq3lVv4mfdgoS545iGWf1Ip9w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.0.1.tgz", + "integrity": "sha512-cLOvtvAyaMQFLI8vm4j26svg3ktxMPSXpuUJ7EERKoGbfpJSsgtowNHcRsaBVmfuCsRSk1HZ/yHBsUkTmHFEsg==", "dependencies": { - "@docusaurus/core": "3.0.0", - "@docusaurus/logger": "3.0.0", - "@docusaurus/mdx-loader": "3.0.0", - "@docusaurus/types": "3.0.0", - "@docusaurus/utils": "3.0.0", - "@docusaurus/utils-common": "3.0.0", - "@docusaurus/utils-validation": "3.0.0", + "@docusaurus/core": "3.0.1", + "@docusaurus/logger": "3.0.1", + "@docusaurus/mdx-loader": "3.0.1", + "@docusaurus/types": "3.0.1", + "@docusaurus/utils": "3.0.1", + "@docusaurus/utils-common": "3.0.1", + "@docusaurus/utils-validation": "3.0.1", "cheerio": "^1.0.0-rc.12", "feed": "^4.2.2", "fs-extra": "^11.1.1", @@ -2373,17 +2372,17 @@ } }, "node_modules/@docusaurus/plugin-content-docs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.0.0.tgz", - "integrity": "sha512-MFZsOSwmeJ6rvoZMLieXxPuJsA9M9vn7/mUZmfUzSUTeHAeq+fEqvLltFOxcj4DVVDTYlQhgWYd+PISIWgamKw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.0.1.tgz", + "integrity": "sha512-dRfAOA5Ivo+sdzzJGXEu33yAtvGg8dlZkvt/NEJ7nwi1F2j4LEdsxtfX2GKeETB2fP6XoGNSQnFXqa2NYGrHFg==", "dependencies": { - "@docusaurus/core": "3.0.0", - "@docusaurus/logger": "3.0.0", - "@docusaurus/mdx-loader": "3.0.0", - "@docusaurus/module-type-aliases": "3.0.0", - "@docusaurus/types": "3.0.0", - "@docusaurus/utils": "3.0.0", - "@docusaurus/utils-validation": "3.0.0", + "@docusaurus/core": "3.0.1", + "@docusaurus/logger": "3.0.1", + "@docusaurus/mdx-loader": "3.0.1", + "@docusaurus/module-type-aliases": "3.0.1", + "@docusaurus/types": "3.0.1", + "@docusaurus/utils": "3.0.1", + "@docusaurus/utils-validation": "3.0.1", "@types/react-router-config": "^5.0.7", "combine-promises": "^1.1.0", "fs-extra": "^11.1.1", @@ -2402,15 +2401,15 @@ } }, "node_modules/@docusaurus/plugin-content-pages": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.0.0.tgz", - "integrity": "sha512-EXYHXK2Ea1B5BUmM0DgSwaOYt8EMSzWtYUToNo62Q/EoWxYOQFdWglYnw3n7ZEGyw5Kog4LHaRwlazAdmDomvQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.0.1.tgz", + "integrity": "sha512-oP7PoYizKAXyEttcvVzfX3OoBIXEmXTMzCdfmC4oSwjG4SPcJsRge3mmI6O8jcZBgUPjIzXD21bVGWEE1iu8gg==", "dependencies": { - "@docusaurus/core": "3.0.0", - "@docusaurus/mdx-loader": "3.0.0", - "@docusaurus/types": "3.0.0", - "@docusaurus/utils": "3.0.0", - "@docusaurus/utils-validation": "3.0.0", + "@docusaurus/core": "3.0.1", + "@docusaurus/mdx-loader": "3.0.1", + "@docusaurus/types": "3.0.1", + "@docusaurus/utils": "3.0.1", + "@docusaurus/utils-validation": "3.0.1", "fs-extra": "^11.1.1", "tslib": "^2.6.0", "webpack": "^5.88.1" @@ -2424,15 +2423,15 @@ } }, "node_modules/@docusaurus/plugin-debug": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.0.0.tgz", - "integrity": "sha512-gSV07HfQgnUboVEb3lucuVyv5pEoy33E7QXzzn++3kSc/NLEimkjXh3sSnTGOishkxCqlFV9BHfY/VMm5Lko5g==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.0.1.tgz", + "integrity": "sha512-09dxZMdATky4qdsZGzhzlUvvC+ilQ2hKbYF+wez+cM2mGo4qHbv8+qKXqxq0CQZyimwlAOWQLoSozIXU0g0i7g==", "dependencies": { - "@docusaurus/core": "3.0.0", - "@docusaurus/types": "3.0.0", - "@docusaurus/utils": "3.0.0", - "@microlink/react-json-view": "^1.22.2", + "@docusaurus/core": "3.0.1", + "@docusaurus/types": "3.0.1", + "@docusaurus/utils": "3.0.1", "fs-extra": "^11.1.1", + "react-json-view-lite": "^1.2.0", "tslib": "^2.6.0" }, "engines": { @@ -2444,13 +2443,13 @@ } }, "node_modules/@docusaurus/plugin-google-analytics": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.0.0.tgz", - "integrity": "sha512-0zcLK8w+ohmSm1fjUQCqeRsjmQc0gflvXnaVA/QVVCtm2yCiBtkrSGQXqt4MdpD7Xq8mwo3qVd5nhIcvrcebqw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.0.1.tgz", + "integrity": "sha512-jwseSz1E+g9rXQwDdr0ZdYNjn8leZBnKPjjQhMBEiwDoenL3JYFcNW0+p0sWoVF/f2z5t7HkKA+cYObrUh18gg==", "dependencies": { - "@docusaurus/core": "3.0.0", - "@docusaurus/types": "3.0.0", - "@docusaurus/utils-validation": "3.0.0", + "@docusaurus/core": "3.0.1", + "@docusaurus/types": "3.0.1", + "@docusaurus/utils-validation": "3.0.1", "tslib": "^2.6.0" }, "engines": { @@ -2462,13 +2461,13 @@ } }, "node_modules/@docusaurus/plugin-google-gtag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.0.0.tgz", - "integrity": "sha512-asEKavw8fczUqvXu/s9kG2m1epLnHJ19W6CCCRZEmpnkZUZKiM8rlkDiEmxApwIc2JDDbIMk+Y2TMkJI8mInbQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.0.1.tgz", + "integrity": "sha512-UFTDvXniAWrajsulKUJ1DB6qplui1BlKLQZjX4F7qS/qfJ+qkKqSkhJ/F4VuGQ2JYeZstYb+KaUzUzvaPK1aRQ==", "dependencies": { - "@docusaurus/core": "3.0.0", - "@docusaurus/types": "3.0.0", - "@docusaurus/utils-validation": "3.0.0", + "@docusaurus/core": "3.0.1", + "@docusaurus/types": "3.0.1", + "@docusaurus/utils-validation": "3.0.1", "@types/gtag.js": "^0.0.12", "tslib": "^2.6.0" }, @@ -2481,13 +2480,13 @@ } }, "node_modules/@docusaurus/plugin-google-tag-manager": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.0.0.tgz", - "integrity": "sha512-lytgu2eyn+7p4WklJkpMGRhwC29ezj4IjPPmVJ8vGzcSl6JkR1sADTHLG5xWOMuci420xZl9dGEiLTQ8FjCRyA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.0.1.tgz", + "integrity": "sha512-IPFvuz83aFuheZcWpTlAdiiX1RqWIHM+OH8wS66JgwAKOiQMR3+nLywGjkLV4bp52x7nCnwhNk1rE85Cpy/CIw==", "dependencies": { - "@docusaurus/core": "3.0.0", - "@docusaurus/types": "3.0.0", - "@docusaurus/utils-validation": "3.0.0", + "@docusaurus/core": "3.0.1", + "@docusaurus/types": "3.0.1", + "@docusaurus/utils-validation": "3.0.1", "tslib": "^2.6.0" }, "engines": { @@ -2499,16 +2498,16 @@ } }, "node_modules/@docusaurus/plugin-sitemap": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.0.0.tgz", - "integrity": "sha512-cfcONdWku56Oi7Hdus2uvUw/RKRRlIGMViiHLjvQ21CEsEqnQ297MRoIgjU28kL7/CXD/+OiANSq3T1ezAiMhA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.0.1.tgz", + "integrity": "sha512-xARiWnjtVvoEniZudlCq5T9ifnhCu/GAZ5nA7XgyLfPcNpHQa241HZdsTlLtVcecEVVdllevBKOp7qknBBaMGw==", "dependencies": { - "@docusaurus/core": "3.0.0", - "@docusaurus/logger": "3.0.0", - "@docusaurus/types": "3.0.0", - "@docusaurus/utils": "3.0.0", - "@docusaurus/utils-common": "3.0.0", - "@docusaurus/utils-validation": "3.0.0", + "@docusaurus/core": "3.0.1", + "@docusaurus/logger": "3.0.1", + "@docusaurus/types": "3.0.1", + "@docusaurus/utils": "3.0.1", + "@docusaurus/utils-common": "3.0.1", + "@docusaurus/utils-validation": "3.0.1", "fs-extra": "^11.1.1", "sitemap": "^7.1.1", "tslib": "^2.6.0" @@ -2522,23 +2521,23 @@ } }, "node_modules/@docusaurus/preset-classic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.0.0.tgz", - "integrity": "sha512-90aOKZGZdi0+GVQV+wt8xx4M4GiDrBRke8NO8nWwytMEXNrxrBxsQYFRD1YlISLJSCiHikKf3Z/MovMnQpnZyg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.0.1.tgz", + "integrity": "sha512-il9m9xZKKjoXn6h0cRcdnt6wce0Pv1y5t4xk2Wx7zBGhKG1idu4IFHtikHlD0QPuZ9fizpXspXcTzjL5FXc1Gw==", "dependencies": { - "@docusaurus/core": "3.0.0", - "@docusaurus/plugin-content-blog": "3.0.0", - "@docusaurus/plugin-content-docs": "3.0.0", - "@docusaurus/plugin-content-pages": "3.0.0", - "@docusaurus/plugin-debug": "3.0.0", - "@docusaurus/plugin-google-analytics": "3.0.0", - "@docusaurus/plugin-google-gtag": "3.0.0", - "@docusaurus/plugin-google-tag-manager": "3.0.0", - "@docusaurus/plugin-sitemap": "3.0.0", - "@docusaurus/theme-classic": "3.0.0", - "@docusaurus/theme-common": "3.0.0", - "@docusaurus/theme-search-algolia": "3.0.0", - "@docusaurus/types": "3.0.0" + "@docusaurus/core": "3.0.1", + "@docusaurus/plugin-content-blog": "3.0.1", + "@docusaurus/plugin-content-docs": "3.0.1", + "@docusaurus/plugin-content-pages": "3.0.1", + "@docusaurus/plugin-debug": "3.0.1", + "@docusaurus/plugin-google-analytics": "3.0.1", + "@docusaurus/plugin-google-gtag": "3.0.1", + "@docusaurus/plugin-google-tag-manager": "3.0.1", + "@docusaurus/plugin-sitemap": "3.0.1", + "@docusaurus/theme-classic": "3.0.1", + "@docusaurus/theme-common": "3.0.1", + "@docusaurus/theme-search-algolia": "3.0.1", + "@docusaurus/types": "3.0.1" }, "engines": { "node": ">=18.0" @@ -2561,30 +2560,30 @@ } }, "node_modules/@docusaurus/theme-classic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.0.0.tgz", - "integrity": "sha512-wWOHSrKMn7L4jTtXBsb5iEJ3xvTddBye5PjYBnWiCkTAlhle2yMdc4/qRXW35Ot+OV/VXu6YFG8XVUJEl99z0A==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.0.1.tgz", + "integrity": "sha512-XD1FRXaJiDlmYaiHHdm27PNhhPboUah9rqIH0lMpBt5kYtsGjJzhqa27KuZvHLzOP2OEpqd2+GZ5b6YPq7Q05Q==", "dependencies": { - "@docusaurus/core": "3.0.0", - "@docusaurus/mdx-loader": "3.0.0", - "@docusaurus/module-type-aliases": "3.0.0", - "@docusaurus/plugin-content-blog": "3.0.0", - "@docusaurus/plugin-content-docs": "3.0.0", - "@docusaurus/plugin-content-pages": "3.0.0", - "@docusaurus/theme-common": "3.0.0", - "@docusaurus/theme-translations": "3.0.0", - "@docusaurus/types": "3.0.0", - "@docusaurus/utils": "3.0.0", - "@docusaurus/utils-common": "3.0.0", - "@docusaurus/utils-validation": "3.0.0", + "@docusaurus/core": "3.0.1", + "@docusaurus/mdx-loader": "3.0.1", + "@docusaurus/module-type-aliases": "3.0.1", + "@docusaurus/plugin-content-blog": "3.0.1", + "@docusaurus/plugin-content-docs": "3.0.1", + "@docusaurus/plugin-content-pages": "3.0.1", + "@docusaurus/theme-common": "3.0.1", + "@docusaurus/theme-translations": "3.0.1", + "@docusaurus/types": "3.0.1", + "@docusaurus/utils": "3.0.1", + "@docusaurus/utils-common": "3.0.1", + "@docusaurus/utils-validation": "3.0.1", "@mdx-js/react": "^3.0.0", - "clsx": "^1.2.1", + "clsx": "^2.0.0", "copy-text-to-clipboard": "^3.2.0", "infima": "0.2.0-alpha.43", "lodash": "^4.17.21", "nprogress": "^0.2.0", "postcss": "^8.4.26", - "prism-react-renderer": "^2.1.0", + "prism-react-renderer": "^2.3.0", "prismjs": "^1.29.0", "react-router-dom": "^5.3.4", "rtlcss": "^4.1.0", @@ -2600,23 +2599,23 @@ } }, "node_modules/@docusaurus/theme-common": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.0.0.tgz", - "integrity": "sha512-PahRpCLRK5owCMEqcNtUeTMOkTUCzrJlKA+HLu7f+8osYOni617YurXvHASCsSTxurjXaLz/RqZMnASnqATxIA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.0.1.tgz", + "integrity": "sha512-cr9TOWXuIOL0PUfuXv6L5lPlTgaphKP+22NdVBOYah5jSq5XAAulJTjfe+IfLsEG4L7lJttLbhW7LXDFSAI7Ag==", "dependencies": { - "@docusaurus/mdx-loader": "3.0.0", - "@docusaurus/module-type-aliases": "3.0.0", - "@docusaurus/plugin-content-blog": "3.0.0", - "@docusaurus/plugin-content-docs": "3.0.0", - "@docusaurus/plugin-content-pages": "3.0.0", - "@docusaurus/utils": "3.0.0", - "@docusaurus/utils-common": "3.0.0", + "@docusaurus/mdx-loader": "3.0.1", + "@docusaurus/module-type-aliases": "3.0.1", + "@docusaurus/plugin-content-blog": "3.0.1", + "@docusaurus/plugin-content-docs": "3.0.1", + "@docusaurus/plugin-content-pages": "3.0.1", + "@docusaurus/utils": "3.0.1", + "@docusaurus/utils-common": "3.0.1", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", - "clsx": "^1.2.1", + "clsx": "^2.0.0", "parse-numeric-range": "^1.3.0", - "prism-react-renderer": "^2.1.0", + "prism-react-renderer": "^2.3.0", "tslib": "^2.6.0", "utility-types": "^3.10.0" }, @@ -2629,15 +2628,15 @@ } }, "node_modules/@docusaurus/theme-mermaid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-mermaid/-/theme-mermaid-3.0.0.tgz", - "integrity": "sha512-e5uoGmow5kk5AeiyYFHYGsM5LFg4ClCIIQQcBrD9zs1E8yxTDNX524MylO6klqqCn3TmxJ34RogEg78QnthRng==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-mermaid/-/theme-mermaid-3.0.1.tgz", + "integrity": "sha512-jquSDnZfazABnC5i+02GzRIvufXKruKgvbYkQjKbI7/LWo0XvBs0uKAcCDGgHhth0t/ON5+Sn27joRfpeSk3Lw==", "dependencies": { - "@docusaurus/core": "3.0.0", - "@docusaurus/module-type-aliases": "3.0.0", - "@docusaurus/theme-common": "3.0.0", - "@docusaurus/types": "3.0.0", - "@docusaurus/utils-validation": "3.0.0", + "@docusaurus/core": "3.0.1", + "@docusaurus/module-type-aliases": "3.0.1", + "@docusaurus/theme-common": "3.0.1", + "@docusaurus/types": "3.0.1", + "@docusaurus/utils-validation": "3.0.1", "mermaid": "^10.4.0", "tslib": "^2.6.0" }, @@ -2650,21 +2649,21 @@ } }, "node_modules/@docusaurus/theme-search-algolia": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.0.0.tgz", - "integrity": "sha512-PyMUNIS9yu0dx7XffB13ti4TG47pJq3G2KE/INvOFb6M0kWh+wwCnucPg4WAOysHOPh+SD9fjlXILoLQstgEIA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.0.1.tgz", + "integrity": "sha512-DDiPc0/xmKSEdwFkXNf1/vH1SzJPzuJBar8kMcBbDAZk/SAmo/4lf6GU2drou4Ae60lN2waix+jYWTWcJRahSA==", "dependencies": { "@docsearch/react": "^3.5.2", - "@docusaurus/core": "3.0.0", - "@docusaurus/logger": "3.0.0", - "@docusaurus/plugin-content-docs": "3.0.0", - "@docusaurus/theme-common": "3.0.0", - "@docusaurus/theme-translations": "3.0.0", - "@docusaurus/utils": "3.0.0", - "@docusaurus/utils-validation": "3.0.0", + "@docusaurus/core": "3.0.1", + "@docusaurus/logger": "3.0.1", + "@docusaurus/plugin-content-docs": "3.0.1", + "@docusaurus/theme-common": "3.0.1", + "@docusaurus/theme-translations": "3.0.1", + "@docusaurus/utils": "3.0.1", + "@docusaurus/utils-validation": "3.0.1", "algoliasearch": "^4.18.0", "algoliasearch-helper": "^3.13.3", - "clsx": "^1.2.1", + "clsx": "^2.0.0", "eta": "^2.2.0", "fs-extra": "^11.1.1", "lodash": "^4.17.21", @@ -2680,9 +2679,9 @@ } }, "node_modules/@docusaurus/theme-translations": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.0.0.tgz", - "integrity": "sha512-p/H3+5LdnDtbMU+csYukA6601U1ld2v9knqxGEEV96qV27HsHfP63J9Ta2RBZUrNhQAgrwFzIc9GdDO8P1Baag==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.0.1.tgz", + "integrity": "sha512-6UrbpzCTN6NIJnAtZ6Ne9492vmPVX+7Fsz4kmp+yor3KQwA1+MCzQP7ItDNkP38UmVLnvB/cYk/IvehCUqS3dg==", "dependencies": { "fs-extra": "^11.1.1", "tslib": "^2.6.0" @@ -2692,9 +2691,9 @@ } }, "node_modules/@docusaurus/types": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.0.0.tgz", - "integrity": "sha512-Qb+l/hmCOVemReuzvvcFdk84bUmUFyD0Zi81y651ie3VwMrXqC7C0E7yZLKMOsLj/vkqsxHbtkAuYMI89YzNzg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.0.1.tgz", + "integrity": "sha512-plyX2iU1tcUsF46uQ01pAd4JhexR7n0iiQ5MSnBFX6M6NSJgDYdru/i1/YNPKOnQHBoXGLHv0dNT6OAlDWNjrg==", "dependencies": { "@types/history": "^4.7.11", "@types/react": "*", @@ -2711,11 +2710,11 @@ } }, "node_modules/@docusaurus/utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.0.0.tgz", - "integrity": "sha512-JwGjh5mtjG9XIAESyPxObL6CZ6LO/yU4OSTpq7Q0x+jN25zi/AMbvLjpSyZzWy+qm5uQiFiIhqFaOxvy+82Ekg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.0.1.tgz", + "integrity": "sha512-TwZ33Am0q4IIbvjhUOs+zpjtD/mXNmLmEgeTGuRq01QzulLHuPhaBTTAC/DHu6kFx3wDgmgpAlaRuCHfTcXv8g==", "dependencies": { - "@docusaurus/logger": "3.0.0", + "@docusaurus/logger": "3.0.1", "@svgr/webpack": "^6.5.1", "escape-string-regexp": "^4.0.0", "file-loader": "^6.2.0", @@ -2746,9 +2745,9 @@ } }, "node_modules/@docusaurus/utils-common": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.0.0.tgz", - "integrity": "sha512-7iJWAtt4AHf4PFEPlEPXko9LZD/dbYnhLe0q8e3GRK1EXZyRASah2lznpMwB3lLmVjq/FR6ZAKF+E0wlmL5j0g==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.0.1.tgz", + "integrity": "sha512-W0AxD6w6T8g6bNro8nBRWf7PeZ/nn7geEWM335qHU2DDDjHuV4UZjgUGP1AQsdcSikPrlIqTJJbKzer1lRSlIg==", "dependencies": { "tslib": "^2.6.0" }, @@ -2765,12 +2764,12 @@ } }, "node_modules/@docusaurus/utils-validation": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.0.0.tgz", - "integrity": "sha512-MlIGUspB/HBW5CYgHvRhmkZbeMiUWKbyVoCQYvbGN8S19SSzVgzyy97KRpcjCOYYeEdkhmRCUwFBJBlLg3IoNQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.0.1.tgz", + "integrity": "sha512-ujTnqSfyGQ7/4iZdB4RRuHKY/Nwm58IIb+41s5tCXOv/MBU2wGAjOHq3U+AEyJ8aKQcHbxvTKJaRchNHYUVUQg==", "dependencies": { - "@docusaurus/logger": "3.0.0", - "@docusaurus/utils": "3.0.0", + "@docusaurus/logger": "3.0.1", + "@docusaurus/utils": "3.0.1", "joi": "^17.9.2", "js-yaml": "^4.1.0", "tslib": "^2.6.0" @@ -2926,33 +2925,6 @@ "react": ">=16" } }, - "node_modules/@microlink/react-json-view": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/@microlink/react-json-view/-/react-json-view-1.23.0.tgz", - "integrity": "sha512-HYJ1nsfO4/qn8afnAMhuk7+5a1vcjEaS8Gm5Vpr1SqdHDY0yLBJGpA+9DvKyxyVKaUkXzKXt3Mif9RcmFSdtYg==", - "dependencies": { - "flux": "~4.0.1", - "react-base16-styling": "~0.6.0", - "react-lifecycles-compat": "~3.0.4", - "react-textarea-autosize": "~8.3.2" - }, - "peerDependencies": { - "react": ">= 15", - "react-dom": ">= 15" - } - }, - "node_modules/@microlink/react-json-view/node_modules/flux": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.4.tgz", - "integrity": "sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw==", - "dependencies": { - "fbemitter": "^3.0.0", - "fbjs": "^3.0.1" - }, - "peerDependencies": { - "react": "^15.0.2 || ^16.0.0 || ^17.0.0" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -3051,9 +3023,9 @@ "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" }, "node_modules/@sindresorhus/is": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-3.1.2.tgz", - "integrity": "sha512-JiX9vxoKMmu8Y3Zr2RVathBL1Cdu4Nt4MuNWemt1Nc06A0RAin9c5FArkhGsyMBWfCu4zj+9b+GxtjAnE4qqLQ==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "engines": { "node": ">=10" }, @@ -3599,9 +3571,9 @@ "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" }, "node_modules/@types/react": { - "version": "18.2.37", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.37.tgz", - "integrity": "sha512-RGAYMi2bhRgEXT3f4B92WTohopH6bIXw05FuGlmJEnv/omEn190+QYEIYxIAuIBdKgboYYdVved2p1AxZVQnaw==", + "version": "18.2.42", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.42.tgz", + "integrity": "sha512-c1zEr96MjakLYus/wPnuWDo1/zErfdU9rNsIGmE+NV71nx88FG9Ttgo5dqorXTu/LImX2f63WBP986gJkMPNbA==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -4116,11 +4088,6 @@ "node": ">=8" } }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, "node_modules/astring": { "version": "1.8.6", "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz", @@ -4129,11 +4096,6 @@ "astring": "bin/astring" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", @@ -4178,16 +4140,6 @@ "postcss": "^8.1.0" } }, - "node_modules/axios": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", - "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, "node_modules/babel-loader": { "version": "9.1.3", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", @@ -4270,11 +4222,6 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "node_modules/base16": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", - "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==" - }, "node_modules/batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", @@ -4795,9 +4742,9 @@ } }, "node_modules/clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", "engines": { "node": ">=6" } @@ -4845,17 +4792,6 @@ "node": ">=10" } }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/comma-separated-tokens": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", @@ -5145,14 +5081,6 @@ "node": ">=10" } }, - "node_modules/cross-fetch": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", - "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", - "dependencies": { - "node-fetch": "^2.6.12" - } - }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -6087,14 +6015,6 @@ "robust-predicates": "^3.0.0" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -6814,33 +6734,6 @@ "node": ">=0.8.0" } }, - "node_modules/fbemitter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", - "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", - "dependencies": { - "fbjs": "^3.0.0" - } - }, - "node_modules/fbjs": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", - "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", - "dependencies": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^1.0.35" - } - }, - "node_modules/fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" - }, "node_modules/feed": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", @@ -7142,19 +7035,6 @@ "node": ">=6" } }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/form-data-encoder": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", @@ -7200,9 +7080,9 @@ } }, "node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -7642,17 +7522,23 @@ } }, "node_modules/hast-util-to-jsx-runtime": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.2.0.tgz", - "integrity": "sha512-wSlp23N45CMjDg/BPW8zvhEi3R+8eRE1qFbjEyAUzMCzu2l1Wzwakq+Tlia9nkCtEl5mDxa7nKHsvYJ6Gfn21A==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz", + "integrity": "sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==", "dependencies": { + "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^6.0.0", "space-separated-tokens": "^2.0.0", - "style-to-object": "^0.4.0", + "style-to-object": "^1.0.0", "unist-util-position": "^5.0.0", "vfile-message": "^4.0.0" }, @@ -7661,6 +7547,19 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/hast-util-to-jsx-runtime/node_modules/inline-style-parser": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.2.tgz", + "integrity": "sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ==" + }, + "node_modules/hast-util-to-jsx-runtime/node_modules/style-to-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.5.tgz", + "integrity": "sha512-rDRwHtoDD3UMMrmZ6BzOW0naTjMsVZLIjsGleSKS/0Oz+cgCfAPRspaqJuE8rDzpKha/nEvnM0IF4seEAZUTKQ==", + "dependencies": { + "inline-style-parser": "0.2.2" + } + }, "node_modules/hast-util-to-parse5": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", @@ -8705,21 +8604,11 @@ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, - "node_modules/lodash.curry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", - "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==" - }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, - "node_modules/lodash.flow": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", - "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==" - }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -11538,33 +11427,17 @@ } }, "node_modules/node-emoji": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.1.0.tgz", - "integrity": "sha512-tcsBm9C6FmPN5Wo7OjFi9lgMyJjvkAeirmjR/ax8Ttfqy4N8PoFic26uqFTIgayHPNI5FH4ltUvfh9kHzwcK9A==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.1.3.tgz", + "integrity": "sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA==", "dependencies": { - "@sindresorhus/is": "^3.1.2", + "@sindresorhus/is": "^4.6.0", "char-regex": "^1.0.2", "emojilib": "^2.4.0", "skin-tone": "^2.0.0" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "node": ">=18" } }, "node_modules/node-forge": { @@ -12709,12 +12582,12 @@ } }, "node_modules/prism-react-renderer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.2.0.tgz", - "integrity": "sha512-j4AN0VkEr72598+47xDvpzeYyeh/wPPRNTt9nJFZqIZUxwGKwYqYgt7RVigZ3ZICJWJWN84KEuMKPNyypyhNIw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.3.0.tgz", + "integrity": "sha512-UYRg2TkVIaI6tRVHC5OJ4/BxqPUxJkJvq/odLT/ykpt1zGYXooNperUxQcCvi87LyRnR4nCh81ceOA+e7nrydg==", "dependencies": { "@types/prismjs": "^1.26.0", - "clsx": "^1.2.1" + "clsx": "^2.0.0" }, "peerDependencies": { "react": ">=16.0.0" @@ -12733,14 +12606,6 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dependencies": { - "asap": "~2.0.3" - } - }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -12797,11 +12662,6 @@ "node": ">= 0.10" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, "node_modules/punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", @@ -12821,11 +12681,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pure-color": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", - "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" - }, "node_modules/qs": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", @@ -13013,17 +12868,6 @@ "node": ">=0.10.0" } }, - "node_modules/react-base16-styling": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", - "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", - "dependencies": { - "base16": "^1.0.0", - "lodash.curry": "^4.0.1", - "lodash.flow": "^3.3.0", - "pure-color": "^1.2.0" - } - }, "node_modules/react-dev-utils": { "version": "12.0.1", "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", @@ -13185,10 +13029,16 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + "node_modules/react-json-view-lite": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-1.2.1.tgz", + "integrity": "sha512-Itc0g86fytOmKZoIoJyGgvNqohWSbh3NXIKNgH6W6FT9PC1ck4xas1tT3Rr/b3UlFXyA9Jjaw9QSXdZy2JwGMQ==", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^16.13.1 || ^17.0.0 || ^18.0.0" + } }, "node_modules/react-loadable": { "name": "@docusaurus/react-loadable", @@ -13266,22 +13116,6 @@ "react": ">=15" } }, - "node_modules/react-textarea-autosize": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.4.tgz", - "integrity": "sha512-CdtmP8Dc19xL8/R6sWvtknD/eCXkQr30dtvC4VmGInhRsfF8X/ihXCq6+9l9qbxmKRiq407/7z5fxE7cVWQNgQ==", - "dependencies": { - "@babel/runtime": "^7.10.2", - "use-composed-ref": "^1.3.0", - "use-latest": "^1.2.1" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -13811,14 +13645,6 @@ "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/sade": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", @@ -13886,9 +13712,9 @@ } }, "node_modules/search-insights": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.10.0.tgz", - "integrity": "sha512-pQGrOE56QuTRmq4NzliRZe9rv914hBMBjOviuDliDHoIhmBGoyZRlFsPd4RprGGNC4PKdD2Jz54YN4Cmkb44mA==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.11.0.tgz", + "integrity": "sha512-Uin2J8Bpm3xaZi9Y8QibSys6uJOFZ+REMrf42v20AA3FUDUrshKkMEP6liJbMAHCm71wO6ls4mwAf7a3gFVxLw==", "peer": true }, "node_modules/section-matter": { @@ -14139,11 +13965,6 @@ "node": ">= 0.4" } }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -14858,11 +14679,6 @@ "node": ">=6" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, "node_modules/trim-lines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", @@ -14957,28 +14773,6 @@ "node": ">=14.17" } }, - "node_modules/ua-parser-js": { - "version": "1.0.37", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz", - "integrity": "sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - }, - { - "type": "github", - "url": "https://github.com/sponsors/faisalman" - } - ], - "engines": { - "node": "*" - } - }, "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", @@ -15369,43 +15163,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/use-composed-ref": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", - "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/use-isomorphic-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-latest": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", - "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", - "dependencies": { - "use-isomorphic-layout-effect": "^1.1.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -15518,24 +15275,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/wait-on": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-7.2.0.tgz", - "integrity": "sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==", - "dependencies": { - "axios": "^1.6.1", - "joi": "^17.11.0", - "lodash": "^4.17.21", - "minimist": "^1.2.8", - "rxjs": "^7.8.1" - }, - "bin": { - "wait-on": "bin/wait-on" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/watchpack": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", @@ -15570,11 +15309,6 @@ "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, "node_modules/webpack": { "version": "5.89.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", @@ -15905,15 +15639,6 @@ "node": ">=0.8.0" } }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/docs/package.json b/docs/package.json index cf21f4eca..438b3d1bf 100644 --- a/docs/package.json +++ b/docs/package.json @@ -14,11 +14,11 @@ "write-heading-ids": "docusaurus write-heading-ids" }, "dependencies": { - "@docusaurus/core": "3.0.0", - "@docusaurus/preset-classic": "3.0.0", - "@docusaurus/theme-mermaid": "3.0.0", + "@docusaurus/core": "^3.0.0", + "@docusaurus/preset-classic": "^3.0.0", + "@docusaurus/theme-mermaid": "^3.0.0", "@mdx-js/react": "^3.0.0", - "clsx": "^1.2.1", + "clsx": "^2.0.0", "prism-react-renderer": "^2.1.0", "raw-loader": "^4.0.2", "react": "^18.2.0", diff --git a/web/package-lock.json b/web/package-lock.json index e0bc5eaee..ccceb07fe 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -51,7 +51,7 @@ "postcss": "^8.4.29", "prettier": "^3.0.3", "tailwindcss": "^3.3.2", - "typescript": "^5.0.4", + "typescript": "^5.2.2", "vite": "^4.4.9", "vitest": "^0.34.3" } @@ -928,9 +928,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz", - "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -978,9 +978,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.54.0.tgz", - "integrity": "sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==", + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", + "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1403,9 +1403,9 @@ } }, "node_modules/@testing-library/jest-dom": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.1.4.tgz", - "integrity": "sha512-wpoYrCYwSZ5/AxcrjLxJmCU6I5QAJXslEeSiMQqaWmP2Kzpd1LvF/qxmAIW2qposULGWq2gw30GgVNFLSc2Jnw==", + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.1.5.tgz", + "integrity": "sha512-3y04JLW+EceVPy2Em3VwNr95dOKqA8DhR0RJHhHKDZNYXcVXnEK7WIrpj4eYU8SVt/qYZ2aRWt/WgQ+grNES8g==", "dev": true, "dependencies": { "@adobe/css-tools": "^4.3.1", @@ -1664,16 +1664,16 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.11.0.tgz", - "integrity": "sha512-uXnpZDc4VRjY4iuypDBKzW1rz9T5YBBK0snMn8MaTSNd2kMlj50LnLBABELjJiOL5YHk7ZD8hbSpI9ubzqYI0w==", + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.13.2.tgz", + "integrity": "sha512-3+9OGAWHhk4O1LlcwLBONbdXsAhLjyCFogJY/cWy2lxdVJ2JrcTF2pTGMaLl2AE7U1l31n8Py4a8bx5DLf/0dQ==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.11.0", - "@typescript-eslint/type-utils": "6.11.0", - "@typescript-eslint/utils": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0", + "@typescript-eslint/scope-manager": "6.13.2", + "@typescript-eslint/type-utils": "6.13.2", + "@typescript-eslint/utils": "6.13.2", + "@typescript-eslint/visitor-keys": "6.13.2", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -1870,15 +1870,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.11.0.tgz", - "integrity": "sha512-+whEdjk+d5do5nxfxx73oanLL9ghKO3EwM9kBCkUtWMRwWuPaFv9ScuqlYfQ6pAD6ZiJhky7TZ2ZYhrMsfMxVQ==", + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.13.2.tgz", + "integrity": "sha512-MUkcC+7Wt/QOGeVlM8aGGJZy1XV5YKjTpq9jK6r6/iLsGXhBVaGP5N0UYvFsu9BFlSpwY9kMretzdBH01rkRXg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.11.0", - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/typescript-estree": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0", + "@typescript-eslint/scope-manager": "6.13.2", + "@typescript-eslint/types": "6.13.2", + "@typescript-eslint/typescript-estree": "6.13.2", + "@typescript-eslint/visitor-keys": "6.13.2", "debug": "^4.3.4" }, "engines": { @@ -1898,13 +1898,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.11.0.tgz", - "integrity": "sha512-0A8KoVvIURG4uhxAdjSaxy8RdRE//HztaZdG8KiHLP8WOXSk0vlF7Pvogv+vlJA5Rnjj/wDcFENvDaHb+gKd1A==", + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.13.2.tgz", + "integrity": "sha512-CXQA0xo7z6x13FeDYCgBkjWzNqzBn8RXaE3QVQVIUm74fWJLkJkaHmHdKStrxQllGh6Q4eUGyNpMe0b1hMkXFA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0" + "@typescript-eslint/types": "6.13.2", + "@typescript-eslint/visitor-keys": "6.13.2" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1915,13 +1915,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.11.0.tgz", - "integrity": "sha512-nA4IOXwZtqBjIoYrJcYxLRO+F9ri+leVGoJcMW1uqr4r1Hq7vW5cyWrA43lFbpRvQ9XgNrnfLpIkO3i1emDBIA==", + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.13.2.tgz", + "integrity": "sha512-Qr6ssS1GFongzH2qfnWKkAQmMUyZSyOr0W54nZNU1MDfo+U4Mv3XveeLZzadc/yq8iYhQZHYT+eoXJqnACM1tw==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.11.0", - "@typescript-eslint/utils": "6.11.0", + "@typescript-eslint/typescript-estree": "6.13.2", + "@typescript-eslint/utils": "6.13.2", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -1942,9 +1942,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.11.0.tgz", - "integrity": "sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==", + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.13.2.tgz", + "integrity": "sha512-7sxbQ+EMRubQc3wTfTsycgYpSujyVbI1xw+3UMRUcrhSy+pN09y/lWzeKDbvhoqcRbHdc+APLs/PWYi/cisLPg==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1955,13 +1955,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.11.0.tgz", - "integrity": "sha512-Aezzv1o2tWJwvZhedzvD5Yv7+Lpu1by/U1LZ5gLc4tCx8jUmuSCMioPFRjliN/6SJIvY6HpTtJIWubKuYYYesQ==", + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.13.2.tgz", + "integrity": "sha512-SuD8YLQv6WHnOEtKv8D6HZUzOub855cfPnPMKvdM/Bh1plv1f7Q/0iFUDLKKlxHcEstQnaUU4QZskgQq74t+3w==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0", + "@typescript-eslint/types": "6.13.2", + "@typescript-eslint/visitor-keys": "6.13.2", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1997,17 +1997,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.11.0.tgz", - "integrity": "sha512-p23ibf68fxoZy605dc0dQAEoUsoiNoP3MD9WQGiHLDuTSOuqoTsa4oAy+h3KDkTcxbbfOtUjb9h3Ta0gT4ug2g==", + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.13.2.tgz", + "integrity": "sha512-b9Ptq4eAZUym4idijCRzl61oPCwwREcfDI8xGk751Vhzig5fFZR9CyzDz4Sp/nxSLBYxUPyh4QdIDqWykFhNmQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.11.0", - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/typescript-estree": "6.11.0", + "@typescript-eslint/scope-manager": "6.13.2", + "@typescript-eslint/types": "6.13.2", + "@typescript-eslint/typescript-estree": "6.13.2", "semver": "^7.5.4" }, "engines": { @@ -2037,12 +2037,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.11.0.tgz", - "integrity": "sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==", + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.13.2.tgz", + "integrity": "sha512-OGznFs0eAQXJsp+xSd6k/O1UbFi/K/L7WjqeRoFE7vadjAF9y0uppXhYNQNEqygjou782maGClOoZwPqF0Drlw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/types": "6.13.2", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -2268,12 +2268,12 @@ } }, "node_modules/@vitest/ui": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-0.34.6.tgz", - "integrity": "sha512-/fxnCwGC0Txmr3tF3BwAbo3v6U2SkBTGR9UB8zo0Ztlx0BTOXHucE0gDHY7SjwEktCOHatiGmli9kZD6gYSoWQ==", + "version": "0.34.7", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-0.34.7.tgz", + "integrity": "sha512-iizUu9R5Rsvsq8FtdJ0suMqEfIsIIzziqnasMHe4VH8vG+FnZSA3UAtCHx6rLeRupIFVAVg7bptMmuvMcsn8WQ==", "dev": true, "dependencies": { - "@vitest/utils": "0.34.6", + "@vitest/utils": "0.34.7", "fast-glob": "^3.3.0", "fflate": "^0.8.0", "flatted": "^3.2.7", @@ -2288,6 +2288,52 @@ "vitest": ">=0.30.1 <1" } }, + "node_modules/@vitest/ui/node_modules/@vitest/utils": { + "version": "0.34.7", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.7.tgz", + "integrity": "sha512-ziAavQLpCYS9sLOorGrFFKmy2gnfiNU0ZJ15TsMz/K92NAPS/rp9K4z6AJQQk5Y8adCy4Iwpxy7pQumQ/psnRg==", + "dev": true, + "dependencies": { + "diff-sequences": "^29.4.3", + "loupe": "^2.3.6", + "pretty-format": "^29.5.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/ui/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@vitest/ui/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@vitest/ui/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "node_modules/@vitest/utils": { "version": "0.34.6", "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.6.tgz", @@ -3667,15 +3713,15 @@ } }, "node_modules/eslint": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.54.0.tgz", - "integrity": "sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==", + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", + "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.3", - "@eslint/js": "8.54.0", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.55.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -4013,9 +4059,9 @@ } }, "node_modules/eslint-config-prettier": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", - "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -6940,9 +6986,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true, "funding": [ { @@ -7535,9 +7581,9 @@ } }, "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "version": "8.4.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", + "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", "dev": true, "funding": [ { @@ -7554,7 +7600,7 @@ } ], "dependencies": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -8650,9 +8696,9 @@ } }, "node_modules/tailwindcss": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.5.tgz", - "integrity": "sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.6.tgz", + "integrity": "sha512-AKjF7qbbLvLaPieoKeTjG1+FyNZT6KaJMJPFeQyLfIp7l82ggH1fbHJSsYIvnbTFQOlkh+gBYpyby5GT1LIdLw==", "dev": true, "dependencies": { "@alloc/quick-lru": "^5.2.0", @@ -9214,9 +9260,9 @@ } }, "node_modules/vite": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz", - "integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.1.tgz", + "integrity": "sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==", "dev": true, "dependencies": { "esbuild": "^0.18.10", @@ -10248,9 +10294,9 @@ "dev": true }, "@eslint/eslintrc": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz", - "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -10282,9 +10328,9 @@ } }, "@eslint/js": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.54.0.tgz", - "integrity": "sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==", + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", + "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==", "dev": true }, "@humanwhocodes/config-array": { @@ -10616,9 +10662,9 @@ } }, "@testing-library/jest-dom": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.1.4.tgz", - "integrity": "sha512-wpoYrCYwSZ5/AxcrjLxJmCU6I5QAJXslEeSiMQqaWmP2Kzpd1LvF/qxmAIW2qposULGWq2gw30GgVNFLSc2Jnw==", + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.1.5.tgz", + "integrity": "sha512-3y04JLW+EceVPy2Em3VwNr95dOKqA8DhR0RJHhHKDZNYXcVXnEK7WIrpj4eYU8SVt/qYZ2aRWt/WgQ+grNES8g==", "dev": true, "requires": { "@adobe/css-tools": "^4.3.1", @@ -10821,16 +10867,16 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.11.0.tgz", - "integrity": "sha512-uXnpZDc4VRjY4iuypDBKzW1rz9T5YBBK0snMn8MaTSNd2kMlj50LnLBABELjJiOL5YHk7ZD8hbSpI9ubzqYI0w==", + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.13.2.tgz", + "integrity": "sha512-3+9OGAWHhk4O1LlcwLBONbdXsAhLjyCFogJY/cWy2lxdVJ2JrcTF2pTGMaLl2AE7U1l31n8Py4a8bx5DLf/0dQ==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.11.0", - "@typescript-eslint/type-utils": "6.11.0", - "@typescript-eslint/utils": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0", + "@typescript-eslint/scope-manager": "6.13.2", + "@typescript-eslint/type-utils": "6.13.2", + "@typescript-eslint/utils": "6.13.2", + "@typescript-eslint/visitor-keys": "6.13.2", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -10944,54 +10990,54 @@ } }, "@typescript-eslint/parser": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.11.0.tgz", - "integrity": "sha512-+whEdjk+d5do5nxfxx73oanLL9ghKO3EwM9kBCkUtWMRwWuPaFv9ScuqlYfQ6pAD6ZiJhky7TZ2ZYhrMsfMxVQ==", + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.13.2.tgz", + "integrity": "sha512-MUkcC+7Wt/QOGeVlM8aGGJZy1XV5YKjTpq9jK6r6/iLsGXhBVaGP5N0UYvFsu9BFlSpwY9kMretzdBH01rkRXg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "6.11.0", - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/typescript-estree": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0", + "@typescript-eslint/scope-manager": "6.13.2", + "@typescript-eslint/types": "6.13.2", + "@typescript-eslint/typescript-estree": "6.13.2", + "@typescript-eslint/visitor-keys": "6.13.2", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.11.0.tgz", - "integrity": "sha512-0A8KoVvIURG4uhxAdjSaxy8RdRE//HztaZdG8KiHLP8WOXSk0vlF7Pvogv+vlJA5Rnjj/wDcFENvDaHb+gKd1A==", + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.13.2.tgz", + "integrity": "sha512-CXQA0xo7z6x13FeDYCgBkjWzNqzBn8RXaE3QVQVIUm74fWJLkJkaHmHdKStrxQllGh6Q4eUGyNpMe0b1hMkXFA==", "dev": true, "requires": { - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0" + "@typescript-eslint/types": "6.13.2", + "@typescript-eslint/visitor-keys": "6.13.2" } }, "@typescript-eslint/type-utils": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.11.0.tgz", - "integrity": "sha512-nA4IOXwZtqBjIoYrJcYxLRO+F9ri+leVGoJcMW1uqr4r1Hq7vW5cyWrA43lFbpRvQ9XgNrnfLpIkO3i1emDBIA==", + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.13.2.tgz", + "integrity": "sha512-Qr6ssS1GFongzH2qfnWKkAQmMUyZSyOr0W54nZNU1MDfo+U4Mv3XveeLZzadc/yq8iYhQZHYT+eoXJqnACM1tw==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "6.11.0", - "@typescript-eslint/utils": "6.11.0", + "@typescript-eslint/typescript-estree": "6.13.2", + "@typescript-eslint/utils": "6.13.2", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" } }, "@typescript-eslint/types": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.11.0.tgz", - "integrity": "sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==", + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.13.2.tgz", + "integrity": "sha512-7sxbQ+EMRubQc3wTfTsycgYpSujyVbI1xw+3UMRUcrhSy+pN09y/lWzeKDbvhoqcRbHdc+APLs/PWYi/cisLPg==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.11.0.tgz", - "integrity": "sha512-Aezzv1o2tWJwvZhedzvD5Yv7+Lpu1by/U1LZ5gLc4tCx8jUmuSCMioPFRjliN/6SJIvY6HpTtJIWubKuYYYesQ==", + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.13.2.tgz", + "integrity": "sha512-SuD8YLQv6WHnOEtKv8D6HZUzOub855cfPnPMKvdM/Bh1plv1f7Q/0iFUDLKKlxHcEstQnaUU4QZskgQq74t+3w==", "dev": true, "requires": { - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0", + "@typescript-eslint/types": "6.13.2", + "@typescript-eslint/visitor-keys": "6.13.2", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -11011,17 +11057,17 @@ } }, "@typescript-eslint/utils": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.11.0.tgz", - "integrity": "sha512-p23ibf68fxoZy605dc0dQAEoUsoiNoP3MD9WQGiHLDuTSOuqoTsa4oAy+h3KDkTcxbbfOtUjb9h3Ta0gT4ug2g==", + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.13.2.tgz", + "integrity": "sha512-b9Ptq4eAZUym4idijCRzl61oPCwwREcfDI8xGk751Vhzig5fFZR9CyzDz4Sp/nxSLBYxUPyh4QdIDqWykFhNmQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.11.0", - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/typescript-estree": "6.11.0", + "@typescript-eslint/scope-manager": "6.13.2", + "@typescript-eslint/types": "6.13.2", + "@typescript-eslint/typescript-estree": "6.13.2", "semver": "^7.5.4" }, "dependencies": { @@ -11037,12 +11083,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.11.0.tgz", - "integrity": "sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==", + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.13.2.tgz", + "integrity": "sha512-OGznFs0eAQXJsp+xSd6k/O1UbFi/K/L7WjqeRoFE7vadjAF9y0uppXhYNQNEqygjou782maGClOoZwPqF0Drlw==", "dev": true, "requires": { - "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/types": "6.13.2", "eslint-visitor-keys": "^3.4.1" } }, @@ -11215,18 +11261,54 @@ } }, "@vitest/ui": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-0.34.6.tgz", - "integrity": "sha512-/fxnCwGC0Txmr3tF3BwAbo3v6U2SkBTGR9UB8zo0Ztlx0BTOXHucE0gDHY7SjwEktCOHatiGmli9kZD6gYSoWQ==", + "version": "0.34.7", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-0.34.7.tgz", + "integrity": "sha512-iizUu9R5Rsvsq8FtdJ0suMqEfIsIIzziqnasMHe4VH8vG+FnZSA3UAtCHx6rLeRupIFVAVg7bptMmuvMcsn8WQ==", "dev": true, "requires": { - "@vitest/utils": "0.34.6", + "@vitest/utils": "0.34.7", "fast-glob": "^3.3.0", "fflate": "^0.8.0", "flatted": "^3.2.7", "pathe": "^1.1.1", "picocolors": "^1.0.0", "sirv": "^2.0.3" + }, + "dependencies": { + "@vitest/utils": { + "version": "0.34.7", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.7.tgz", + "integrity": "sha512-ziAavQLpCYS9sLOorGrFFKmy2gnfiNU0ZJ15TsMz/K92NAPS/rp9K4z6AJQQk5Y8adCy4Iwpxy7pQumQ/psnRg==", + "dev": true, + "requires": { + "diff-sequences": "^29.4.3", + "loupe": "^2.3.6", + "pretty-format": "^29.5.0" + } + }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + } } }, "@vitest/utils": { @@ -12247,15 +12329,15 @@ "dev": true }, "eslint": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.54.0.tgz", - "integrity": "sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==", + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", + "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.3", - "@eslint/js": "8.54.0", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.55.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -12539,9 +12621,9 @@ } }, "eslint-config-prettier": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", - "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, "requires": {} }, @@ -14560,9 +14642,9 @@ } }, "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true }, "natural-compare": { @@ -14983,12 +15065,12 @@ } }, "postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "version": "8.4.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", + "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", "dev": true, "requires": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } @@ -15789,9 +15871,9 @@ } }, "tailwindcss": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.5.tgz", - "integrity": "sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.6.tgz", + "integrity": "sha512-AKjF7qbbLvLaPieoKeTjG1+FyNZT6KaJMJPFeQyLfIp7l82ggH1fbHJSsYIvnbTFQOlkh+gBYpyby5GT1LIdLw==", "dev": true, "requires": { "@alloc/quick-lru": "^5.2.0", @@ -16229,9 +16311,9 @@ } }, "vite": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz", - "integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.1.tgz", + "integrity": "sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==", "dev": true, "requires": { "esbuild": "^0.18.10", diff --git a/web/package.json b/web/package.json index 5174d9375..8d84fd664 100644 --- a/web/package.json +++ b/web/package.json @@ -55,7 +55,7 @@ "postcss": "^8.4.29", "prettier": "^3.0.3", "tailwindcss": "^3.3.2", - "typescript": "^5.0.4", + "typescript": "^5.2.2", "vite": "^4.4.9", "vitest": "^0.34.3" } From a4f5ad3a94fd6326e2f321e9a7d8c31af696e2f4 Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Thu, 7 Dec 2023 19:08:35 -0600 Subject: [PATCH 19/41] Proxy websockets in devcontainers (#8886) * proxy websockets * remove whitespace --- web/vite.config.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/web/vite.config.ts b/web/vite.config.ts index 930c0f36e..ee33d491a 100644 --- a/web/vite.config.ts +++ b/web/vite.config.ts @@ -19,7 +19,16 @@ export default defineConfig({ }, '/exports': { target: 'http://localhost:5000' - } + }, + '/ws': { + target: 'ws://localhost:5000', + ws: true, + }, + '/live': { + target: 'ws://localhost:5000', + changeOrigin: true, + ws: true, + }, } }, plugins: [ @@ -43,4 +52,4 @@ export default defineConfig({ restoreMocks: true, globals: true, }, -}); +}); \ No newline at end of file From e51240676455f28e767318d8571f8182edb14c60 Mon Sep 17 00:00:00 2001 From: Matti Hiljanen <170205+qvr@users.noreply.github.com> Date: Fri, 8 Dec 2023 15:30:22 +0200 Subject: [PATCH 20/41] Fix inertia calculation check (#8890) --- frigate/object_processing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frigate/object_processing.py b/frigate/object_processing.py index b0e5b9a52..f7888441d 100644 --- a/frigate/object_processing.py +++ b/frigate/object_processing.py @@ -195,7 +195,7 @@ class TrackedObject: self.zone_presence[name] = zone_score + 1 # an object is only considered present in a zone if it has a zone inertia of 3+ - if zone_score >= zone.inertia: + if self.zone_presence[name] >= zone.inertia: current_zones.append(name) if name not in self.entered_zones: From ee7eaff96534e0da51462a2c55f2e75ac980b3c3 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Tue, 12 Dec 2023 03:47:40 -0700 Subject: [PATCH 21/41] Don't fail if NaN is returned for segment duration (#8923) --- frigate/util/services.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/frigate/util/services.py b/frigate/util/services.py index 94946434b..28421cef3 100644 --- a/frigate/util/services.py +++ b/frigate/util/services.py @@ -371,7 +371,7 @@ def vainfo_hwaccel(device_name: Optional[str] = None) -> sp.CompletedProcess: return sp.run(ffprobe_cmd, capture_output=True) -async def get_video_properties(url, get_duration=False): +async def get_video_properties(url, get_duration=False) -> dict[str, any]: async def calculate_duration(video: Optional[any]) -> float: duration = None @@ -405,7 +405,10 @@ async def get_video_properties(url, get_duration=False): result = None if result: - duration = float(result.strip()) + try: + duration = float(result.strip()) + except ValueError: + duration = -1 else: duration = -1 From ca4e0dbc7525516a7db5b6dec2a23dd900d82631 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Tue, 12 Dec 2023 03:48:09 -0700 Subject: [PATCH 22/41] Fix ffmpeg input arg parsing (#8924) --- frigate/events/audio.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frigate/events/audio.py b/frigate/events/audio.py index 3bc80c920..ed457adf1 100644 --- a/frigate/events/audio.py +++ b/frigate/events/audio.py @@ -43,9 +43,9 @@ def get_ffmpeg_command(ffmpeg: FfmpegConfig) -> list[str]: ffmpeg_input: CameraInput = [i for i in ffmpeg.inputs if "audio" in i.roles][0] input_args = get_ffmpeg_arg_list(ffmpeg.global_args) + ( parse_preset_input(ffmpeg_input.input_args, 1) - or ffmpeg_input.input_args + or get_ffmpeg_arg_list(ffmpeg_input.input_args) or parse_preset_input(ffmpeg.input_args, 1) - or ffmpeg.input_args + or get_ffmpeg_arg_list(ffmpeg.input_args) ) return ( ["ffmpeg", "-vn"] From 64bee7a64fd24faca4b4bb3e099e224e9e2cc9f3 Mon Sep 17 00:00:00 2001 From: FinnakaLite <51403094+FinnakaLite@users.noreply.github.com> Date: Tue, 12 Dec 2023 11:48:42 +0100 Subject: [PATCH 23/41] Included caution about Snapcraft docker issues. (#8925) * Included caution about Snapcraft docker issues. * Accepted format suggestion from NickM-27 Co-authored-by: Nicolas Mowen --------- Co-authored-by: Nicolas Mowen --- docs/docs/frigate/installation.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/docs/frigate/installation.md b/docs/docs/frigate/installation.md index 93b2cfe9c..fcdaa68ba 100644 --- a/docs/docs/frigate/installation.md +++ b/docs/docs/frigate/installation.md @@ -47,6 +47,12 @@ services: ... ``` +:::caution + +Users of the Snapcraft build of Docker cannot use storage locations outside your $HOME folder. + +::: + ### Calculating required shm-size Frigate utilizes shared memory to store frames during processing. The default `shm-size` provided by Docker is **64MB**. From e390533760704e5204299053d55b197b7a163807 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Tue, 12 Dec 2023 16:21:06 -0700 Subject: [PATCH 24/41] Make recording docs more clear about 24/7 recording (#8931) * Make recording docs more clear about 24/7 recording * Add note about partial days * remove `X` --- docs/docs/configuration/record.md | 39 ++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/docs/docs/configuration/record.md b/docs/docs/configuration/record.md index 5a505c6d1..a14135c9e 100644 --- a/docs/docs/configuration/record.md +++ b/docs/docs/configuration/record.md @@ -13,7 +13,30 @@ H265 recordings can be viewed in Chrome 108+, Edge and Safari only. All other br As of Frigate 0.12 if there is less than an hour left of storage, the oldest 2 hours of recordings will be deleted. -## What if I don't want 24/7 recordings? +## Configuring Recording Retention + +Frigate supports both 24/7 and event based recordings with separate retention modes and retention periods. + +:::tip + +Retention configs support decimals meaning they can be configured to retain `0.5` days, for example. + +::: + +### 24/7 Recording + +The number of days to retain 24/7 recordings can be set via the following config where X is a number, by default 24/7 recording is disabled. + +```yaml +record: + enabled: True + retain: + days: 1 # <- number of days to keep 24/7 recordings +``` + +24/7 recording supports different retention modes [which are described below](#what-do-the-different-retain-modes-mean) + +### Event Recording If you only used clips in previous versions with recordings disabled, you can use the following config to get the same behavior. This is also the default behavior when recordings are enabled. @@ -22,17 +45,11 @@ record: enabled: True events: retain: - default: 10 + default: 10 # <- number of days to keep event recordings ``` This configuration will retain recording segments that overlap with events and have active tracked objects for 10 days. Because multiple events can reference the same recording segments, this avoids storing duplicate footage for overlapping events and reduces overall storage needs. -When `retain -> days` is set to `0`, segments will be deleted from the cache if no events are in progress. - -## Can I have "24/7" recordings, but only at certain times? - -Using Frigate UI, HomeAssistant, or MQTT, cameras can be automated to only record in certain situations or at certain times. - **WARNING**: Recordings still must be enabled in the config. If a camera has recordings disabled in the config, enabling via the methods listed above will have no effect. ## What do the different retain modes mean? @@ -81,9 +98,13 @@ record: car: 7 ``` +## Can I have "24/7" recordings, but only at certain times? + +Using Frigate UI, HomeAssistant, or MQTT, cameras can be automated to only record in certain situations or at certain times. + ## How do I export recordings? -The export page in the Frigate WebUI allows for exporting real time clips with a designated start and stop time as well as exporting a timelapse for a designated start and stop time. These exports can take a while so it is important to leave the file until it is no longer in progress. +The export page in the Frigate WebUI allows for exporting real time clips with a designated start and stop time as well as exporting a time-lapse for a designated start and stop time. These exports can take a while so it is important to leave the file until it is no longer in progress. ## Syncing Recordings With Disk From c35c7da82a23520478ca56dd469fc28dcf1e1e5a Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Fri, 15 Dec 2023 16:25:21 -0700 Subject: [PATCH 25/41] Don't fail if deepstack detector times out (#8979) --- frigate/detectors/plugins/deepstack.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/frigate/detectors/plugins/deepstack.py b/frigate/detectors/plugins/deepstack.py index fd79e27d0..311972393 100644 --- a/frigate/detectors/plugins/deepstack.py +++ b/frigate/detectors/plugins/deepstack.py @@ -49,12 +49,18 @@ class DeepStack(DetectionApi): image.save(output, format="JPEG") image_bytes = output.getvalue() data = {"api_key": self.api_key} - response = requests.post( - self.api_url, - data=data, - files={"image": image_bytes}, - timeout=self.api_timeout, - ) + + try: + response = requests.post( + self.api_url, + data=data, + files={"image": image_bytes}, + timeout=self.api_timeout, + ) + except requests.exceptions.RequestException: + logger.error("Error calling deepstack API") + return np.zeros((20, 6), np.float32) + response_json = response.json() detections = np.zeros((20, 6), np.float32) if response_json.get("predictions") is None: From 7b71c21c12c9ccb1d92580145fde92ec76a71d93 Mon Sep 17 00:00:00 2001 From: kaydee123 Date: Mon, 25 Dec 2023 01:25:07 +0530 Subject: [PATCH 26/41] Update reverse_proxy.md (#9070) Spelling mistake --- docs/docs/guides/reverse_proxy.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/guides/reverse_proxy.md b/docs/docs/guides/reverse_proxy.md index 165b4d517..479df53e8 100644 --- a/docs/docs/guides/reverse_proxy.md +++ b/docs/docs/guides/reverse_proxy.md @@ -125,7 +125,7 @@ This section points to your SSL files, the example below shows locations to a de ### Setup reverse proxy settings -Thhe settings below enabled connection upgrade, sets up logging (optional) and proxies everything from the `/` context to the docker host and port specified earlier in the configuration +The settings below enabled connection upgrade, sets up logging (optional) and proxies everything from the `/` context to the docker host and port specified earlier in the configuration ``` proxy_set_header Upgrade $http_upgrade; From 49814b34d38730078e8412c924959c8fa06b6ac4 Mon Sep 17 00:00:00 2001 From: Nicholas Page Date: Sun, 31 Dec 2023 05:38:29 -0800 Subject: [PATCH 27/41] Update Jetson ffmpeg patch for Jetpack 5.1.2 compatibility (#8914) --- docker/tensorrt/build_jetson_ffmpeg.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker/tensorrt/build_jetson_ffmpeg.sh b/docker/tensorrt/build_jetson_ffmpeg.sh index 8c532ebc3..f4e55c2bb 100755 --- a/docker/tensorrt/build_jetson_ffmpeg.sh +++ b/docker/tensorrt/build_jetson_ffmpeg.sh @@ -23,8 +23,8 @@ else fi tar xaf jetson_multimedia_api.tbz2 -C / && rm jetson_multimedia_api.tbz2 -wget -q https://github.com/madsciencetist/jetson-ffmpeg/archive/refs/heads/master.zip -unzip master.zip && rm master.zip && cd jetson-ffmpeg-master +wget -q https://github.com/AndBobsYourUncle/jetson-ffmpeg/archive/9c17b09.zip -O jetson-ffmpeg.zip +unzip jetson-ffmpeg.zip && rm jetson-ffmpeg.zip && mv jetson-ffmpeg-* jetson-ffmpeg && cd jetson-ffmpeg LD_LIBRARY_PATH=$(pwd)/stubs:$LD_LIBRARY_PATH # tegra multimedia libs aren't available in image, so use stubs for ffmpeg build mkdir build cd build @@ -42,7 +42,7 @@ cd ../ && rm -rf nv-codec-headers-master # Build ffmpeg with nvmpi patch wget -q https://ffmpeg.org/releases/ffmpeg-6.0.tar.xz tar xaf ffmpeg-*.tar.xz && rm ffmpeg-*.tar.xz && cd ffmpeg-* -patch -p1 < ../jetson-ffmpeg-master/ffmpeg_patches/ffmpeg6.0_nvmpi.patch +patch -p1 < ../jetson-ffmpeg/ffmpeg_patches/ffmpeg6.0_nvmpi.patch export PKG_CONFIG_PATH=$INSTALL_PREFIX/lib/pkgconfig # enable Jetson codecs but disable dGPU codecs ./configure --cc='ccache gcc' --cxx='ccache g++' \ From 8e419132eae4e841a365544e43b1f67dbcdea52f Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Wed, 3 Jan 2024 07:30:25 -0600 Subject: [PATCH 28/41] Clean user / pass from stats command line (#9189) --- frigate/util/services.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frigate/util/services.py b/frigate/util/services.py index 28421cef3..ef92b3153 100644 --- a/frigate/util/services.py +++ b/frigate/util/services.py @@ -14,7 +14,7 @@ import cv2 import psutil import py3nvml.py3nvml as nvml -from frigate.util.builtin import escape_special_characters +from frigate.util.builtin import clean_camera_user_pass, escape_special_characters logger = logging.getLogger(__name__) @@ -134,7 +134,7 @@ def get_cpu_stats() -> dict[str, dict]: "cpu": str(cpu_percent), "cpu_average": str(round(cpu_average_usage, 2)), "mem": f"{mem_pct}", - "cmdline": " ".join(cmdline), + "cmdline": clean_camera_user_pass(" ".join(cmdline)), } except Exception: continue From 86cd97609d691418d15163f90246e6b7f0b1080c Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Wed, 3 Jan 2024 17:39:30 -0600 Subject: [PATCH 29/41] Remove mention of restream role from docs (#9176) --- docs/docs/configuration/restream.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/configuration/restream.md b/docs/docs/configuration/restream.md index 23c09b2d9..15fddb45c 100644 --- a/docs/docs/configuration/restream.md +++ b/docs/docs/configuration/restream.md @@ -40,7 +40,7 @@ go2rtc: ## RTMP (Deprecated) -In previous Frigate versions RTMP was used for re-streaming. RTMP has disadvantages however including being incompatible with H.265, high bitrates, and certain audio codecs. RTMP is deprecated and it is recommended to move to the new restream role. +In previous Frigate versions RTMP was used for re-streaming. RTMP has disadvantages however including being incompatible with H.265, high bitrates, and certain audio codecs. RTMP is deprecated and it is recommended use the built in go2rtc config for restreaming. ## Reduce Connections To Camera From 4c1d34f0e9c41692b7cce737ba8f4bfe4145a53b Mon Sep 17 00:00:00 2001 From: Hydromel Victor Doledji Date: Wed, 3 Jan 2024 23:39:51 +0000 Subject: [PATCH 30/41] update docs to clarify variable substitution in go2rtc (#9181) * update docs to clarify variable substitution in go2rtc * update to complet * cleanup spacing --------- Co-authored-by: Nicolas Mowen --- docs/docs/configuration/index.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/docs/configuration/index.md b/docs/docs/configuration/index.md index 86f5174ae..6fc7873f2 100644 --- a/docs/docs/configuration/index.md +++ b/docs/docs/configuration/index.md @@ -47,6 +47,13 @@ onvif: password: "{FRIGATE_RTSP_PASSWORD}" ``` +```yaml +go2rtc: + rtsp: + username: "{FRIGATE_GO2RTC_RTSP_USERNAME}" + password: "{FRIGATE_GO2RTC_RTSP_PASSWORD}" +``` + ### Full configuration reference: :::caution From 66701b9cf9bd75fa2d33bdb77052d0fb12115656 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Wed, 3 Jan 2024 17:40:43 -0600 Subject: [PATCH 31/41] note that only 5MP reolink cameras support the recommended config (#9190) * Make note that only 5MP and lower reolink cameras support the recommended config * clarify --- docs/docs/configuration/camera_specific.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/docs/configuration/camera_specific.md b/docs/docs/configuration/camera_specific.md index b9b2fefb9..7c1fe4f84 100644 --- a/docs/docs/configuration/camera_specific.md +++ b/docs/docs/configuration/camera_specific.md @@ -105,6 +105,12 @@ If available, recommended settings are: According to [this discussion](https://github.com/blakeblackshear/frigate/issues/3235#issuecomment-1135876973), the http video streams seem to be the most reliable for Reolink. +:::caution + +The below configuration only works for reolink cameras with stream resolution of 5MP or lower, 8MP+ cameras need to use RTSP as http-flv is not supported in this case. + +::: + ```yaml go2rtc: streams: From c5ccc0fb08cdcfd35d2dae534724103bfb7c82a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Lindh=C3=A9?= Date: Thu, 4 Jan 2024 00:58:40 +0100 Subject: [PATCH 32/41] Fix typo: an environment variables (#9157) --- docs/docs/configuration/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/configuration/index.md b/docs/docs/configuration/index.md index 6fc7873f2..8d7547b72 100644 --- a/docs/docs/configuration/index.md +++ b/docs/docs/configuration/index.md @@ -77,11 +77,11 @@ mqtt: # NOTE: must be unique if you are running multiple instances client_id: frigate # Optional: user - # NOTE: MQTT user can be specified with an environment variables or docker secrets that must begin with 'FRIGATE_'. + # NOTE: MQTT user can be specified with an environment variable or docker secrets that must begin with 'FRIGATE_'. # e.g. user: '{FRIGATE_MQTT_USER}' user: mqtt_user # Optional: password - # NOTE: MQTT password can be specified with an environment variables or docker secrets that must begin with 'FRIGATE_'. + # NOTE: MQTT password can be specified with an environment variable or docker secrets that must begin with 'FRIGATE_'. # e.g. password: '{FRIGATE_MQTT_PASSWORD}' password: password # Optional: tls_ca_certs for enabling TLS using self-signed certs (default: None) From 487c626e00fde9211d3dfcbad6143132d0e3878a Mon Sep 17 00:00:00 2001 From: danielszilagyi <76160997+danielszilagyi@users.noreply.github.com> Date: Mon, 22 Jan 2024 06:07:38 +0100 Subject: [PATCH 33/41] Mention NVR setup (#9404) --- docs/docs/configuration/camera_specific.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/docs/docs/configuration/camera_specific.md b/docs/docs/configuration/camera_specific.md index 7c1fe4f84..96299c7c4 100644 --- a/docs/docs/configuration/camera_specific.md +++ b/docs/docs/configuration/camera_specific.md @@ -105,6 +105,9 @@ If available, recommended settings are: According to [this discussion](https://github.com/blakeblackshear/frigate/issues/3235#issuecomment-1135876973), the http video streams seem to be the most reliable for Reolink. +Cameras connected via a Reolink NVR can be connected with the http stream, use `channel[0..15]` in the stream url for the additional channels. +The setup of main stream can be also done via RTSP, but isn't always reliable on all hardware versions. The example configuration is working with the oldest HW version RLN16-410 device with multiple types of cameras. + :::caution The below configuration only works for reolink cameras with stream resolution of 5MP or lower, 8MP+ cameras need to use RTSP as http-flv is not supported in this case. @@ -118,6 +121,11 @@ go2rtc: - "ffmpeg:http://reolink_ip/flv?port=1935&app=bcs&stream=channel0_main.bcs&user=username&password=password#video=copy#audio=copy#audio=opus" your_reolink_camera_sub: - "ffmpeg:http://reolink_ip/flv?port=1935&app=bcs&stream=channel0_ext.bcs&user=username&password=password" + your_reolink_camera_via_nvr: + - "ffmpeg:http://reolink_nvr_ip/flv?port=1935&app=bcs&stream=channel3_main.bcs&user=username&password=password" # channel numbers are 0-15 + - "ffmpeg:your_reolink_camera_via_nvr#audio=aac" + your_reolink_camera_via_nvr_sub: + - "ffmpeg:http://reolink_nvr_ip/flv?port=1935&app=bcs&stream=channel3_ext.bcs&user=username&password=password" cameras: your_reolink_camera: @@ -131,6 +139,17 @@ cameras: input_args: preset-rtsp-restream roles: - detect + reolink_via_nvr: + ffmpeg: + inputs: + - path: rtsp://127.0.0.1:8554/your_reolink_camera_via_nvr?video=copy&audio=aac + input_args: preset-rtsp-restream + roles: + - record + - path: rtsp://127.0.0.1:8554/your_reolink_camera_via_nvr_sub?video=copy + input_args: preset-rtsp-restream + roles: + - detect ``` #### Reolink Doorbell From 346524c6602abee5ab00ee007f44389a8452fd60 Mon Sep 17 00:00:00 2001 From: Alex Errant <109672176+AlexErrant@users.noreply.github.com> Date: Sun, 21 Jan 2024 23:08:31 -0600 Subject: [PATCH 34/41] Add `ghcr.io/blakeblackshear/frigate:stable-tensorrt` example (#9383) --- docs/docs/configuration/detectors.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/configuration/detectors.md b/docs/docs/configuration/detectors.md index 83291605f..fa2fde345 100644 --- a/docs/docs/configuration/detectors.md +++ b/docs/docs/configuration/detectors.md @@ -168,7 +168,7 @@ volumes: ## NVidia TensorRT Detector -NVidia GPUs may be used for object detection using the TensorRT libraries. Due to the size of the additional libraries, this detector is only provided in images with the `-tensorrt` tag suffix. This detector is designed to work with Yolo models for object detection. +NVidia GPUs may be used for object detection using the TensorRT libraries. Due to the size of the additional libraries, this detector is only provided in images with the `-tensorrt` tag suffix, e.g. `ghcr.io/blakeblackshear/frigate:stable-tensorrt`. This detector is designed to work with Yolo models for object detection. ### Minimum Hardware Support From 700c0fb41092dfeb40c8ba6b45dbfad8120da67f Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Fri, 26 Jan 2024 05:13:39 -0700 Subject: [PATCH 35/41] Create glossary for commonly used frigate terms (#9356) * Add glossary with commonly used terms for frigate * Link back to full docs pages * Add glossary to sidebar * Clarifications and grammar fixes Co-authored-by: Blake Blackshear --------- Co-authored-by: Blake Blackshear --- docs/docs/frigate/glossary.md | 58 +++++++++++++++++++++++++++++++++++ docs/sidebars.js | 3 +- 2 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 docs/docs/frigate/glossary.md diff --git a/docs/docs/frigate/glossary.md b/docs/docs/frigate/glossary.md new file mode 100644 index 000000000..5e31f4485 --- /dev/null +++ b/docs/docs/frigate/glossary.md @@ -0,0 +1,58 @@ +--- +id: glossary +title: Glossary +--- + +The glossary explains terms commonly used in Frigate's documentation. + +## Bounding Box + +A box returned from the object detection model that outlines an object in the frame. These have multiple colors depending on object type in the debug live view. + +## Event + +The time period starting when a tracked object entered the frame and ending when it left the frame, including any time that the object remained still. Events are saved when it is considered a [true positive](#threshold) and meets the requirements for a snapshot or recording to be saved. + +## False Positive + +An incorrect detection of an object type. For example a dog being detected as a person, a chair being detected as a dog, etc. A person being detected in an area you want to ignore is not a false positive. + +## Mask + +There are two types of masks in Frigate. [See the mask docs for more info](/configuration/masks) + +### Motion Mask + +Motion masks prevent detection of [motion](#motion) in masked areas from triggering Frigate to run object detection, but do not prevent objects from being detected if object detection runs due to motion in nearby areas. For example: camera timestamps, skies, the tops of trees, etc. + +### Object Mask + +Object filter masks drop any bounding boxes where the bottom center (overlap doesn't matter) is in the masked area. It forces them to be considered a [false positive](#false_positive) so that they are ignored. + +## Min Score + +The lowest score that an object can be detected with during tracking, any detection with a lower score will be assumed to be a false positive + +## Motion + +When pixels in the current camera frame are different than previous frames. When many nearby pixels are different in the current frame they grouped together and indicated with a red motion box in the live debug view. [See the motion detection docs for more info](/configuration/motion_detection) + +## Region + +A portion of the camera frame that is sent to object detection, regions can be sent due to motion, active objects, or occasionally for stationary objects. These are represented by green boxes in the debug live view. + +## Snapshot Score + +The score shown in a snapshot is the score of that object at that specific moment in time. + +## Threshold + +The threshold is the median score that an object must reach in order to be considered a true positive. + +## Top Score + +The top score for an object is the highest median score for an object. + +## Zone + +Zones are areas of interest, zones can be used for notifications and for limiting the areas where Frigate will create an [event](#event). [See the zone docs for more info](/configuration/zones) \ No newline at end of file diff --git a/docs/sidebars.js b/docs/sidebars.js index 5a71ebfab..af79fea47 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -6,6 +6,7 @@ module.exports = { "frigate/installation", "frigate/camera_setup", "frigate/video_pipeline", + "frigate/glossary", ], Guides: [ "guides/getting_started", @@ -61,7 +62,7 @@ module.exports = { ], "Frigate+": ["plus/index"], Troubleshooting: [ - "troubleshooting/faqs", + "troubleshooting/faqs", "troubleshooting/recordings", "troubleshooting/edgetpu", ], From 393f44aac68f46a18ce447bb5645bc43768b7cf3 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Fri, 26 Jan 2024 05:47:02 -0700 Subject: [PATCH 36/41] Use continuous instead of 24/7 (#9329) --- docs/docs/configuration/record.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/docs/configuration/record.md b/docs/docs/configuration/record.md index a14135c9e..f8027369e 100644 --- a/docs/docs/configuration/record.md +++ b/docs/docs/configuration/record.md @@ -15,7 +15,7 @@ As of Frigate 0.12 if there is less than an hour left of storage, the oldest 2 h ## Configuring Recording Retention -Frigate supports both 24/7 and event based recordings with separate retention modes and retention periods. +Frigate supports both continuous and event based recordings with separate retention modes and retention periods. :::tip @@ -23,18 +23,18 @@ Retention configs support decimals meaning they can be configured to retain `0.5 ::: -### 24/7 Recording +### Continuous Recording -The number of days to retain 24/7 recordings can be set via the following config where X is a number, by default 24/7 recording is disabled. +The number of days to retain continuous recordings can be set via the following config where X is a number, by default continuous recording is disabled. ```yaml record: enabled: True retain: - days: 1 # <- number of days to keep 24/7 recordings + days: 1 # <- number of days to keep continuous recordings ``` -24/7 recording supports different retention modes [which are described below](#what-do-the-different-retain-modes-mean) +Continuous recording supports different retention modes [which are described below](#what-do-the-different-retain-modes-mean) ### Event Recording @@ -54,9 +54,9 @@ This configuration will retain recording segments that overlap with events and h ## What do the different retain modes mean? -Frigate saves from the stream with the `record` role in 10 second segments. These options determine which recording segments are kept for 24/7 recording (but can also affect events). +Frigate saves from the stream with the `record` role in 10 second segments. These options determine which recording segments are kept for continuous recording (but can also affect events). -Let's say you have Frigate configured so that your doorbell camera would retain the last **2** days of 24/7 recording. +Let's say you have Frigate configured so that your doorbell camera would retain the last **2** days of continuous recording. - With the `all` option all 48 hours of those two days would be kept and viewable. - With the `motion` option the only parts of those 48 hours would be segments that Frigate detected motion. This is the middle ground option that won't keep all 48 hours, but will likely keep all segments of interest along with the potential for some extra segments. - With the `active_objects` option the only segments that would be kept are those where there was a true positive object that was not considered stationary. @@ -98,7 +98,7 @@ record: car: 7 ``` -## Can I have "24/7" recordings, but only at certain times? +## Can I have "continuous" recordings, but only at certain times? Using Frigate UI, HomeAssistant, or MQTT, cameras can be automated to only record in certain situations or at certain times. From 65c47531f65ba589d932b42d0835dd6967e4864e Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Fri, 26 Jan 2024 06:02:26 -0700 Subject: [PATCH 37/41] Update record docs to mention UTC (#9248) * Update record docs to mention UTC * Update docs/docs/configuration/record.md --------- Co-authored-by: Blake Blackshear --- docs/docs/configuration/record.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/configuration/record.md b/docs/docs/configuration/record.md index f8027369e..9ad68d610 100644 --- a/docs/docs/configuration/record.md +++ b/docs/docs/configuration/record.md @@ -3,7 +3,7 @@ id: record title: Recording --- -Recordings can be enabled and are stored at `/media/frigate/recordings`. The folder structure for the recordings is `YYYY-MM-DD/HH//MM.SS.mp4`. These recordings are written directly from your camera stream without re-encoding. Each camera supports a configurable retention policy in the config. Frigate chooses the largest matching retention value between the recording retention and the event retention when determining if a recording should be removed. +Recordings can be enabled and are stored at `/media/frigate/recordings`. The folder structure for the recordings is `YYYY-MM-DD/HH//MM.SS.mp4` in **UTC time**. These recordings are written directly from your camera stream without re-encoding. Each camera supports a configurable retention policy in the config. Frigate chooses the largest matching retention value between the recording retention and the event retention when determining if a recording should be removed. New recording segments are written from the camera stream to cache, they are only moved to disk if they match the setup recording retention policy. From b1a034fbd4eac5bc6613734b1ceb8ce7955f5678 Mon Sep 17 00:00:00 2001 From: Kevin David Date: Fri, 26 Jan 2024 08:17:50 -0500 Subject: [PATCH 38/41] false_positives.md: expand definition of ratios (#9332) I found this thread pretty helpful: https://github.com/blakeblackshear/frigate/issues/8350#issuecomment-1782863838 I figured it'd be worth including in the docs themselves. Co-authored-by: Blake Blackshear --- docs/docs/guides/false_positives.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/docs/guides/false_positives.md b/docs/docs/guides/false_positives.md index a77e9e9f3..bd095c9eb 100644 --- a/docs/docs/guides/false_positives.md +++ b/docs/docs/guides/false_positives.md @@ -36,7 +36,13 @@ False positives can also be reduced by filtering a detection based on its shape. ### Object Proportions -`min_ratio` and `max_ratio` filter on the ratio of width / height of an objects bounding box and can be used to reduce false positives. For example if a false positive is detected as very tall for a dog which is often wider, a `min_ratio` filter can be used to filter out these false positives. +`min_ratio` and `max_ratio` values are compared against a given detected object's width/height ratio (in pixels). If the ratio is outside this range, the object will be ignored as a false positive. This allows objects that are proportionally too short-and-wide (higher ratio) or too tall-and-narrow (smaller ratio) to be ignored. + +:::info + +Conceptually, a ratio of 1 is a square, 0.5 is a "tall skinny" box, and 2 is a "wide flat" box. If `min_ratio` is 1.0, any object that is taller than it is wide will be ignored. Similarly, if `max_ratio` is 1.0, then any object that is wider than it is tall will be ignored. + +::: ## Other Tools From 64a91f552f26ee134461e24c590350fd75328053 Mon Sep 17 00:00:00 2001 From: leccelecce <24962424+leccelecce@users.noreply.github.com> Date: Fri, 26 Jan 2024 13:18:29 +0000 Subject: [PATCH 39/41] Add info logging at startup if vacuuming database (#9432) --- frigate/app.py | 1 + 1 file changed, 1 insertion(+) diff --git a/frigate/app.py b/frigate/app.py index 1535eeaf6..4a3cf48d6 100644 --- a/frigate/app.py +++ b/frigate/app.py @@ -271,6 +271,7 @@ class FrigateApp: def init_database(self) -> None: def vacuum_db(db: SqliteExtDatabase) -> None: + logger.info("Running database vacuum") db.execute_sql("VACUUM;") try: From d15ab0922b1f155908b439c0155b8a9ae5710df2 Mon Sep 17 00:00:00 2001 From: Blake Blackshear Date: Tue, 30 Jan 2024 06:14:16 -0600 Subject: [PATCH 40/41] Docs updates (#9476) * revamp plus docs * consolidate label guidance * add some common complete config examples * clarify zone presence * bottom center example of mask * update recommended hardware * update nav * update getting started * add openvino example * explain why we track stationary objects * move false positive guide to config folder * fix link * update record and parked car guide * tweaks --- docs/docs/configuration/index.md | 764 ++++-------------- docs/docs/configuration/masks.md | 14 +- .../object_filters.md} | 10 +- docs/docs/configuration/objects.mdx | 9 +- docs/docs/configuration/record.md | 55 ++ docs/docs/configuration/reference.md | 633 +++++++++++++++ docs/docs/configuration/stationary_objects.md | 32 +- docs/docs/configuration/zones.md | 3 + docs/docs/frigate/hardware.md | 12 +- docs/docs/guides/getting_started.md | 10 +- docs/docs/guides/ha_network_storage.md | 5 +- docs/docs/guides/parked_cars.md | 71 ++ docs/docs/guides/stationary_objects.md | 43 - docs/docs/integrations/plus.md | 8 +- docs/docs/plus/faq.md | 28 + docs/docs/plus/first_model.md | 63 ++ docs/docs/plus/improving_model.md | 33 + docs/docs/plus/index.md | 104 +-- docs/sidebars.js | 14 +- docs/static/img/bottom-center-mask.jpg | Bin 0 -> 59385 bytes docs/static/img/bottom-center.jpg | Bin 0 -> 118010 bytes .../img/plus/false-positive-overlap.jpg | Bin 0 -> 22661 bytes docs/static/img/plus/false-positive.jpg | Bin 0 -> 46080 bytes docs/static/img/plus/model-ready-email.jpg | Bin 0 -> 33994 bytes docs/static/img/plus/plus-models.jpg | Bin 0 -> 72853 bytes docs/static/img/plus/send-to-plus.jpg | Bin 0 -> 58675 bytes docs/static/img/plus/submit-to-plus.jpg | Bin 0 -> 64958 bytes docs/static/img/send-to-plus.png | Bin 39870 -> 0 bytes 28 files changed, 1142 insertions(+), 769 deletions(-) rename docs/docs/{guides/false_positives.md => configuration/object_filters.md} (95%) create mode 100644 docs/docs/configuration/reference.md create mode 100644 docs/docs/guides/parked_cars.md delete mode 100644 docs/docs/guides/stationary_objects.md create mode 100644 docs/docs/plus/faq.md create mode 100644 docs/docs/plus/first_model.md create mode 100644 docs/docs/plus/improving_model.md create mode 100644 docs/static/img/bottom-center-mask.jpg create mode 100644 docs/static/img/bottom-center.jpg create mode 100644 docs/static/img/plus/false-positive-overlap.jpg create mode 100644 docs/static/img/plus/false-positive.jpg create mode 100644 docs/static/img/plus/model-ready-email.jpg create mode 100644 docs/static/img/plus/plus-models.jpg create mode 100644 docs/static/img/plus/send-to-plus.jpg create mode 100644 docs/static/img/plus/submit-to-plus.jpg delete mode 100644 docs/static/img/send-to-plus.png diff --git a/docs/docs/configuration/index.md b/docs/docs/configuration/index.md index 8d7547b72..53993af67 100644 --- a/docs/docs/configuration/index.md +++ b/docs/docs/configuration/index.md @@ -1,33 +1,35 @@ --- id: index -title: Frigate Configuration Reference +title: Frigate Configuration --- For Home Assistant Addon installations, the config file needs to be in the root of your Home Assistant config directory (same location as `configuration.yaml`). It can be named `frigate.yaml` or `frigate.yml`, but if both files exist `frigate.yaml` will be preferred and `frigate.yml` will be ignored. For all other installation types, the config file should be mapped to `/config/config.yml` inside the container. -It is recommended to start with a minimal configuration and add to it as described in [this guide](../guides/getting_started.md): +It is recommended to start with a minimal configuration and add to it as described in [this guide](../guides/getting_started.md) and use the built in configuration editor in Frigate's UI which supports validation. ```yaml mqtt: - host: mqtt.server.com + enabled: False + cameras: - back: + dummy_camera: # <--- this will be changed to your actual camera later + enabled: False ffmpeg: inputs: - - path: rtsp://viewer:{FRIGATE_RTSP_PASSWORD}@10.0.10.10:554/cam/realmonitor?channel=1&subtype=2 + - path: rtsp://127.0.0.1:554/rtsp roles: - detect ``` -### VSCode Configuration Schema +## VSCode Configuration Schema VSCode (and VSCode addon) supports the JSON schemas which will automatically validate the config. This can be added by adding `# yaml-language-server: $schema=http://frigate_host:5000/api/config/schema.json` to the top of the config file. `frigate_host` being the IP address of Frigate or `ccab4aaf-frigate` if running in the addon. -### Environment Variable Substitution +## Environment Variable Substitution -Frigate supports the use of environment variables starting with `FRIGATE_` **only** where specifically indicated in the configuration reference below. For example, the following values can be replaced at runtime by using environment variables: +Frigate supports the use of environment variables starting with `FRIGATE_` **only** where specifically indicated in the [reference config](./reference.md). For example, the following values can be replaced at runtime by using environment variables: ```yaml mqtt: @@ -54,631 +56,181 @@ go2rtc: password: "{FRIGATE_GO2RTC_RTSP_PASSWORD}" ``` -### Full configuration reference: +## Common configuration examples -:::caution +Here are some common starter configuration examples. Refer to the [reference config](./reference.md) for detailed information about all the config values. -It is not recommended to copy this full configuration file. Only specify values that are different from the defaults. Configuration options and default values may change in future versions. +### Raspberry Pi Home Assistant Addon with USB Coral -::: +- Single camera with 720p, 5fps stream for detect +- MQTT connected to home assistant mosquitto addon +- Hardware acceleration for decoding video +- USB Coral detector +- Save all video with any detectable motion for 7 days regardless of whether any objects were detected or not +- Continue to keep all video if it was during any event for 30 days +- Save snapshots for 30 days +- Motion mask for the camera timestamp ```yaml mqtt: - # Optional: Enable mqtt server (default: shown below) - enabled: True - # Required: host name - host: mqtt.server.com - # Optional: port (default: shown below) - port: 1883 - # Optional: topic prefix (default: shown below) - # NOTE: must be unique if you are running multiple instances - topic_prefix: frigate - # Optional: client id (default: shown below) - # NOTE: must be unique if you are running multiple instances - client_id: frigate - # Optional: user - # NOTE: MQTT user can be specified with an environment variable or docker secrets that must begin with 'FRIGATE_'. - # e.g. user: '{FRIGATE_MQTT_USER}' - user: mqtt_user - # Optional: password - # NOTE: MQTT password can be specified with an environment variable or docker secrets that must begin with 'FRIGATE_'. - # e.g. password: '{FRIGATE_MQTT_PASSWORD}' - password: password - # Optional: tls_ca_certs for enabling TLS using self-signed certs (default: None) - tls_ca_certs: /path/to/ca.crt - # Optional: tls_client_cert and tls_client key in order to use self-signed client - # certificates (default: None) - # NOTE: certificate must not be password-protected - # do not set user and password when using a client certificate - tls_client_cert: /path/to/client.crt - tls_client_key: /path/to/client.key - # Optional: tls_insecure (true/false) for enabling TLS verification of - # the server hostname in the server certificate (default: None) - tls_insecure: false - # Optional: interval in seconds for publishing stats (default: shown below) - stats_interval: 60 + host: core-mosquitto + user: mqtt-user + password: xxxxxxxxxx -# Optional: Detectors configuration. Defaults to a single CPU detector -detectors: - # Required: name of the detector - detector_name: - # Required: type of the detector - # Frigate provided types include 'cpu', 'edgetpu', 'openvino' and 'tensorrt' (default: shown below) - # Additional detector types can also be plugged in. - # Detectors may require additional configuration. - # Refer to the Detectors configuration page for more information. - type: cpu - -# Optional: Database configuration -database: - # The path to store the SQLite DB (default: shown below) - path: /config/frigate.db - -# Optional: model modifications -model: - # Optional: path to the model (default: automatic based on detector) - path: /edgetpu_model.tflite - # Optional: path to the labelmap (default: shown below) - labelmap_path: /labelmap.txt - # Required: Object detection model input width (default: shown below) - width: 320 - # Required: Object detection model input height (default: shown below) - height: 320 - # Optional: Object detection model input colorspace - # Valid values are rgb, bgr, or yuv. (default: shown below) - input_pixel_format: rgb - # Optional: Object detection model input tensor format - # Valid values are nhwc or nchw (default: shown below) - input_tensor: nhwc - # Optional: Object detection model type, currently only used with the OpenVINO detector - # Valid values are ssd, yolox, yolov5, or yolov8 (default: shown below) - model_type: ssd - # Optional: Label name modifications. These are merged into the standard labelmap. - labelmap: - 2: vehicle - -# Optional: Audio Events Configuration -# NOTE: Can be overridden at the camera level -audio: - # Optional: Enable audio events (default: shown below) - enabled: False - # Optional: Configure the amount of seconds without detected audio to end the event (default: shown below) - max_not_heard: 30 - # Optional: Configure the min rms volume required to run audio detection (default: shown below) - # As a rule of thumb: - # - 200 - high sensitivity - # - 500 - medium sensitivity - # - 1000 - low sensitivity - min_volume: 500 - # Optional: Types of audio to listen for (default: shown below) - listen: - - bark - - fire_alarm - - scream - - speech - - yell - # Optional: Filters to configure detection. - filters: - # Label that matches label in listen config. - speech: - # Minimum score that triggers an audio event (default: shown below) - threshold: 0.8 - -# Optional: logger verbosity settings -logger: - # Optional: Default log verbosity (default: shown below) - default: info - # Optional: Component specific logger overrides - logs: - frigate.event: debug - -# Optional: set environment variables -environment_vars: - EXAMPLE_VAR: value - -# Optional: birdseye configuration -# NOTE: Can (enabled, mode) be overridden at the camera level -birdseye: - # Optional: Enable birdseye view (default: shown below) - enabled: True - # Optional: Restream birdseye via RTSP (default: shown below) - # NOTE: Enabling this will set birdseye to run 24/7 which may increase CPU usage somewhat. - restream: False - # Optional: Width of the output resolution (default: shown below) - width: 1280 - # Optional: Height of the output resolution (default: shown below) - height: 720 - # Optional: Encoding quality of the mpeg1 feed (default: shown below) - # 1 is the highest quality, and 31 is the lowest. Lower quality feeds utilize less CPU resources. - quality: 8 - # Optional: Mode of the view. Available options are: objects, motion, and continuous - # objects - cameras are included if they have had a tracked object within the last 30 seconds - # motion - cameras are included if motion was detected in the last 30 seconds - # continuous - all cameras are included always - mode: objects - -# Optional: ffmpeg configuration -# More information about presets at https://docs.frigate.video/configuration/ffmpeg_presets ffmpeg: - # Optional: global ffmpeg args (default: shown below) - global_args: -hide_banner -loglevel warning -threads 2 - # Optional: global hwaccel args (default: shown below) - # NOTE: See hardware acceleration docs for your specific device - hwaccel_args: [] - # Optional: global input args (default: shown below) - input_args: preset-rtsp-generic - # Optional: global output args - output_args: - # Optional: output args for detect streams (default: shown below) - detect: -threads 2 -f rawvideo -pix_fmt yuv420p - # Optional: output args for record streams (default: shown below) - record: preset-record-generic - # Optional: output args for rtmp streams (default: shown below) - rtmp: preset-rtmp-generic - # Optional: Time in seconds to wait before ffmpeg retries connecting to the camera. (default: shown below) - # If set too low, frigate will retry a connection to the camera's stream too frequently, using up the limited streams some cameras can allow at once - # If set too high, then if a ffmpeg crash or camera stream timeout occurs, you could potentially lose up to a maximum of retry_interval second(s) of footage - # NOTE: this can be a useful setting for Wireless / Battery cameras to reduce how much footage is potentially lost during a connection timeout. - retry_interval: 10 + hwaccel_args: preset-rpi-64-h264 -# Optional: Detect configuration -# NOTE: Can be overridden at the camera level -detect: - # Optional: width of the frame for the input with the detect role (default: use native stream resolution) - width: 1280 - # Optional: height of the frame for the input with the detect role (default: use native stream resolution) - height: 720 - # Optional: desired fps for your camera for the input with the detect role (default: shown below) - # NOTE: Recommended value of 5. Ideally, try and reduce your FPS on the camera. - fps: 5 - # Optional: enables detection for the camera (default: True) - enabled: True - # Optional: Number of consecutive detection hits required for an object to be initialized in the tracker. (default: 1/2 the frame rate) - min_initialized: 2 - # Optional: Number of frames without a detection before Frigate considers an object to be gone. (default: 5x the frame rate) - max_disappeared: 25 - # Optional: Configuration for stationary object tracking - stationary: - # Optional: Frequency for confirming stationary objects (default: same as threshold) - # When set to 1, object detection will run to confirm the object still exists on every frame. - # If set to 10, object detection will run to confirm the object still exists on every 10th frame. - interval: 50 - # Optional: Number of frames without a position change for an object to be considered stationary (default: 10x the frame rate or 10s) - threshold: 50 - # Optional: Define a maximum number of frames for tracking a stationary object (default: not set, track forever) - # This can help with false positives for objects that should only be stationary for a limited amount of time. - # It can also be used to disable stationary object tracking. For example, you may want to set a value for person, but leave - # car at the default. - # WARNING: Setting these values overrides default behavior and disables stationary object tracking. - # There are very few situations where you would want it disabled. It is NOT recommended to - # copy these values from the example config into your config unless you know they are needed. - max_frames: - # Optional: Default for all object types (default: not set, track forever) - default: 3000 - # Optional: Object specific values - objects: - person: 1000 - # Optional: Milliseconds to offset detect annotations by (default: shown below). - # There can often be latency between a recording and the detect process, - # especially when using separate streams for detect and record. - # Use this setting to make the timeline bounding boxes more closely align - # with the recording. The value can be positive or negative. - # TIP: Imagine there is an event clip with a person walking from left to right. - # If the event timeline bounding box is consistently to the left of the person - # then the value should be decreased. Similarly, if a person is walking from - # left to right and the bounding box is consistently ahead of the person - # then the value should be increased. - # TIP: This offset is dynamic so you can change the value and it will update existing - # events, this makes it easy to tune. - # WARNING: Fast moving objects will likely not have the bounding box align. - annotation_offset: 0 +detectors: + coral: + type: edgetpu + device: usb -# Optional: Object configuration -# NOTE: Can be overridden at the camera level -objects: - # Optional: list of objects to track from labelmap.txt (default: shown below) - track: - - person - # Optional: mask to prevent all object types from being detected in certain areas (default: no mask) - # Checks based on the bottom center of the bounding box of the object. - # NOTE: This mask is COMBINED with the object type specific mask below - mask: 0,0,1000,0,1000,200,0,200 - # Optional: filters to reduce false positives for specific object types - filters: - person: - # Optional: minimum width*height of the bounding box for the detected object (default: 0) - min_area: 5000 - # Optional: maximum width*height of the bounding box for the detected object (default: 24000000) - max_area: 100000 - # Optional: minimum width/height of the bounding box for the detected object (default: 0) - min_ratio: 0.5 - # Optional: maximum width/height of the bounding box for the detected object (default: 24000000) - max_ratio: 2.0 - # Optional: minimum score for the object to initiate tracking (default: shown below) - min_score: 0.5 - # Optional: minimum decimal percentage for tracked object's computed score to be considered a true positive (default: shown below) - threshold: 0.7 - # Optional: mask to prevent this object type from being detected in certain areas (default: no mask) - # Checks based on the bottom center of the bounding box of the object - mask: 0,0,1000,0,1000,200,0,200 - -# Optional: Motion configuration -# NOTE: Can be overridden at the camera level -motion: - # Optional: The threshold passed to cv2.threshold to determine if a pixel is different enough to be counted as motion. (default: shown below) - # Increasing this value will make motion detection less sensitive and decreasing it will make motion detection more sensitive. - # The value should be between 1 and 255. - threshold: 30 - # Optional: The percentage of the image used to detect lightning or other substantial changes where motion detection - # needs to recalibrate. (default: shown below) - # Increasing this value will make motion detection more likely to consider lightning or ir mode changes as valid motion. - # Decreasing this value will make motion detection more likely to ignore large amounts of motion such as a person approaching - # a doorbell camera. - lightning_threshold: 0.8 - # Optional: Minimum size in pixels in the resized motion image that counts as motion (default: shown below) - # Increasing this value will prevent smaller areas of motion from being detected. Decreasing will - # make motion detection more sensitive to smaller moving objects. - # As a rule of thumb: - # - 10 - high sensitivity - # - 30 - medium sensitivity - # - 50 - low sensitivity - contour_area: 10 - # Optional: Alpha value passed to cv2.accumulateWeighted when averaging frames to determine the background (default: shown below) - # Higher values mean the current frame impacts the average a lot, and a new object will be averaged into the background faster. - # Low values will cause things like moving shadows to be detected as motion for longer. - # https://www.geeksforgeeks.org/background-subtraction-in-an-image-using-concept-of-running-average/ - frame_alpha: 0.01 - # Optional: Height of the resized motion frame (default: 100) - # Higher values will result in more granular motion detection at the expense of higher CPU usage. - # Lower values result in less CPU, but small changes may not register as motion. - frame_height: 100 - # Optional: motion mask - # NOTE: see docs for more detailed info on creating masks - mask: 0,900,1080,900,1080,1920,0,1920 - # Optional: improve contrast (default: shown below) - # Enables dynamic contrast improvement. This should help improve night detections at the cost of making motion detection more sensitive - # for daytime. - improve_contrast: True - # Optional: Delay when updating camera motion through MQTT from ON -> OFF (default: shown below). - mqtt_off_delay: 30 - -# Optional: Record configuration -# NOTE: Can be overridden at the camera level record: - # Optional: Enable recording (default: shown below) - # WARNING: If recording is disabled in the config, turning it on via - # the UI or MQTT later will have no effect. - enabled: False - # Optional: Number of minutes to wait between cleanup runs (default: shown below) - # This can be used to reduce the frequency of deleting recording segments from disk if you want to minimize i/o - expire_interval: 60 - # Optional: Sync recordings with disk on startup and once a day (default: shown below). - sync_recordings: False - # Optional: Retention settings for recording + enabled: True retain: - # Optional: Number of days to retain recordings regardless of events (default: shown below) - # NOTE: This should be set to 0 and retention should be defined in events section below - # if you only want to retain recordings of events. - days: 0 - # Optional: Mode for retention. Available options are: all, motion, and active_objects - # all - save all recording segments regardless of activity - # motion - save all recordings segments with any detected motion - # active_objects - save all recording segments with active/moving objects - # NOTE: this mode only applies when the days setting above is greater than 0 - mode: all - # Optional: Recording Export Settings - export: - # Optional: Timelapse Output Args (default: shown below). - # NOTE: The default args are set to fit 24 hours of recording into 1 hour playback. - # See https://stackoverflow.com/a/58268695 for more info on how these args work. - # As an example: if you wanted to go from 24 hours to 30 minutes that would be going - # from 86400 seconds to 1800 seconds which would be 1800 / 86400 = 0.02. - # The -r (framerate) dictates how smooth the output video is. - # So the args would be -vf setpts=0.02*PTS -r 30 in that case. - timelapse_args: "-vf setpts=0.04*PTS -r 30" - # Optional: Event recording settings + days: 7 + mode: motion events: - # Optional: Number of seconds before the event to include (default: shown below) - pre_capture: 5 - # Optional: Number of seconds after the event to include (default: shown below) - post_capture: 5 - # Optional: Objects to save recordings for. (default: all tracked objects) - objects: - - person - # Optional: Restrict recordings to objects that entered any of the listed zones (default: no required zones) - required_zones: [] - # Optional: Retention settings for recordings of events retain: - # Required: Default retention days (default: shown below) - default: 10 - # Optional: Mode for retention. (default: shown below) - # all - save all recording segments for events regardless of activity - # motion - save all recordings segments for events with any detected motion - # active_objects - save all recording segments for event with active/moving objects - # - # NOTE: If the retain mode for the camera is more restrictive than the mode configured - # here, the segments will already be gone by the time this mode is applied. - # For example, if the camera retain mode is "motion", the segments without motion are - # never stored, so setting the mode to "all" here won't bring them back. + default: 30 mode: motion - # Optional: Per object retention days - objects: - person: 15 -# Optional: Configuration for the jpg snapshots written to the clips directory for each event -# NOTE: Can be overridden at the camera level snapshots: - # Optional: Enable writing jpg snapshot to /media/frigate/clips (default: shown below) - enabled: False - # Optional: save a clean PNG copy of the snapshot image (default: shown below) - clean_copy: True - # Optional: print a timestamp on the snapshots (default: shown below) - timestamp: False - # Optional: draw bounding box on the snapshots (default: shown below) - bounding_box: True - # Optional: crop the snapshot (default: shown below) - crop: False - # Optional: height to resize the snapshot to (default: original size) - height: 175 - # Optional: Restrict snapshots to objects that entered any of the listed zones (default: no required zones) - required_zones: [] - # Optional: Camera override for retention settings (default: global values) + enabled: True retain: - # Required: Default retention days (default: shown below) - default: 10 - # Optional: Per object retention days - objects: - person: 15 - # Optional: quality of the encoded jpeg, 0-100 (default: shown below) - quality: 70 + default: 30 -# Optional: RTMP configuration -# NOTE: RTMP is deprecated in favor of restream -# NOTE: Can be overridden at the camera level -rtmp: - # Optional: Enable the RTMP stream (default: False) +cameras: + name_of_your_camera: + detect: + width: 1280 + height: 720 + fps: 5 + ffmpeg: + inputs: + - path: rtsp://10.0.10.10:554/rtsp + roles: + - detect + motion: + mask: + - 0,461,3,0,1919,0,1919,843,1699,492,1344,458,1346,336,973,317,869,375,866,432 +``` + +### Standalone Intel Mini PC with USB Coral + +- Single camera with 720p, 5fps stream for detect +- MQTT disabled (not integrated with home assistant) +- VAAPI hardware acceleration for decoding video +- USB Coral detector +- Save all video with any detectable motion for 7 days regardless of whether any objects were detected or not +- Continue to keep all video if it was during any event for 30 days +- Save snapshots for 30 days +- Motion mask for the camera timestamp + +```yaml +mqtt: enabled: False -# Optional: Restream configuration -# Uses https://github.com/AlexxIT/go2rtc (v1.8.3) -go2rtc: +ffmpeg: + hwaccel_args: preset-vaapi -# Optional: jsmpeg stream configuration for WebUI -live: - # Optional: Set the name of the stream that should be used for live view - # in frigate WebUI. (default: name of camera) - stream_name: camera_name - # Optional: Set the height of the jsmpeg stream. (default: 720) - # This must be less than or equal to the height of the detect stream. Lower resolutions - # reduce bandwidth required for viewing the jsmpeg stream. Width is computed to match known aspect ratio. - height: 720 - # Optional: Set the encode quality of the jsmpeg stream (default: shown below) - # 1 is the highest quality, and 31 is the lowest. Lower quality feeds utilize less CPU resources. - quality: 8 +detectors: + coral: + type: edgetpu + device: usb -# Optional: in-feed timestamp style configuration -# NOTE: Can be overridden at the camera level -timestamp_style: - # Optional: Position of the timestamp (default: shown below) - # "tl" (top left), "tr" (top right), "bl" (bottom left), "br" (bottom right) - position: "tl" - # Optional: Format specifier conform to the Python package "datetime" (default: shown below) - # Additional Examples: - # german: "%d.%m.%Y %H:%M:%S" - format: "%m/%d/%Y %H:%M:%S" - # Optional: Color of font - color: - # All Required when color is specified (default: shown below) - red: 255 - green: 255 - blue: 255 - # Optional: Line thickness of font (default: shown below) - thickness: 2 - # Optional: Effect of lettering (default: shown below) - # None (No effect), - # "solid" (solid background in inverse color of font) - # "shadow" (shadow for font) - effect: None +record: + enabled: True + retain: + days: 7 + mode: motion + events: + retain: + default: 30 + mode: motion + +snapshots: + enabled: True + retain: + default: 30 -# Required cameras: - # Required: name of the camera - back: - # Optional: Enable/Disable the camera (default: shown below). - # If disabled: config is used but no live stream and no capture etc. - # Events/Recordings are still viewable. - enabled: True - # Required: ffmpeg settings for the camera + name_of_your_camera: + detect: + width: 1280 + height: 720 + fps: 5 ffmpeg: - # Required: A list of input streams for the camera. See documentation for more information. inputs: - # Required: the path to the stream - # NOTE: path may include environment variables or docker secrets, which must begin with 'FRIGATE_' and be referenced in {} - - path: rtsp://viewer:{FRIGATE_RTSP_PASSWORD}@10.0.10.10:554/cam/realmonitor?channel=1&subtype=2 - # Required: list of roles for this stream. valid values are: audio,detect,record,rtmp - # NOTICE: In addition to assigning the audio, record, and rtmp roles, - # they must also be enabled in the camera config. + - path: rtsp://10.0.10.10:554/rtsp roles: - - audio - detect - - record - - rtmp - # Optional: stream specific global args (default: inherit) - # global_args: - # Optional: stream specific hwaccel args (default: inherit) - # hwaccel_args: - # Optional: stream specific input args (default: inherit) - # input_args: - # Optional: camera specific global args (default: inherit) - # global_args: - # Optional: camera specific hwaccel args (default: inherit) - # hwaccel_args: - # Optional: camera specific input args (default: inherit) - # input_args: - # Optional: camera specific output args (default: inherit) - # output_args: - - # Optional: timeout for highest scoring image before allowing it - # to be replaced by a newer image. (default: shown below) - best_image_timeout: 60 - - # Optional: URL to visit the camera web UI directly from the system page. Might not be available on every camera. - webui_url: "" - - # Optional: zones for this camera - zones: - # Required: name of the zone - # NOTE: This must be different than any camera names, but can match with another zone on another - # camera. - front_steps: - # Required: List of x,y coordinates to define the polygon of the zone. - # NOTE: Presence in a zone is evaluated only based on the bottom center of the objects bounding box. - coordinates: 545,1077,747,939,788,805 - # Optional: Number of consecutive frames required for object to be considered present in the zone (default: shown below). - inertia: 3 - # Optional: List of objects that can trigger this zone (default: all tracked objects) - objects: - - person - # Optional: Zone level object filters. - # NOTE: The global and camera filters are applied upstream. - filters: - person: - min_area: 5000 - max_area: 100000 - threshold: 0.7 - - # Optional: Configuration for the jpg snapshots published via MQTT - mqtt: - # Optional: Enable publishing snapshot via mqtt for camera (default: shown below) - # NOTE: Only applies to publishing image data to MQTT via 'frigate///snapshot'. - # All other messages will still be published. - enabled: True - # Optional: print a timestamp on the snapshots (default: shown below) - timestamp: True - # Optional: draw bounding box on the snapshots (default: shown below) - bounding_box: True - # Optional: crop the snapshot (default: shown below) - crop: True - # Optional: height to resize the snapshot to (default: shown below) - height: 270 - # Optional: jpeg encode quality (default: shown below) - quality: 70 - # Optional: Restrict mqtt messages to objects that entered any of the listed zones (default: no required zones) - required_zones: [] - - # Optional: Configuration for how camera is handled in the GUI. - ui: - # Optional: Adjust sort order of cameras in the UI. Larger numbers come later (default: shown below) - # By default the cameras are sorted alphabetically. - order: 0 - # Optional: Whether or not to show the camera in the Frigate UI (default: shown below) - dashboard: True - - # Optional: connect to ONVIF camera - # to enable PTZ controls. - onvif: - # Required: host of the camera being connected to. - host: 0.0.0.0 - # Optional: ONVIF port for device (default: shown below). - port: 8000 - # Optional: username for login. - # NOTE: Some devices require admin to access ONVIF. - user: admin - # Optional: password for login. - password: admin - # Optional: PTZ camera object autotracking. Keeps a moving object in - # the center of the frame by automatically moving the PTZ camera. - autotracking: - # Optional: enable/disable object autotracking. (default: shown below) - enabled: False - # Optional: calibrate the camera on startup (default: shown below) - # A calibration will move the PTZ in increments and measure the time it takes to move. - # The results are used to help estimate the position of tracked objects after a camera move. - # Frigate will update your config file automatically after a calibration with - # a "movement_weights" entry for the camera. You should then set calibrate_on_startup to False. - calibrate_on_startup: False - # Optional: the mode to use for zooming in/out on objects during autotracking. (default: shown below) - # Available options are: disabled, absolute, and relative - # disabled - don't zoom in/out on autotracked objects, use pan/tilt only - # absolute - use absolute zooming (supported by most PTZ capable cameras) - # relative - use relative zooming (not supported on all PTZs, but makes concurrent pan/tilt/zoom movements) - zooming: disabled - # Optional: A value to change the behavior of zooming on autotracked objects. (default: shown below) - # A lower value will keep more of the scene in view around a tracked object. - # A higher value will zoom in more on a tracked object, but Frigate may lose tracking more quickly. - # The value should be between 0.1 and 0.75 - zoom_factor: 0.3 - # Optional: list of objects to track from labelmap.txt (default: shown below) - track: - - person - # Required: Begin automatically tracking an object when it enters any of the listed zones. - required_zones: - - zone_name - # Required: Name of ONVIF preset in camera's firmware to return to when tracking is over. (default: shown below) - return_preset: home - # Optional: Seconds to delay before returning to preset. (default: shown below) - timeout: 10 - # Optional: Values generated automatically by a camera calibration. Do not modify these manually. (default: shown below) - movement_weights: [] - - # Optional: Configuration for how to sort the cameras in the Birdseye view. - birdseye: - # Optional: Adjust sort order of cameras in the Birdseye view. Larger numbers come later (default: shown below) - # By default the cameras are sorted alphabetically. - order: 0 - -# Optional -ui: - # Optional: Set the default live mode for cameras in the UI (default: shown below) - live_mode: mse - # Optional: Set a timezone to use in the UI (default: use browser local time) - # timezone: America/Denver - # Optional: Use an experimental recordings / camera view UI (default: shown below) - use_experimental: False - # Optional: Set the time format used. - # Options are browser, 12hour, or 24hour (default: shown below) - time_format: browser - # Optional: Set the date style for a specified length. - # Options are: full, long, medium, short - # Examples: - # short: 2/11/23 - # medium: Feb 11, 2023 - # full: Saturday, February 11, 2023 - # (default: shown below). - date_style: short - # Optional: Set the time style for a specified length. - # Options are: full, long, medium, short - # Examples: - # short: 8:14 PM - # medium: 8:15:22 PM - # full: 8:15:22 PM Mountain Standard Time - # (default: shown below). - time_style: medium - # Optional: Ability to manually override the date / time styling to use strftime format - # https://www.gnu.org/software/libc/manual/html_node/Formatting-Calendar-Time.html - # possible values are shown above (default: not set) - strftime_fmt: "%Y/%m/%d %H:%M" - -# Optional: Telemetry configuration -telemetry: - # Optional: Enabled network interfaces for bandwidth stats monitoring (default: empty list, let nethogs search all) - network_interfaces: - - eth - - enp - - eno - - ens - - wl - - lo - # Optional: Configure system stats - stats: - # Enable AMD GPU stats (default: shown below) - amd_gpu_stats: True - # Enable Intel GPU stats (default: shown below) - intel_gpu_stats: True - # Enable network bandwidth stats monitoring for camera ffmpeg processes, go2rtc, and object detectors. (default: shown below) - # NOTE: The container must either be privileged or have cap_net_admin, cap_net_raw capabilities enabled. - network_bandwidth: False - # Optional: Enable the latest version outbound check (default: shown below) - # NOTE: If you use the HomeAssistant integration, disabling this will prevent it from reporting new versions - version_check: True + motion: + mask: + - 0,461,3,0,1919,0,1919,843,1699,492,1344,458,1346,336,973,317,869,375,866,432 +``` + +### Home Assistant integrated Intel Mini PC with OpenVino + +- Single camera with 720p, 5fps stream for detect +- MQTT connected to same mqtt server as home assistant +- VAAPI hardware acceleration for decoding video +- OpenVino detector +- Save all video with any detectable motion for 7 days regardless of whether any objects were detected or not +- Continue to keep all video if it was during any event for 30 days +- Save snapshots for 30 days +- Motion mask for the camera timestamp + +```yaml +mqtt: + host: 192.168.X.X # <---- same mqtt broker that home assistant uses + user: mqtt-user + password: xxxxxxxxxx + +ffmpeg: + hwaccel_args: preset-vaapi + +detectors: + ov: + type: openvino + device: AUTO + model: + path: /openvino-model/ssdlite_mobilenet_v2.xml + +model: + width: 300 + height: 300 + input_tensor: nhwc + input_pixel_format: bgr + labelmap_path: /openvino-model/coco_91cl_bkgr.txt + +record: + enabled: True + retain: + days: 7 + mode: motion + events: + retain: + default: 30 + mode: motion + +snapshots: + enabled: True + retain: + default: 30 + +cameras: + name_of_your_camera: + detect: + width: 1280 + height: 720 + fps: 5 + ffmpeg: + inputs: + - path: rtsp://10.0.10.10:554/rtsp + roles: + - detect + motion: + mask: + - 0,461,3,0,1919,0,1919,843,1699,492,1344,458,1346,336,973,317,869,375,866,432 ``` diff --git a/docs/docs/configuration/masks.md b/docs/docs/configuration/masks.md index 321b909cb..ae64e7e5f 100644 --- a/docs/docs/configuration/masks.md +++ b/docs/docs/configuration/masks.md @@ -3,11 +3,19 @@ id: masks title: Masks --- -There are two types of masks available: +## Motion masks -**Motion masks**: Motion masks are used to prevent unwanted types of motion from triggering detection. Try watching the debug feed with `Motion Boxes` enabled to see what may be regularly detected as motion. For example, you want to mask out your timestamp, the sky, rooftops, etc. Keep in mind that this mask only prevents motion from being detected and does not prevent objects from being detected if object detection was started due to motion in unmasked areas. Motion is also used during object tracking to refine the object detection area in the next frame. Over masking will make it more difficult for objects to be tracked. To see this effect, create a mask, and then watch the video feed with `Motion Boxes` enabled again. +Motion masks are used to prevent unwanted types of motion from triggering detection. Try watching the debug feed with `Motion Boxes` enabled to see what may be regularly detected as motion. For example, you want to mask out your timestamp, the sky, rooftops, etc. Keep in mind that this mask only prevents motion from being detected and does not prevent objects from being detected if object detection was started due to motion in unmasked areas. Motion is also used during object tracking to refine the object detection area in the next frame. Over masking will make it more difficult for objects to be tracked. To see this effect, create a mask, and then watch the video feed with `Motion Boxes` enabled again. -**Object filter masks**: Object filter masks are used to filter out false positives for a given object type based on location. These should be used to filter any areas where it is not possible for an object of that type to be. The bottom center of the detected object's bounding box is evaluated against the mask. If it is in a masked area, it is assumed to be a false positive. For example, you may want to mask out rooftops, walls, the sky, treetops for people. For cars, masking locations other than the street or your driveway will tell Frigate that anything in your yard is a false positive. +## Object filter masks + +Object filter masks are used to filter out false positives for a given object type based on location. These should be used to filter any areas where it is not possible for an object of that type to be. The bottom center of the detected object's bounding box is evaluated against the mask. If it is in a masked area, it is assumed to be a false positive. For example, you may want to mask out rooftops, walls, the sky, treetops for people. For cars, masking locations other than the street or your driveway will tell Frigate that anything in your yard is a false positive. + +Object filter masks can be used to filter out stubborn false positives in fixed locations. For example, the base of this tree may be frequently detected as a person. The following image shows an example of an object filter mask (shaded red area) over the location where the bottom center is typically located to filter out person detections in a precise location. + +![object mask](/img/bottom-center-mask.jpg) + +## Using the mask creator To create a poly mask: diff --git a/docs/docs/guides/false_positives.md b/docs/docs/configuration/object_filters.md similarity index 95% rename from docs/docs/guides/false_positives.md rename to docs/docs/configuration/object_filters.md index bd095c9eb..5ffb205d0 100644 --- a/docs/docs/guides/false_positives.md +++ b/docs/docs/configuration/object_filters.md @@ -1,8 +1,10 @@ --- -id: false_positives -title: Reducing false positives +id: object_filters +title: Filters --- +There are several types of object filters that can be used to reduce false positive rates. + ## Object Scores For object filters in your configuration, any single detection below `min_score` will be ignored as a false positive. `threshold` is based on the median of the history of scores (padded to 3 values) for a tracked object. Consider the following frames when `min_score` is set to 0.6 and threshold is set to 0.85: @@ -18,6 +20,8 @@ For object filters in your configuration, any single detection below `min_score` In frame 2, the score is below the `min_score` value, so Frigate ignores it and it becomes a 0.0. The computed score is the median of the score history (padding to at least 3 values), and only when that computed score crosses the `threshold` is the object marked as a true positive. That happens in frame 4 in the example. +show image of snapshot vs event with differing scores + ### Minimum Score Any detection below `min_score` will be immediately thrown out and never tracked because it is considered a false positive. If `min_score` is too low then false positives may be detected and tracked which can confuse the object tracker and may lead to wasted resources. If `min_score` is too high then lower scoring true positives like objects that are further away or partially occluded may be thrown out which can also confuse the tracker and cause valid events to be lost or disjointed. @@ -36,7 +40,7 @@ False positives can also be reduced by filtering a detection based on its shape. ### Object Proportions -`min_ratio` and `max_ratio` values are compared against a given detected object's width/height ratio (in pixels). If the ratio is outside this range, the object will be ignored as a false positive. This allows objects that are proportionally too short-and-wide (higher ratio) or too tall-and-narrow (smaller ratio) to be ignored. +`min_ratio` and `max_ratio` values are compared against a given detected object's width/height ratio (in pixels). If the ratio is outside this range, the object will be ignored as a false positive. This allows objects that are proportionally too short-and-wide (higher ratio) or too tall-and-narrow (smaller ratio) to be ignored. :::info diff --git a/docs/docs/configuration/objects.mdx b/docs/docs/configuration/objects.mdx index c15907339..81e74e2fe 100644 --- a/docs/docs/configuration/objects.mdx +++ b/docs/docs/configuration/objects.mdx @@ -1,15 +1,16 @@ --- id: objects -title: Objects +title: Available Objects --- import labels from "../../../labelmap.txt"; Frigate includes the object models listed below from the Google Coral test data. -Please note: - - `car` is listed twice because `truck` has been renamed to `car` by default. These object types are frequently confused. - - `person` is the only tracked object by default. See the [full configuration reference](index.md#full-configuration-reference) for an example of expanding the list of tracked objects. +Please note: + +- `car` is listed twice because `truck` has been renamed to `car` by default. These object types are frequently confused. +- `person` is the only tracked object by default. See the [full configuration reference](index.md#full-configuration-reference) for an example of expanding the list of tracked objects.