From 6af94e54d5cd5c8d616232006ac318c4b1054d8f Mon Sep 17 00:00:00 2001 From: Bryan Ramos Date: Sun, 12 Apr 2026 13:55:51 -0400 Subject: [PATCH] integrated rigby --- external/rigby/playbooks/recover.yml | 136 ++ external/rigby/templates/librechat.service.j2 | 18 + external/rigby/templates/librechat.yaml.j2 | 43 + external/rigby/templates/vllm-justfile.j2 | 58 + system/machines/desktop/system.nix | 9 +- .../machines/server/modules/nginx/default.nix | 27 + .../server/modules/sandpack/default.nix | 131 ++ .../server/modules/sandpack/pnpm-lock.patch | 1238 +++++++++++++++++ system/machines/server/system.nix | 1 + 9 files changed, 1653 insertions(+), 8 deletions(-) create mode 100644 external/rigby/templates/librechat.service.j2 create mode 100644 external/rigby/templates/librechat.yaml.j2 create mode 100644 external/rigby/templates/vllm-justfile.j2 create mode 100644 system/machines/server/modules/sandpack/default.nix create mode 100644 system/machines/server/modules/sandpack/pnpm-lock.patch diff --git a/external/rigby/playbooks/recover.yml b/external/rigby/playbooks/recover.yml index fb9cf16..1cdb476 100644 --- a/external/rigby/playbooks/recover.yml +++ b/external/rigby/playbooks/recover.yml @@ -41,6 +41,29 @@ - linux-headers-{{ ansible_kernel }} - linux-modules-extra-{{ ansible_kernel }} - samba + - just + - python3.12 + - python3.12-venv + - docker.io + vllm_user: vllm + vllm_home: /home/vllm + vllm_venv: /home/vllm/vllm-venv + vllm_models: /home/vllm/models + vllm_port: 8000 + vllm_gpu_memory_utilization: "0.95" + vllm_rocm_wheels_url: https://wheels.vllm.ai/rocm/0.19.0/rocm721 + vllm_models_list: + - name: Qwen2.5-Coder-14B + recipe: coder + dir: Qwen2.5-Coder-14B-Instruct + max_model_len: 4096 + - name: Qwen2.5-7B-Instruct + recipe: qwen7b + dir: Qwen2.5-7B-Instruct + max_model_len: 8192 + tool_call_parser: hermes + librechat_root: /home/bryan/LibreChat + librechat_repo_url: https://github.com/danny-avila/LibreChat tasks: - name: Ensure deadsnakes PPA is configured ansible.builtin.apt_repository: @@ -304,3 +327,116 @@ ansible.builtin.command: netplan apply when: rigby_static_network_enabled | bool changed_when: true + + # --- vLLM --- + + - name: Ensure vllm user exists + ansible.builtin.user: + name: "{{ vllm_user }}" + groups: + - render + - video + append: true + create_home: true + shell: /bin/bash + + - name: Ensure vllm models directory exists + ansible.builtin.file: + path: "{{ vllm_models }}" + state: directory + owner: "{{ vllm_user }}" + group: "{{ vllm_user }}" + mode: "0755" + + - name: Ensure uv is installed for vllm user + ansible.builtin.shell: | + set -euo pipefail + curl -LsSf https://astral.sh/uv/install.sh | sh + args: + creates: "{{ vllm_home }}/.local/bin/uv" + become_user: "{{ vllm_user }}" + + - name: Ensure vllm venv exists + ansible.builtin.command: + argv: + - "{{ vllm_home }}/.local/bin/uv" + - venv + - --python + - "3.12" + - "{{ vllm_venv }}" + args: + creates: "{{ vllm_venv }}/bin/python" + become_user: "{{ vllm_user }}" + + - name: Install vLLM in venv + ansible.builtin.command: + argv: + - "{{ vllm_home }}/.local/bin/uv" + - pip + - install + - --python + - "{{ vllm_venv }}/bin/python" + - vllm + - --extra-index-url + - "{{ vllm_rocm_wheels_url }}" + args: + creates: "{{ vllm_venv }}/bin/vllm" + become_user: "{{ vllm_user }}" + + - name: Install vllm justfile + ansible.builtin.template: + src: ../templates/vllm-justfile.j2 + dest: "{{ vllm_home }}/justfile" + owner: "{{ vllm_user }}" + group: "{{ vllm_user }}" + mode: "0644" + + - name: Ensure vllm bashrc sources api key from file + ansible.builtin.lineinfile: + path: "{{ vllm_home }}/.bashrc" + line: "export VLLM_API_KEY=$(cat {{ vllm_home }}/.api_key)" + state: present + + # --- LibreChat --- + + - name: Ensure Docker service is enabled and running + ansible.builtin.systemd_service: + name: docker + enabled: true + state: started + + - name: Ensure bryan is in docker group + ansible.builtin.user: + name: "{{ rigby_user }}" + groups: + - docker + append: true + + - name: Ensure LibreChat repo is present + ansible.builtin.git: + repo: "{{ librechat_repo_url }}" + dest: "{{ librechat_root }}" + update: false + become_user: "{{ rigby_user }}" + + - name: Install librechat.yaml config + ansible.builtin.template: + src: ../templates/librechat.yaml.j2 + dest: "{{ librechat_root }}/librechat.yaml" + owner: "{{ rigby_user }}" + group: "{{ rigby_user }}" + mode: "0644" + + - name: Install librechat systemd unit + ansible.builtin.template: + src: ../templates/librechat.service.j2 + dest: /etc/systemd/system/librechat.service + owner: root + group: root + mode: "0644" + + - name: Reload systemd and enable librechat service + ansible.builtin.systemd_service: + name: librechat.service + daemon_reload: true + enabled: true diff --git a/external/rigby/templates/librechat.service.j2 b/external/rigby/templates/librechat.service.j2 new file mode 100644 index 0000000..608dcbd --- /dev/null +++ b/external/rigby/templates/librechat.service.j2 @@ -0,0 +1,18 @@ +[Unit] +Description=LibreChat +After=network-online.target docker.service +Wants=network-online.target +Requires=docker.service + +[Service] +Type=simple +User={{ rigby_user }} +Group=docker +WorkingDirectory={{ librechat_root }} +ExecStart=/usr/bin/docker compose up +ExecStop=/usr/bin/docker compose down +Restart=on-failure +RestartSec=10 + +[Install] +WantedBy=multi-user.target diff --git a/external/rigby/templates/librechat.yaml.j2 b/external/rigby/templates/librechat.yaml.j2 new file mode 100644 index 0000000..640fd7c --- /dev/null +++ b/external/rigby/templates/librechat.yaml.j2 @@ -0,0 +1,43 @@ +version: 1.3.5 + +cache: true + +interface: + webSearch: false + runCode: false + mcpServers: + use: true + create: true + share: false + public: false + +mcpServers: + searxng: + command: npx + args: + - -y + - mcp-searxng + env: + SEARXNG_URL: http://searxng:8080 + timeout: 60000 + fetch: + command: uvx + args: + - mcp-server-fetch + - --ignore-robots-txt + timeout: 60000 + +endpoints: + custom: + - name: "rigby-vllm" + apiKey: "${VLLM_API_KEY}" + baseURL: "http://host.docker.internal:{{ vllm_port }}/v1" + models: + default: [] + fetch: true + titleConvo: true + titleModel: "current_model" + titleMessageRole: "user" + summarize: false + summaryModel: "current_model" + modelDisplayLabel: "Rigby vLLM" diff --git a/external/rigby/templates/vllm-justfile.j2 b/external/rigby/templates/vllm-justfile.j2 new file mode 100644 index 0000000..33e0f11 --- /dev/null +++ b/external/rigby/templates/vllm-justfile.j2 @@ -0,0 +1,58 @@ +{% raw %}# List available recipes +[private] +default: + @just --list + +# Show currently running vLLM server +status: + @pgrep -a -f "vllm serve" || echo "No vLLM server running" + +# Tail the vLLM log +logs: + @tail -f {% endraw %}{{ vllm_home }}/vllm.log{% raw %} + +# Stop any running vLLM server and wait for VRAM to free +stop: + #!/usr/bin/env bash + set -euo pipefail + if pgrep -f "vllm serve" > /dev/null; then + echo "Stopping vLLM..." + pkill -TERM -f "vllm serve" || true + sleep 2 + pkill -KILL -f "vllm serve" 2>/dev/null || true + fi + echo "Waiting for VRAM to release..." + for i in $(seq 1 30); do + used=$(rocm-smi --showmeminfo vram 2>/dev/null | awk '/VRAM Total Used Memory/ {print $NF}') + total=$(rocm-smi --showmeminfo vram 2>/dev/null | awk '/VRAM Total Memory \(B\)/ {print $NF}') + if [ -n "$used" ] && [ -n "$total" ] && [ "$total" -gt 0 ]; then + pct=$(( used * 100 / total )) + echo " VRAM: ${pct}%" + if [ "$pct" -lt 10 ]; then + echo "VRAM free." + exit 0 + fi + fi + sleep 2 + done + echo "Warning: VRAM did not fully release after 60s" +{% endraw %} +{% for model in vllm_models_list %} +# Serve {{ model.name }} +{{ model.recipe }}: stop + #!/usr/bin/env bash + source {{ vllm_home }}/.bashrc + nohup {{ vllm_home }}/vllm-venv/bin/vllm serve {{ vllm_models }}/{{ model.dir }} \ + --served-model-name {{ model.name }} \ + --host 0.0.0.0 \ + --port {{ vllm_port }} \ + --api-key ${VLLM_API_KEY} \ + --dtype auto \ + --max-model-len {{ model.max_model_len }} \ + --gpu-memory-utilization {{ vllm_gpu_memory_utilization }}{% if model.tool_call_parser is defined %} \ + --enable-auto-tool-choice \ + --tool-call-parser {{ model.tool_call_parser }}{% endif %} \ + > {{ vllm_home }}/vllm.log 2>&1 & + echo "Started {{ model.name }} (pid $!). Run 'just logs' to follow." + +{% endfor %} diff --git a/system/machines/desktop/system.nix b/system/machines/desktop/system.nix index ca2c24b..7a12793 100644 --- a/system/machines/desktop/system.nix +++ b/system/machines/desktop/system.nix @@ -163,14 +163,7 @@ in settings = { # Explicit subdomains -> local server address = [ - "/git.ramos.codes/192.168.0.154" - "/ln.ramos.codes/192.168.0.154" - "/photos.ramos.codes/192.168.0.154" - "/test.ramos.codes/192.168.0.154" - "/electrum.ramos.codes/192.168.0.154" - "/immich.ramos.codes/192.168.0.154" - "/forgejo.ramos.codes/192.168.0.154" - "/frigate.ramos.codes/192.168.0.154" + "/*.ramos.codes/192.168.0.154" ]; server = [ "192.168.0.1" ]; }; diff --git a/system/machines/server/modules/nginx/default.nix b/system/machines/server/modules/nginx/default.nix index 7f508f0..44ad00f 100644 --- a/system/machines/server/modules/nginx/default.nix +++ b/system/machines/server/modules/nginx/default.nix @@ -71,6 +71,33 @@ in ''; }; }; + + virtualHosts."chat.${domain}" = { + useACMEHost = domain; + forceSSL = true; + locations."/" = { + proxyPass = "http://192.168.0.23:3080"; + proxyWebsockets = true; + }; + }; + + virtualHosts."ai.${domain}" = { + useACMEHost = domain; + forceSSL = true; + locations."/" = { + proxyPass = "http://192.168.0.23:8000"; + proxyWebsockets = true; + }; + }; + + virtualHosts."comfy.${domain}" = { + useACMEHost = domain; + forceSSL = true; + locations."/" = { + proxyPass = "http://192.168.0.23:8188"; + proxyWebsockets = true; + }; + }; }; }; } diff --git a/system/machines/server/modules/sandpack/default.nix b/system/machines/server/modules/sandpack/default.nix new file mode 100644 index 0000000..e4e5a9c --- /dev/null +++ b/system/machines/server/modules/sandpack/default.nix @@ -0,0 +1,131 @@ +{ pkgs, lib, config, ... }: + +with lib; +let + cfg = config.modules.system.sandpack; + domain = "ramos.codes"; + + staticBrowserServer = pkgs.stdenvNoCC.mkDerivation (finalAttrs: let + pnpm = pkgs.pnpm_10; + in { + pname = "static-browser-server"; + version = "1.0.6"; + + src = pkgs.fetchFromGitHub { + owner = "LibreChat-AI"; + repo = "static-browser-server"; + rev = "30de7ae4ebf5433acc0fb640649fb77426a79e04"; + hash = "sha256-OVAGnoh7KRmTPY2bXE0kvCMiPx3tXAooDa8n8ujugYM="; + }; + + patches = [ ./pnpm-lock.patch ]; + + pnpmDeps = pkgs.fetchPnpmDeps { + inherit (finalAttrs) pname version src patches; + pnpm = pnpm; + fetcherVersion = 3; + hash = "sha256-+Gz8tQy4rkoi365To9GI6sShPTjuKEmZxtV5mEB2UYk="; + }; + + nativeBuildInputs = [ + pkgs.makeWrapper + pkgs.nodejs + pkgs.pnpmConfigHook + pnpm + ]; + + buildPhase = '' + runHook preBuild + pnpm build + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + mkdir -p $out/libexec/static-browser-server $out/bin + cp -r out $out/libexec/ + + pnpm exec esbuild \ + ./servers/demo-server.ts \ + --bundle \ + --platform=node \ + --format=cjs \ + --outfile=$out/libexec/static-browser-server/demo-server.js + + makeWrapper ${pkgs.nodejs}/bin/node $out/bin/static-browser-server \ + --add-flags $out/libexec/static-browser-server/demo-server.js + + runHook postInstall + ''; + }); +in +{ + options.modules.system.sandpack = { + enable = mkEnableOption "Sandpack services"; + }; + + config = mkIf cfg.enable { + virtualisation.oci-containers = { + backend = "podman"; + containers.sandpack-bundler = { + image = "ghcr.io/librechat-ai/codesandbox-client/bundler:latest"; + ports = [ "127.0.0.1:4333:80" ]; + }; + }; + + systemd.services.sandpack-preview = { + description = "Sandpack static preview server"; + after = [ "network-online.target" ]; + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + ExecStart = "${staticBrowserServer}/bin/static-browser-server"; + WorkingDirectory = "${staticBrowserServer}/libexec/static-browser-server"; + Restart = "always"; + RestartSec = 5; + DynamicUser = true; + Environment = [ + "HOST=127.0.0.1" + "PORT=4324" + ]; + }; + }; + + services.nginx.virtualHosts."bundler.${domain}" = { + useACMEHost = domain; + forceSSL = true; + locations."/" = { + proxyPass = "http://127.0.0.1:4333"; + extraConfig = '' + add_header Access-Control-Allow-Origin "*" always; + add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always; + add_header Access-Control-Allow-Headers "Content-Type, Authorization" always; + add_header Access-Control-Max-Age "3600" always; + + if ($request_method = OPTIONS) { + return 204; + } + ''; + }; + }; + + services.nginx.virtualHosts."preview.${domain}" = { + useACMEHost = domain; + forceSSL = true; + serverAliases = [ "~^.+-preview\\.ramos\\.codes$" ]; + locations."/" = { + proxyPass = "http://127.0.0.1:4324"; + extraConfig = '' + add_header Access-Control-Allow-Origin "*" always; + add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always; + add_header Access-Control-Allow-Headers "Content-Type, Authorization" always; + add_header Access-Control-Max-Age "3600" always; + + if ($request_method = OPTIONS) { + return 204; + } + ''; + }; + }; + }; +} diff --git a/system/machines/server/modules/sandpack/pnpm-lock.patch b/system/machines/server/modules/sandpack/pnpm-lock.patch new file mode 100644 index 0000000..95eb7f6 --- /dev/null +++ b/system/machines/server/modules/sandpack/pnpm-lock.patch @@ -0,0 +1,1238 @@ +--- a/pnpm-lock.yaml ++++ b/pnpm-lock.yaml +@@ -8,6 +8,9 @@ + + .: + dependencies: ++ '@fastify/cors': ++ specifier: ^11.0.1 ++ version: 11.2.0 + '@open-draft/deferred-promise': + specifier: ^2.1.0 + version: 2.2.0 +@@ -22,8 +25,8 @@ + version: 1.4.3 + devDependencies: + '@fastify/static': +- specifier: ^6.9.0 +- version: 6.12.0 ++ specifier: ^8.1.1 ++ version: 8.3.0 + '@types/mime-db': + specifier: ^1.43.1 + version: 1.43.5 +@@ -37,14 +40,14 @@ + specifier: ^4.0.0 + version: 4.0.1 + esbuild: +- specifier: ^0.17.10 +- version: 0.17.19 ++ specifier: ^0.25.2 ++ version: 0.25.12 + esbuild-register: + specifier: ^3.4.2 +- version: 3.6.0(esbuild@0.17.19) ++ version: 3.6.0(esbuild@0.25.12) + fastify: +- specifier: ^4.13.0 +- version: 4.29.0 ++ specifier: ^5.2.2 ++ version: 5.8.4 + mustache: + specifier: ^4.2.0 + version: 4.2.0 +@@ -54,159 +57,195 @@ + + packages: + +- '@esbuild/android-arm64@0.17.19': +- resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} +- engines: {node: '>=12'} ++ '@esbuild/aix-ppc64@0.25.12': ++ resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} ++ engines: {node: '>=18'} ++ cpu: [ppc64] ++ os: [aix] ++ ++ '@esbuild/android-arm64@0.25.12': ++ resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} ++ engines: {node: '>=18'} + cpu: [arm64] + os: [android] + +- '@esbuild/android-arm@0.17.19': +- resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} +- engines: {node: '>=12'} ++ '@esbuild/android-arm@0.25.12': ++ resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} ++ engines: {node: '>=18'} + cpu: [arm] + os: [android] + +- '@esbuild/android-x64@0.17.19': +- resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} +- engines: {node: '>=12'} ++ '@esbuild/android-x64@0.25.12': ++ resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} ++ engines: {node: '>=18'} + cpu: [x64] + os: [android] + +- '@esbuild/darwin-arm64@0.17.19': +- resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} +- engines: {node: '>=12'} ++ '@esbuild/darwin-arm64@0.25.12': ++ resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} ++ engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + +- '@esbuild/darwin-x64@0.17.19': +- resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} +- engines: {node: '>=12'} ++ '@esbuild/darwin-x64@0.25.12': ++ resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} ++ engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + +- '@esbuild/freebsd-arm64@0.17.19': +- resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} +- engines: {node: '>=12'} ++ '@esbuild/freebsd-arm64@0.25.12': ++ resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} ++ engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + +- '@esbuild/freebsd-x64@0.17.19': +- resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} +- engines: {node: '>=12'} ++ '@esbuild/freebsd-x64@0.25.12': ++ resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} ++ engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + +- '@esbuild/linux-arm64@0.17.19': +- resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} +- engines: {node: '>=12'} ++ '@esbuild/linux-arm64@0.25.12': ++ resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} ++ engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + +- '@esbuild/linux-arm@0.17.19': +- resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} +- engines: {node: '>=12'} ++ '@esbuild/linux-arm@0.25.12': ++ resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} ++ engines: {node: '>=18'} + cpu: [arm] + os: [linux] + +- '@esbuild/linux-ia32@0.17.19': +- resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} +- engines: {node: '>=12'} ++ '@esbuild/linux-ia32@0.25.12': ++ resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} ++ engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + +- '@esbuild/linux-loong64@0.17.19': +- resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} +- engines: {node: '>=12'} ++ '@esbuild/linux-loong64@0.25.12': ++ resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} ++ engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + +- '@esbuild/linux-mips64el@0.17.19': +- resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} +- engines: {node: '>=12'} ++ '@esbuild/linux-mips64el@0.25.12': ++ resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} ++ engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + +- '@esbuild/linux-ppc64@0.17.19': +- resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} +- engines: {node: '>=12'} ++ '@esbuild/linux-ppc64@0.25.12': ++ resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} ++ engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + +- '@esbuild/linux-riscv64@0.17.19': +- resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} +- engines: {node: '>=12'} ++ '@esbuild/linux-riscv64@0.25.12': ++ resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} ++ engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + +- '@esbuild/linux-s390x@0.17.19': +- resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} +- engines: {node: '>=12'} ++ '@esbuild/linux-s390x@0.25.12': ++ resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} ++ engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + +- '@esbuild/linux-x64@0.17.19': +- resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} +- engines: {node: '>=12'} ++ '@esbuild/linux-x64@0.25.12': ++ resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} ++ engines: {node: '>=18'} + cpu: [x64] + os: [linux] + +- '@esbuild/netbsd-x64@0.17.19': +- resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} +- engines: {node: '>=12'} ++ '@esbuild/netbsd-arm64@0.25.12': ++ resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} ++ engines: {node: '>=18'} ++ cpu: [arm64] ++ os: [netbsd] ++ ++ '@esbuild/netbsd-x64@0.25.12': ++ resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} ++ engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + +- '@esbuild/openbsd-x64@0.17.19': +- resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} +- engines: {node: '>=12'} ++ '@esbuild/openbsd-arm64@0.25.12': ++ resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} ++ engines: {node: '>=18'} ++ cpu: [arm64] ++ os: [openbsd] ++ ++ '@esbuild/openbsd-x64@0.25.12': ++ resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} ++ engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + +- '@esbuild/sunos-x64@0.17.19': +- resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} +- engines: {node: '>=12'} ++ '@esbuild/openharmony-arm64@0.25.12': ++ resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} ++ engines: {node: '>=18'} ++ cpu: [arm64] ++ os: [openharmony] ++ ++ '@esbuild/sunos-x64@0.25.12': ++ resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} ++ engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + +- '@esbuild/win32-arm64@0.17.19': +- resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} +- engines: {node: '>=12'} ++ '@esbuild/win32-arm64@0.25.12': ++ resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} ++ engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + +- '@esbuild/win32-ia32@0.17.19': +- resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} +- engines: {node: '>=12'} ++ '@esbuild/win32-ia32@0.25.12': ++ resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} ++ engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + +- '@esbuild/win32-x64@0.17.19': +- resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} +- engines: {node: '>=12'} ++ '@esbuild/win32-x64@0.25.12': ++ resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} ++ engines: {node: '>=18'} + cpu: [x64] + os: [win32] + +- '@fastify/accept-negotiator@1.1.0': +- resolution: {integrity: sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ==} +- engines: {node: '>=14'} ++ '@fastify/accept-negotiator@2.0.1': ++ resolution: {integrity: sha512-/c/TW2bO/v9JeEgoD/g1G5GxGeCF1Hafdf79WPmUlgYiBXummY0oX3VVq4yFkKKVBKDNlaDUYoab7g38RpPqCQ==} ++ ++ '@fastify/ajv-compiler@4.0.5': ++ resolution: {integrity: sha512-KoWKW+MhvfTRWL4qrhUwAAZoaChluo0m0vbiJlGMt2GXvL4LVPQEjt8kSpHI3IBq5Rez8fg+XeH3cneztq+C7A==} + +- '@fastify/ajv-compiler@3.6.0': +- resolution: {integrity: sha512-LwdXQJjmMD+GwLOkP7TVC68qa+pSSogeWWmznRJ/coyTcfe9qA05AHFSe1eZFwK6q+xVRpChnvFUkf1iYaSZsQ==} ++ '@fastify/cors@11.2.0': ++ resolution: {integrity: sha512-LbLHBuSAdGdSFZYTLVA3+Ch2t+sA6nq3Ejc6XLAKiQ6ViS2qFnvicpj0htsx03FyYeLs04HfRNBsz/a8SvbcUw==} + +- '@fastify/error@3.4.1': +- resolution: {integrity: sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==} ++ '@fastify/error@4.2.0': ++ resolution: {integrity: sha512-RSo3sVDXfHskiBZKBPRgnQTtIqpi/7zhJOEmAxCiBcM7d0uwdGdxLlsCaLzGs8v8NnxIRlfG0N51p5yFaOentQ==} + +- '@fastify/fast-json-stringify-compiler@4.3.0': +- resolution: {integrity: sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==} ++ '@fastify/fast-json-stringify-compiler@5.0.3': ++ resolution: {integrity: sha512-uik7yYHkLr6fxd8hJSZ8c+xF4WafPK+XzneQDPU+D10r5X19GW8lJcom2YijX2+qtFF1ENJlHXKFM9ouXNJYgQ==} + +- '@fastify/merge-json-schemas@0.1.1': +- resolution: {integrity: sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==} ++ '@fastify/forwarded@3.0.1': ++ resolution: {integrity: sha512-JqDochHFqXs3C3Ml3gOY58zM7OqO9ENqPo0UqAjAjH8L01fRZqwX9iLeX34//kiJubF7r2ZQHtBRU36vONbLlw==} + +- '@fastify/send@2.1.0': +- resolution: {integrity: sha512-yNYiY6sDkexoJR0D8IDy3aRP3+L4wdqCpvx5WP+VtEU58sn7USmKynBzDQex5X42Zzvw2gNzzYgP90UfWShLFA==} ++ '@fastify/merge-json-schemas@0.2.1': ++ resolution: {integrity: sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A==} + +- '@fastify/static@6.12.0': +- resolution: {integrity: sha512-KK1B84E6QD/FcQWxDI2aiUCwHxMJBI1KeCUzm1BwYpPY1b742+jeKruGHP2uOluuM6OkBPI8CIANrXcCRtC2oQ==} ++ '@fastify/proxy-addr@5.1.0': ++ resolution: {integrity: sha512-INS+6gh91cLUjB+PVHfu1UqcB76Sqtpyp7bnL+FYojhjygvOPA9ctiD/JDKsyD9Xgu4hUhCSJBPig/w7duNajw==} ++ ++ '@fastify/send@4.1.0': ++ resolution: {integrity: sha512-TMYeQLCBSy2TOFmV95hQWkiTYgC/SEx7vMdV+wnZVX4tt8VBLKzmH8vV9OzJehV0+XBfg+WxPMt5wp+JBUKsVw==} ++ ++ '@fastify/static@8.3.0': ++ resolution: {integrity: sha512-yKxviR5PH1OKNnisIzZKmgZSus0r2OZb8qCSbqmw34aolT4g3UlzYfeBRym+HJ1J471CR8e2ldNub4PubD1coA==} ++ ++ '@isaacs/cliui@9.0.0': ++ resolution: {integrity: sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==} ++ engines: {node: '>=18'} + + '@lukeed/ms@2.0.2': + resolution: {integrity: sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==} +@@ -215,6 +254,9 @@ + '@open-draft/deferred-promise@2.2.0': + resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} + ++ '@pinojs/redact@0.4.0': ++ resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==} ++ + '@types/mime-db@1.43.5': + resolution: {integrity: sha512-/bfTiIUTNPUBnwnYvUxXAre5MhD88jgagLEQiQtIASjU+bwxd8kS/ASDA4a8ufd8m0Lheu6eeMJHEUpLHoJ28A==} + +@@ -227,14 +269,6 @@ + abstract-logging@2.0.1: + resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==} + +- ajv-formats@2.1.1: +- resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} +- peerDependencies: +- ajv: ^8.0.0 +- peerDependenciesMeta: +- ajv: +- optional: true +- + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: +@@ -250,25 +284,31 @@ + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + +- avvio@8.4.0: +- resolution: {integrity: sha512-CDSwaxINFy59iNwhYnkvALBwZiTydGkOecZyPkqBpABYR1KqGEsET0VOOYDwtleZSUIdeY36DC2bSZ24CO1igA==} ++ avvio@9.2.0: ++ resolution: {integrity: sha512-2t/sy01ArdHHE0vRH5Hsay+RtCZt3dLPji7W7/MMOCEgze5b7SNDC4j5H6FnVgPkI1MTNFGzHdHrVXDDl7QSSQ==} + +- balanced-match@1.0.2: +- resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} ++ balanced-match@4.0.4: ++ resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} ++ engines: {node: 18 || 20 || >=22} + + base-x@4.0.1: + resolution: {integrity: sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==} + +- brace-expansion@2.0.1: +- resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} ++ brace-expansion@5.0.5: ++ resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} ++ engines: {node: 18 || 20 || >=22} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + +- cookie@0.7.2: +- resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} +- engines: {node: '>= 0.6'} ++ cookie@1.1.1: ++ resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} ++ engines: {node: '>=18'} ++ ++ cross-spawn@7.0.6: ++ resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} ++ engines: {node: '>= 8'} + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} +@@ -283,6 +323,10 @@ + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + ++ dequal@2.0.3: ++ resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} ++ engines: {node: '>=6'} ++ + dotenv@16.4.7: + resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} + engines: {node: '>=12'} +@@ -292,87 +336,82 @@ + peerDependencies: + esbuild: '>=0.12 <1' + +- esbuild@0.17.19: +- resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} +- engines: {node: '>=12'} ++ esbuild@0.25.12: ++ resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} ++ engines: {node: '>=18'} + hasBin: true + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + +- fast-content-type-parse@1.1.0: +- resolution: {integrity: sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==} +- + fast-decode-uri-component@1.0.1: + resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + +- fast-json-stringify@5.16.1: +- resolution: {integrity: sha512-KAdnLvy1yu/XrRtP+LJnxbBGrhN+xXu+gt3EUvZhYGKCr3lFHq/7UFJHHFgmJKoqlh6B40bZLEv7w46B0mqn1g==} ++ fast-json-stringify@6.3.0: ++ resolution: {integrity: sha512-oRCntNDY/329HJPlmdNLIdogNtt6Vyjb1WuT01Soss3slIdyUp8kAcDU3saQTOquEK8KFVfwIIF7FebxUAu+yA==} + + fast-querystring@1.1.2: + resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} + +- fast-redact@3.5.0: +- resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} +- engines: {node: '>=6'} +- +- fast-uri@2.4.0: +- resolution: {integrity: sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==} +- + fast-uri@3.0.6: + resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + +- fastify-plugin@4.5.1: +- resolution: {integrity: sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==} ++ fastify-plugin@5.1.0: ++ resolution: {integrity: sha512-FAIDA8eovSt5qcDgcBvDuX/v0Cjz0ohGhENZ/wpc3y+oZCY2afZ9Baqql3g/lC+OHRnciQol4ww7tuthOb9idw==} + +- fastify@4.29.0: +- resolution: {integrity: sha512-MaaUHUGcCgC8fXQDsDtioaCcag1fmPJ9j64vAKunqZF4aSub040ZGi/ag8NGE2714yREPOKZuHCfpPzuUD3UQQ==} ++ fastify@5.8.4: ++ resolution: {integrity: sha512-sa42J1xylbBAYUWALSBoyXKPDUvM3OoNOibIefA+Oha57FryXKKCZarA1iDntOCWp3O35voZLuDg2mdODXtPzQ==} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + +- find-my-way@8.2.2: +- resolution: {integrity: sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA==} +- engines: {node: '>=14'} +- +- forwarded@0.2.0: +- resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} +- engines: {node: '>= 0.6'} ++ find-my-way@9.5.0: ++ resolution: {integrity: sha512-VW2RfnmscZO5KgBY5XVyKREMW5nMZcxDy+buTOsL+zIPnBlbKm+00sgzoQzq1EVh4aALZLfKdwv6atBGcjvjrQ==} ++ engines: {node: '>=20'} + +- fs.realpath@1.0.0: +- resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} ++ foreground-child@3.3.1: ++ resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} ++ engines: {node: '>=14'} + +- glob@8.1.0: +- resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} +- engines: {node: '>=12'} +- deprecated: Glob versions prior to v9 are no longer supported ++ glob@11.1.0: ++ resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==} ++ engines: {node: 20 || >=22} ++ deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me ++ hasBin: true + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + +- inflight@1.0.6: +- resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} +- deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. +- + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + +- ipaddr.js@1.9.1: +- resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} +- engines: {node: '>= 0.10'} ++ ipaddr.js@2.3.0: ++ resolution: {integrity: sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==} ++ engines: {node: '>= 10'} ++ ++ isexe@2.0.0: ++ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} ++ ++ jackspeak@4.2.3: ++ resolution: {integrity: sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==} ++ engines: {node: 20 || >=22} + +- json-schema-ref-resolver@1.0.1: +- resolution: {integrity: sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==} ++ json-schema-ref-resolver@3.0.0: ++ resolution: {integrity: sha512-hOrZIVL5jyYFjzk7+y7n5JDzGlU8rfWDuYyHwGa2WA8/pcmMHezp2xsVwxrebD/Q9t8Nc5DboieySDpCp4WG4A==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + +- light-my-request@5.14.0: +- resolution: {integrity: sha512-aORPWntbpH5esaYpGOOmri0OHDOe3wC5M2MQxZ9dvMLZm6DnaAn0kJlcbU9hwsQgLzmZyReKwFwwPkR+nHu5kA==} ++ light-my-request@6.6.0: ++ resolution: {integrity: sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A==} ++ ++ lru-cache@11.3.3: ++ resolution: {integrity: sha512-JvNw9Y81y33E+BEYPr0U7omo+U9AySnsMsEiXgwT6yqd31VQWTLNQqmT4ou5eqPFUrTfIDFta2wKhB1hyohtAQ==} ++ engines: {node: 20 || >=22} + + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} +@@ -383,9 +422,13 @@ + engines: {node: '>=10.0.0'} + hasBin: true + +- minimatch@5.1.6: +- resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} +- engines: {node: '>=10'} ++ minimatch@10.2.5: ++ resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} ++ engines: {node: 18 || 20 || >=22} ++ ++ minipass@7.1.3: ++ resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} ++ engines: {node: '>=16 || 14 >=14.17'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} +@@ -398,35 +441,35 @@ + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} + +- once@1.4.0: +- resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} +- + outvariant@1.4.3: + resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} + +- p-limit@3.1.0: +- resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} +- engines: {node: '>=10'} ++ package-json-from-dist@1.0.1: ++ resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + +- pino-abstract-transport@2.0.0: +- resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} ++ path-key@3.1.1: ++ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} ++ engines: {node: '>=8'} ++ ++ path-scurry@2.0.2: ++ resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} ++ engines: {node: 18 || 20 || >=22} ++ ++ pino-abstract-transport@3.0.0: ++ resolution: {integrity: sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==} + + pino-std-serializers@7.0.0: + resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} + +- pino@9.6.0: +- resolution: {integrity: sha512-i85pKRCt4qMjZ1+L7sy2Ag4t1atFcdbEt76+7iRJn1g2BvsnRMGu9p8pivl9fs63M2kF/A0OacFZhTub+m/qMg==} ++ pino@10.3.1: ++ resolution: {integrity: sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==} + hasBin: true + +- process-warning@3.0.0: +- resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} +- + process-warning@4.0.1: + resolution: {integrity: sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==} + +- proxy-addr@2.0.7: +- resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} +- engines: {node: '>= 0.10'} ++ process-warning@5.0.0: ++ resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==} + + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} +@@ -439,8 +482,8 @@ + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + +- ret@0.4.3: +- resolution: {integrity: sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ==} ++ ret@0.5.0: ++ resolution: {integrity: sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==} + engines: {node: '>=10'} + + reusify@1.1.0: +@@ -453,15 +496,16 @@ + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + +- safe-regex2@3.1.0: +- resolution: {integrity: sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==} ++ safe-regex2@5.1.0: ++ resolution: {integrity: sha512-pNHAuBW7TrcleFHsxBr5QMi/Iyp0ENjUKz7GCcX1UO7cMh+NmVK6HxQckNL1tJp1XAJVjG6B8OKIPqodqj9rtw==} ++ hasBin: true + + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + +- secure-json-parse@2.7.0: +- resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} ++ secure-json-parse@4.1.0: ++ resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==} + + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} +@@ -474,6 +518,18 @@ + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + ++ shebang-command@2.0.0: ++ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} ++ engines: {node: '>=8'} ++ ++ shebang-regex@3.0.0: ++ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} ++ engines: {node: '>=8'} ++ ++ signal-exit@4.1.0: ++ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} ++ engines: {node: '>=14'} ++ + sonic-boom@4.2.0: + resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} + +@@ -485,8 +541,9 @@ + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + +- thread-stream@3.1.0: +- resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} ++ thread-stream@4.0.0: ++ resolution: {integrity: sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA==} ++ engines: {node: '>=20'} + + toad-cache@3.7.0: + resolution: {integrity: sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==} +@@ -504,100 +561,122 @@ + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + +- wrappy@1.0.2: +- resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} +- +- yocto-queue@0.1.0: +- resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} +- engines: {node: '>=10'} ++ which@2.0.2: ++ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} ++ engines: {node: '>= 8'} ++ hasBin: true + + snapshots: + +- '@esbuild/android-arm64@0.17.19': ++ '@esbuild/aix-ppc64@0.25.12': ++ optional: true ++ ++ '@esbuild/android-arm64@0.25.12': ++ optional: true ++ ++ '@esbuild/android-arm@0.25.12': ++ optional: true ++ ++ '@esbuild/android-x64@0.25.12': + optional: true + +- '@esbuild/android-arm@0.17.19': ++ '@esbuild/darwin-arm64@0.25.12': + optional: true + +- '@esbuild/android-x64@0.17.19': ++ '@esbuild/darwin-x64@0.25.12': + optional: true + +- '@esbuild/darwin-arm64@0.17.19': ++ '@esbuild/freebsd-arm64@0.25.12': + optional: true + +- '@esbuild/darwin-x64@0.17.19': ++ '@esbuild/freebsd-x64@0.25.12': + optional: true + +- '@esbuild/freebsd-arm64@0.17.19': ++ '@esbuild/linux-arm64@0.25.12': + optional: true + +- '@esbuild/freebsd-x64@0.17.19': ++ '@esbuild/linux-arm@0.25.12': + optional: true + +- '@esbuild/linux-arm64@0.17.19': ++ '@esbuild/linux-ia32@0.25.12': + optional: true + +- '@esbuild/linux-arm@0.17.19': ++ '@esbuild/linux-loong64@0.25.12': + optional: true + +- '@esbuild/linux-ia32@0.17.19': ++ '@esbuild/linux-mips64el@0.25.12': + optional: true + +- '@esbuild/linux-loong64@0.17.19': ++ '@esbuild/linux-ppc64@0.25.12': + optional: true + +- '@esbuild/linux-mips64el@0.17.19': ++ '@esbuild/linux-riscv64@0.25.12': + optional: true + +- '@esbuild/linux-ppc64@0.17.19': ++ '@esbuild/linux-s390x@0.25.12': + optional: true + +- '@esbuild/linux-riscv64@0.17.19': ++ '@esbuild/linux-x64@0.25.12': + optional: true + +- '@esbuild/linux-s390x@0.17.19': ++ '@esbuild/netbsd-arm64@0.25.12': + optional: true + +- '@esbuild/linux-x64@0.17.19': ++ '@esbuild/netbsd-x64@0.25.12': + optional: true + +- '@esbuild/netbsd-x64@0.17.19': ++ '@esbuild/openbsd-arm64@0.25.12': + optional: true + +- '@esbuild/openbsd-x64@0.17.19': ++ '@esbuild/openbsd-x64@0.25.12': + optional: true + +- '@esbuild/sunos-x64@0.17.19': ++ '@esbuild/openharmony-arm64@0.25.12': + optional: true + +- '@esbuild/win32-arm64@0.17.19': ++ '@esbuild/sunos-x64@0.25.12': + optional: true + +- '@esbuild/win32-ia32@0.17.19': ++ '@esbuild/win32-arm64@0.25.12': + optional: true + +- '@esbuild/win32-x64@0.17.19': ++ '@esbuild/win32-ia32@0.25.12': + optional: true + +- '@fastify/accept-negotiator@1.1.0': {} ++ '@esbuild/win32-x64@0.25.12': ++ optional: true + +- '@fastify/ajv-compiler@3.6.0': ++ '@fastify/accept-negotiator@2.0.1': {} ++ ++ '@fastify/ajv-compiler@4.0.5': + dependencies: + ajv: 8.17.1 +- ajv-formats: 2.1.1(ajv@8.17.1) +- fast-uri: 2.4.0 ++ ajv-formats: 3.0.1(ajv@8.17.1) ++ fast-uri: 3.0.6 ++ ++ '@fastify/cors@11.2.0': ++ dependencies: ++ fastify-plugin: 5.1.0 ++ toad-cache: 3.7.0 + +- '@fastify/error@3.4.1': {} ++ '@fastify/error@4.2.0': {} + +- '@fastify/fast-json-stringify-compiler@4.3.0': ++ '@fastify/fast-json-stringify-compiler@5.0.3': + dependencies: +- fast-json-stringify: 5.16.1 ++ fast-json-stringify: 6.3.0 + +- '@fastify/merge-json-schemas@0.1.1': ++ '@fastify/forwarded@3.0.1': {} ++ ++ '@fastify/merge-json-schemas@0.2.1': + dependencies: +- fast-deep-equal: 3.1.3 ++ dequal: 2.0.3 + +- '@fastify/send@2.1.0': ++ '@fastify/proxy-addr@5.1.0': ++ dependencies: ++ '@fastify/forwarded': 3.0.1 ++ ipaddr.js: 2.3.0 ++ ++ '@fastify/send@4.1.0': + dependencies: + '@lukeed/ms': 2.0.2 + escape-html: 1.0.3 +@@ -605,19 +684,23 @@ + http-errors: 2.0.0 + mime: 3.0.0 + +- '@fastify/static@6.12.0': ++ '@fastify/static@8.3.0': + dependencies: +- '@fastify/accept-negotiator': 1.1.0 +- '@fastify/send': 2.1.0 ++ '@fastify/accept-negotiator': 2.0.1 ++ '@fastify/send': 4.1.0 + content-disposition: 0.5.4 +- fastify-plugin: 4.5.1 +- glob: 8.1.0 +- p-limit: 3.1.0 ++ fastify-plugin: 5.1.0 ++ fastq: 1.19.1 ++ glob: 11.1.0 ++ ++ '@isaacs/cliui@9.0.0': {} + + '@lukeed/ms@2.0.2': {} + + '@open-draft/deferred-promise@2.2.0': {} + ++ '@pinojs/redact@0.4.0': {} ++ + '@types/mime-db@1.43.5': {} + + '@types/mustache@4.2.5': {} +@@ -628,10 +711,6 @@ + + abstract-logging@2.0.1: {} + +- ajv-formats@2.1.1(ajv@8.17.1): +- optionalDependencies: +- ajv: 8.17.1 +- + ajv-formats@3.0.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 +@@ -645,24 +724,30 @@ + + atomic-sleep@1.0.0: {} + +- avvio@8.4.0: ++ avvio@9.2.0: + dependencies: +- '@fastify/error': 3.4.1 ++ '@fastify/error': 4.2.0 + fastq: 1.19.1 + +- balanced-match@1.0.2: {} ++ balanced-match@4.0.4: {} + + base-x@4.0.1: {} + +- brace-expansion@2.0.1: ++ brace-expansion@5.0.5: + dependencies: +- balanced-match: 1.0.2 ++ balanced-match: 4.0.4 + + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + +- cookie@0.7.2: {} ++ cookie@1.1.1: {} ++ ++ cross-spawn@7.0.6: ++ dependencies: ++ path-key: 3.1.1 ++ shebang-command: 2.0.0 ++ which: 2.0.2 + + debug@4.4.0: + dependencies: +@@ -670,86 +755,84 @@ + + depd@2.0.0: {} + ++ dequal@2.0.3: {} ++ + dotenv@16.4.7: {} + +- esbuild-register@3.6.0(esbuild@0.17.19): ++ esbuild-register@3.6.0(esbuild@0.25.12): + dependencies: + debug: 4.4.0 +- esbuild: 0.17.19 ++ esbuild: 0.25.12 + transitivePeerDependencies: + - supports-color + +- esbuild@0.17.19: ++ esbuild@0.25.12: + optionalDependencies: +- '@esbuild/android-arm': 0.17.19 +- '@esbuild/android-arm64': 0.17.19 +- '@esbuild/android-x64': 0.17.19 +- '@esbuild/darwin-arm64': 0.17.19 +- '@esbuild/darwin-x64': 0.17.19 +- '@esbuild/freebsd-arm64': 0.17.19 +- '@esbuild/freebsd-x64': 0.17.19 +- '@esbuild/linux-arm': 0.17.19 +- '@esbuild/linux-arm64': 0.17.19 +- '@esbuild/linux-ia32': 0.17.19 +- '@esbuild/linux-loong64': 0.17.19 +- '@esbuild/linux-mips64el': 0.17.19 +- '@esbuild/linux-ppc64': 0.17.19 +- '@esbuild/linux-riscv64': 0.17.19 +- '@esbuild/linux-s390x': 0.17.19 +- '@esbuild/linux-x64': 0.17.19 +- '@esbuild/netbsd-x64': 0.17.19 +- '@esbuild/openbsd-x64': 0.17.19 +- '@esbuild/sunos-x64': 0.17.19 +- '@esbuild/win32-arm64': 0.17.19 +- '@esbuild/win32-ia32': 0.17.19 +- '@esbuild/win32-x64': 0.17.19 ++ '@esbuild/aix-ppc64': 0.25.12 ++ '@esbuild/android-arm': 0.25.12 ++ '@esbuild/android-arm64': 0.25.12 ++ '@esbuild/android-x64': 0.25.12 ++ '@esbuild/darwin-arm64': 0.25.12 ++ '@esbuild/darwin-x64': 0.25.12 ++ '@esbuild/freebsd-arm64': 0.25.12 ++ '@esbuild/freebsd-x64': 0.25.12 ++ '@esbuild/linux-arm': 0.25.12 ++ '@esbuild/linux-arm64': 0.25.12 ++ '@esbuild/linux-ia32': 0.25.12 ++ '@esbuild/linux-loong64': 0.25.12 ++ '@esbuild/linux-mips64el': 0.25.12 ++ '@esbuild/linux-ppc64': 0.25.12 ++ '@esbuild/linux-riscv64': 0.25.12 ++ '@esbuild/linux-s390x': 0.25.12 ++ '@esbuild/linux-x64': 0.25.12 ++ '@esbuild/netbsd-arm64': 0.25.12 ++ '@esbuild/netbsd-x64': 0.25.12 ++ '@esbuild/openbsd-arm64': 0.25.12 ++ '@esbuild/openbsd-x64': 0.25.12 ++ '@esbuild/openharmony-arm64': 0.25.12 ++ '@esbuild/sunos-x64': 0.25.12 ++ '@esbuild/win32-arm64': 0.25.12 ++ '@esbuild/win32-ia32': 0.25.12 ++ '@esbuild/win32-x64': 0.25.12 + + escape-html@1.0.3: {} + +- fast-content-type-parse@1.1.0: {} +- + fast-decode-uri-component@1.0.1: {} + + fast-deep-equal@3.1.3: {} + +- fast-json-stringify@5.16.1: ++ fast-json-stringify@6.3.0: + dependencies: +- '@fastify/merge-json-schemas': 0.1.1 ++ '@fastify/merge-json-schemas': 0.2.1 + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) +- fast-deep-equal: 3.1.3 +- fast-uri: 2.4.0 +- json-schema-ref-resolver: 1.0.1 ++ fast-uri: 3.0.6 ++ json-schema-ref-resolver: 3.0.0 + rfdc: 1.4.1 + + fast-querystring@1.1.2: + dependencies: + fast-decode-uri-component: 1.0.1 + +- fast-redact@3.5.0: {} +- +- fast-uri@2.4.0: {} +- + fast-uri@3.0.6: {} + +- fastify-plugin@4.5.1: {} ++ fastify-plugin@5.1.0: {} + +- fastify@4.29.0: ++ fastify@5.8.4: + dependencies: +- '@fastify/ajv-compiler': 3.6.0 +- '@fastify/error': 3.4.1 +- '@fastify/fast-json-stringify-compiler': 4.3.0 ++ '@fastify/ajv-compiler': 4.0.5 ++ '@fastify/error': 4.2.0 ++ '@fastify/fast-json-stringify-compiler': 5.0.3 ++ '@fastify/proxy-addr': 5.1.0 + abstract-logging: 2.0.1 +- avvio: 8.4.0 +- fast-content-type-parse: 1.1.0 +- fast-json-stringify: 5.16.1 +- find-my-way: 8.2.2 +- light-my-request: 5.14.0 +- pino: 9.6.0 +- process-warning: 3.0.0 +- proxy-addr: 2.0.7 ++ avvio: 9.2.0 ++ fast-json-stringify: 6.3.0 ++ find-my-way: 9.5.0 ++ light-my-request: 6.6.0 ++ pino: 10.3.1 ++ process-warning: 5.0.0 + rfdc: 1.4.1 +- secure-json-parse: 2.7.0 ++ secure-json-parse: 4.1.0 + semver: 7.7.1 + toad-cache: 3.7.0 + +@@ -757,23 +840,25 @@ + dependencies: + reusify: 1.1.0 + +- find-my-way@8.2.2: ++ find-my-way@9.5.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-querystring: 1.1.2 +- safe-regex2: 3.1.0 +- +- forwarded@0.2.0: {} ++ safe-regex2: 5.1.0 + +- fs.realpath@1.0.0: {} ++ foreground-child@3.3.1: ++ dependencies: ++ cross-spawn: 7.0.6 ++ signal-exit: 4.1.0 + +- glob@8.1.0: ++ glob@11.1.0: + dependencies: +- fs.realpath: 1.0.0 +- inflight: 1.0.6 +- inherits: 2.0.4 +- minimatch: 5.1.6 +- once: 1.4.0 ++ foreground-child: 3.3.1 ++ jackspeak: 4.2.3 ++ minimatch: 10.2.5 ++ minipass: 7.1.3 ++ package-json-from-dist: 1.0.1 ++ path-scurry: 2.0.2 + + http-errors@2.0.0: + dependencies: +@@ -783,34 +868,39 @@ + statuses: 2.0.1 + toidentifier: 1.0.1 + +- inflight@1.0.6: +- dependencies: +- once: 1.4.0 +- wrappy: 1.0.2 +- + inherits@2.0.4: {} + +- ipaddr.js@1.9.1: {} ++ ipaddr.js@2.3.0: {} + +- json-schema-ref-resolver@1.0.1: ++ isexe@2.0.0: {} ++ ++ jackspeak@4.2.3: + dependencies: +- fast-deep-equal: 3.1.3 ++ '@isaacs/cliui': 9.0.0 ++ ++ json-schema-ref-resolver@3.0.0: ++ dependencies: ++ dequal: 2.0.3 + + json-schema-traverse@1.0.0: {} + +- light-my-request@5.14.0: ++ light-my-request@6.6.0: + dependencies: +- cookie: 0.7.2 +- process-warning: 3.0.0 ++ cookie: 1.1.1 ++ process-warning: 4.0.1 + set-cookie-parser: 2.7.1 + ++ lru-cache@11.3.3: {} ++ + mime-db@1.54.0: {} + + mime@3.0.0: {} + +- minimatch@5.1.6: ++ minimatch@10.2.5: + dependencies: +- brace-expansion: 2.0.1 ++ brace-expansion: 5.0.5 ++ ++ minipass@7.1.3: {} + + ms@2.1.3: {} + +@@ -818,44 +908,40 @@ + + on-exit-leak-free@2.1.2: {} + +- once@1.4.0: +- dependencies: +- wrappy: 1.0.2 +- + outvariant@1.4.3: {} + +- p-limit@3.1.0: ++ package-json-from-dist@1.0.1: {} ++ ++ path-key@3.1.1: {} ++ ++ path-scurry@2.0.2: + dependencies: +- yocto-queue: 0.1.0 ++ lru-cache: 11.3.3 ++ minipass: 7.1.3 + +- pino-abstract-transport@2.0.0: ++ pino-abstract-transport@3.0.0: + dependencies: + split2: 4.2.0 + + pino-std-serializers@7.0.0: {} + +- pino@9.6.0: ++ pino@10.3.1: + dependencies: ++ '@pinojs/redact': 0.4.0 + atomic-sleep: 1.0.0 +- fast-redact: 3.5.0 + on-exit-leak-free: 2.1.2 +- pino-abstract-transport: 2.0.0 ++ pino-abstract-transport: 3.0.0 + pino-std-serializers: 7.0.0 +- process-warning: 4.0.1 ++ process-warning: 5.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.5.0 + sonic-boom: 4.2.0 +- thread-stream: 3.1.0 +- +- process-warning@3.0.0: {} ++ thread-stream: 4.0.0 + + process-warning@4.0.1: {} + +- proxy-addr@2.0.7: +- dependencies: +- forwarded: 0.2.0 +- ipaddr.js: 1.9.1 ++ process-warning@5.0.0: {} + + quick-format-unescaped@4.0.4: {} + +@@ -863,7 +949,7 @@ + + require-from-string@2.0.2: {} + +- ret@0.4.3: {} ++ ret@0.5.0: {} + + reusify@1.1.0: {} + +@@ -871,13 +957,13 @@ + + safe-buffer@5.2.1: {} + +- safe-regex2@3.1.0: ++ safe-regex2@5.1.0: + dependencies: +- ret: 0.4.3 ++ ret: 0.5.0 + + safe-stable-stringify@2.5.0: {} + +- secure-json-parse@2.7.0: {} ++ secure-json-parse@4.1.0: {} + + semver@7.7.1: {} + +@@ -885,6 +971,14 @@ + + setprototypeof@1.2.0: {} + ++ shebang-command@2.0.0: ++ dependencies: ++ shebang-regex: 3.0.0 ++ ++ shebang-regex@3.0.0: {} ++ ++ signal-exit@4.1.0: {} ++ + sonic-boom@4.2.0: + dependencies: + atomic-sleep: 1.0.0 +@@ -893,7 +987,7 @@ + + statuses@2.0.1: {} + +- thread-stream@3.1.0: ++ thread-stream@4.0.0: + dependencies: + real-require: 0.2.0 + +@@ -905,6 +999,6 @@ + + undici-types@5.26.5: {} + +- wrappy@1.0.2: {} +- +- yocto-queue@0.1.0: {} ++ which@2.0.2: ++ dependencies: ++ isexe: 2.0.0 diff --git a/system/machines/server/system.nix b/system/machines/server/system.nix index 1b64047..c5c839a 100644 --- a/system/machines/server/system.nix +++ b/system/machines/server/system.nix @@ -14,6 +14,7 @@ modules.system = { nginx.enable = true; + sandpack.enable = true; forgejo.enable = true; frigate.enable = true; immich.enable = true;