From 34afd371ade2ffeaf5944e1419a7ff911c43b295 Mon Sep 17 00:00:00 2001 From: DatCaptainHorse Date: Thu, 19 Feb 2026 18:02:10 +0200 Subject: [PATCH] feat: WIP s6-overlay and friends --- bun.lock | 306 +++-- .../desktop-hyprland-runner.Containerfile | 23 + .../desktop-kdeplasma-runner.Containerfile | 39 + containerfiles/heroic-runner.Containerfile | 4 - containerfiles/minecraft-runner.Containerfile | 4 - containerfiles/relay.Containerfile | 4 +- containerfiles/runner-base.Containerfile | 2 +- containerfiles/runner-builder.Containerfile | 17 +- containerfiles/runner-common.Containerfile | 53 +- containerfiles/steam-runner.Containerfile | 11 +- .../application/dependencies.d/compositor | 0 .../application/dependencies.d/dbus-session | 0 .../application/dependencies.d/nestri-server | 0 .../s6-overlay/application/notification-fd | 1 + packages/configs/s6-overlay/application/run | 25 + packages/configs/s6-overlay/application/type | 1 + .../compositor/dependencies.d/dbus-session | 0 .../compositor/dependencies.d/nestri-server | 0 .../s6-overlay/compositor/notification-fd | 1 + packages/configs/s6-overlay/compositor/run | 44 + packages/configs/s6-overlay/compositor/type | 1 + .../dbus-session/dependencies.d/dbus-system | 0 .../s6-overlay/dbus-session/notification-fd | 1 + packages/configs/s6-overlay/dbus-session/run | 25 + packages/configs/s6-overlay/dbus-session/type | 1 + .../dbus-system/dependencies.d/init | 0 .../s6-overlay/dbus-system/notification-fd | 1 + packages/configs/s6-overlay/dbus-system/run | 25 + packages/configs/s6-overlay/dbus-system/type | 1 + packages/configs/s6-overlay/init/run | 238 ++++ packages/configs/s6-overlay/init/type | 1 + packages/configs/s6-overlay/init/up | 1 + .../nestri-server/dependencies.d/dbus-session | 0 .../nestri-server/dependencies.d/pipewire | 0 .../dependencies.d/pipewire-pulse | 0 .../dependencies.d/vimputti-manager | 0 .../nestri-server/dependencies.d/wireplumber | 0 .../s6-overlay/nestri-server/notification-fd | 1 + packages/configs/s6-overlay/nestri-server/run | 25 + .../configs/s6-overlay/nestri-server/type | 1 + .../dependencies.d/dbus-session | 0 .../pipewire-pulse/dependencies.d/pipewire | 0 .../s6-overlay/pipewire-pulse/notification-fd | 1 + .../configs/s6-overlay/pipewire-pulse/run | 26 + .../configs/s6-overlay/pipewire-pulse/type | 1 + .../pipewire/dependencies.d/dbus-session | 0 .../s6-overlay/pipewire/notification-fd | 1 + packages/configs/s6-overlay/pipewire/run | 26 + packages/configs/s6-overlay/pipewire/type | 1 + .../s6-overlay/user/contents.d/application | 0 .../s6-overlay/user/contents.d/compositor | 0 .../s6-overlay/user/contents.d/nestri-server | 0 .../dependencies.d/dbus-session | 0 .../vimputti-manager/notification-fd | 1 + .../configs/s6-overlay/vimputti-manager/run | 27 + .../configs/s6-overlay/vimputti-manager/type | 1 + .../wireplumber/dependencies.d/dbus-session | 0 .../wireplumber/dependencies.d/dbus-system | 0 .../wireplumber/dependencies.d/pipewire | 0 .../wireplumber/dependencies.d/pipewire-pulse | 0 .../s6-overlay/wireplumber/notification-fd | 1 + packages/configs/s6-overlay/wireplumber/run | 20 + packages/configs/s6-overlay/wireplumber/type | 1 + packages/input/package.json | 22 +- packages/input/src/keyboard.ts | 57 +- packages/input/src/mouse.ts | 13 +- packages/play-standalone/package.json | 4 +- .../fonts/GeistMono-VariableFont_wght.ttf | Bin 0 -> 137804 bytes .../src/components/NerdStats.astro | 153 +++ .../src/layouts/DefaultLayout.astro | 14 + .../play-standalone/src/pages/[room].astro | 171 ++- packages/relay/go.mod | 59 +- packages/relay/go.sum | 269 +--- packages/relay/internal/common/common.go | 16 +- packages/relay/internal/common/flags.go | 35 +- .../relay/internal/core/protocol_stream.go | 32 +- packages/relay/internal/core/room.go | 15 +- packages/relay/internal/proto/messages.pb.go | 2 +- packages/relay/internal/shared/participant.go | 20 + packages/relay/internal/shared/room.go | 39 +- packages/scripts/cloud/upcloud-rocky10.sh | 35 + packages/scripts/common.sh | 20 + packages/scripts/entrypoint.sh | 2 +- packages/scripts/entrypoint_nestri.sh | 21 +- packages/scripts/envs.sh | 4 + packages/scripts/pressure-vent.sh | 54 + packages/server/Cargo.lock | 1131 +++++++++++------ packages/server/Cargo.toml | 10 +- packages/server/rust-toolchain.toml | 2 +- packages/server/src/enc_helper.rs | 4 +- packages/server/src/main.rs | 52 +- packages/server/src/nestrisink/imp.rs | 17 +- .../server/src/p2p/p2p_protocol_stream.rs | 3 +- packages/server/src/proto/proto.rs | 157 +-- protobufs/messages.proto | 1 + protobufs/types.proto | 5 + 96 files changed, 2340 insertions(+), 1063 deletions(-) create mode 100644 containerfiles/desktop-hyprland-runner.Containerfile create mode 100644 containerfiles/desktop-kdeplasma-runner.Containerfile create mode 100644 packages/configs/s6-overlay/application/dependencies.d/compositor create mode 100644 packages/configs/s6-overlay/application/dependencies.d/dbus-session create mode 100644 packages/configs/s6-overlay/application/dependencies.d/nestri-server create mode 100644 packages/configs/s6-overlay/application/notification-fd create mode 100644 packages/configs/s6-overlay/application/run create mode 100644 packages/configs/s6-overlay/application/type create mode 100644 packages/configs/s6-overlay/compositor/dependencies.d/dbus-session create mode 100644 packages/configs/s6-overlay/compositor/dependencies.d/nestri-server create mode 100644 packages/configs/s6-overlay/compositor/notification-fd create mode 100644 packages/configs/s6-overlay/compositor/run create mode 100644 packages/configs/s6-overlay/compositor/type create mode 100644 packages/configs/s6-overlay/dbus-session/dependencies.d/dbus-system create mode 100644 packages/configs/s6-overlay/dbus-session/notification-fd create mode 100644 packages/configs/s6-overlay/dbus-session/run create mode 100644 packages/configs/s6-overlay/dbus-session/type create mode 100644 packages/configs/s6-overlay/dbus-system/dependencies.d/init create mode 100644 packages/configs/s6-overlay/dbus-system/notification-fd create mode 100644 packages/configs/s6-overlay/dbus-system/run create mode 100644 packages/configs/s6-overlay/dbus-system/type create mode 100644 packages/configs/s6-overlay/init/run create mode 100644 packages/configs/s6-overlay/init/type create mode 100644 packages/configs/s6-overlay/init/up create mode 100644 packages/configs/s6-overlay/nestri-server/dependencies.d/dbus-session create mode 100644 packages/configs/s6-overlay/nestri-server/dependencies.d/pipewire create mode 100644 packages/configs/s6-overlay/nestri-server/dependencies.d/pipewire-pulse create mode 100644 packages/configs/s6-overlay/nestri-server/dependencies.d/vimputti-manager create mode 100644 packages/configs/s6-overlay/nestri-server/dependencies.d/wireplumber create mode 100644 packages/configs/s6-overlay/nestri-server/notification-fd create mode 100644 packages/configs/s6-overlay/nestri-server/run create mode 100644 packages/configs/s6-overlay/nestri-server/type create mode 100644 packages/configs/s6-overlay/pipewire-pulse/dependencies.d/dbus-session create mode 100644 packages/configs/s6-overlay/pipewire-pulse/dependencies.d/pipewire create mode 100644 packages/configs/s6-overlay/pipewire-pulse/notification-fd create mode 100644 packages/configs/s6-overlay/pipewire-pulse/run create mode 100644 packages/configs/s6-overlay/pipewire-pulse/type create mode 100644 packages/configs/s6-overlay/pipewire/dependencies.d/dbus-session create mode 100644 packages/configs/s6-overlay/pipewire/notification-fd create mode 100644 packages/configs/s6-overlay/pipewire/run create mode 100644 packages/configs/s6-overlay/pipewire/type create mode 100644 packages/configs/s6-overlay/user/contents.d/application create mode 100644 packages/configs/s6-overlay/user/contents.d/compositor create mode 100644 packages/configs/s6-overlay/user/contents.d/nestri-server create mode 100644 packages/configs/s6-overlay/vimputti-manager/dependencies.d/dbus-session create mode 100644 packages/configs/s6-overlay/vimputti-manager/notification-fd create mode 100644 packages/configs/s6-overlay/vimputti-manager/run create mode 100644 packages/configs/s6-overlay/vimputti-manager/type create mode 100644 packages/configs/s6-overlay/wireplumber/dependencies.d/dbus-session create mode 100644 packages/configs/s6-overlay/wireplumber/dependencies.d/dbus-system create mode 100644 packages/configs/s6-overlay/wireplumber/dependencies.d/pipewire create mode 100644 packages/configs/s6-overlay/wireplumber/dependencies.d/pipewire-pulse create mode 100644 packages/configs/s6-overlay/wireplumber/notification-fd create mode 100644 packages/configs/s6-overlay/wireplumber/run create mode 100644 packages/configs/s6-overlay/wireplumber/type create mode 100644 packages/play-standalone/public/fonts/GeistMono-VariableFont_wght.ttf create mode 100644 packages/play-standalone/src/components/NerdStats.astro create mode 100644 packages/scripts/cloud/upcloud-rocky10.sh create mode 100644 packages/scripts/pressure-vent.sh diff --git a/bun.lock b/bun.lock index d25adf25..61cc3e03 100644 --- a/bun.lock +++ b/bun.lock @@ -89,23 +89,23 @@ "name": "@nestri/input", "version": "0.0.0", "dependencies": { - "@bufbuild/protobuf": "^2.10.0", + "@bufbuild/protobuf": "^2.10.2", "@chainsafe/libp2p-noise": "^17.0.0", - "@chainsafe/libp2p-quic": "^1.1.3", + "@chainsafe/libp2p-quic": "^1.1.8", "@chainsafe/libp2p-yamux": "^8.0.1", - "@libp2p/identify": "^4.0.5", - "@libp2p/interface": "^3.0.2", - "@libp2p/ping": "^3.0.5", - "@libp2p/utils": "^7.0.5", - "@libp2p/websockets": "^10.0.6", - "@libp2p/webtransport": "^6.0.7", + "@libp2p/identify": "^4.0.9", + "@libp2p/interface": "^3.1.0", + "@libp2p/ping": "^3.0.9", + "@libp2p/utils": "^7.0.9", + "@libp2p/websockets": "^10.1.2", + "@libp2p/webtransport": "^6.0.11", "@multiformats/multiaddr": "^13.0.1", - "libp2p": "^3.0.6", + "libp2p": "^3.1.2", "uint8arraylist": "^2.4.8", }, "devDependencies": { - "@bufbuild/buf": "^1.59.0", - "@bufbuild/protoc-gen-es": "^2.10.0", + "@bufbuild/buf": "^1.61.0", + "@bufbuild/protoc-gen-es": "^2.10.2", }, }, "packages/moq": { @@ -123,9 +123,9 @@ "name": "play-standalone", "version": "0.0.1", "dependencies": { - "@astrojs/node": "9.5.0", + "@astrojs/node": "9.5.1", "@nestri/input": "*", - "astro": "5.15.1", + "astro": "5.16.5", }, }, "packages/www": { @@ -202,13 +202,13 @@ "@ark/util": ["@ark/util@0.25.0", "", {}, "sha512-yo2Me+tYnmr6E0E3maZzu643/rL07oR25yBHkH24gllssqYcd6EPCvZE23GEKgbk0iac9J73GlJ9pkgZj43Q2g=="], - "@astrojs/compiler": ["@astrojs/compiler@2.12.2", "", {}, "sha512-w2zfvhjNCkNMmMMOn5b0J8+OmUaBL1o40ipMvqcG6NRpdC+lKxmTi48DT8Xw0SzJ3AfmeFLB45zXZXtmbsjcgw=="], + "@astrojs/compiler": ["@astrojs/compiler@2.13.0", "", {}, "sha512-mqVORhUJViA28fwHYaWmsXSzLO9osbdZ5ImUfxBarqsYdMlPbqAqGJCxsNzvppp1BEzc1mJNjOVvQqeDN8Vspw=="], - "@astrojs/internal-helpers": ["@astrojs/internal-helpers@0.7.4", "", {}, "sha512-lDA9MqE8WGi7T/t2BMi+EAXhs4Vcvr94Gqx3q15cFEz8oFZMO4/SFBqYr/UcmNlvW+35alowkVj+w9VhLvs5Cw=="], + "@astrojs/internal-helpers": ["@astrojs/internal-helpers@0.7.5", "", {}, "sha512-vreGnYSSKhAjFJCWAwe/CNhONvoc5lokxtRoZims+0wa3KbHBdPHSSthJsKxPd8d/aic6lWKpRTYGY/hsgK6EA=="], - "@astrojs/markdown-remark": ["@astrojs/markdown-remark@6.3.8", "", { "dependencies": { "@astrojs/internal-helpers": "0.7.4", "@astrojs/prism": "3.3.0", "github-slugger": "^2.0.0", "hast-util-from-html": "^2.0.3", "hast-util-to-text": "^4.0.2", "import-meta-resolve": "^4.2.0", "js-yaml": "^4.1.0", "mdast-util-definitions": "^6.0.0", "rehype-raw": "^7.0.0", "rehype-stringify": "^10.0.1", "remark-gfm": "^4.0.1", "remark-parse": "^11.0.0", "remark-rehype": "^11.1.2", "remark-smartypants": "^3.0.2", "shiki": "^3.13.0", "smol-toml": "^1.4.2", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.0.0", "unist-util-visit-parents": "^6.0.1", "vfile": "^6.0.3" } }, "sha512-uFNyFWadnULWK2cOw4n0hLKeu+xaVWeuECdP10cQ3K2fkybtTlhb7J7TcScdjmS8Yps7oje9S/ehYMfZrhrgCg=="], + "@astrojs/markdown-remark": ["@astrojs/markdown-remark@6.3.10", "", { "dependencies": { "@astrojs/internal-helpers": "0.7.5", "@astrojs/prism": "3.3.0", "github-slugger": "^2.0.0", "hast-util-from-html": "^2.0.3", "hast-util-to-text": "^4.0.2", "import-meta-resolve": "^4.2.0", "js-yaml": "^4.1.1", "mdast-util-definitions": "^6.0.0", "rehype-raw": "^7.0.0", "rehype-stringify": "^10.0.1", "remark-gfm": "^4.0.1", "remark-parse": "^11.0.0", "remark-rehype": "^11.1.2", "remark-smartypants": "^3.0.2", "shiki": "^3.19.0", "smol-toml": "^1.5.2", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.0.0", "unist-util-visit-parents": "^6.0.2", "vfile": "^6.0.3" } }, "sha512-kk4HeYR6AcnzC4QV8iSlOfh+N8TZ3MEStxPyenyCtemqn8IpEATBFMTJcfrNW32dgpt6MY3oCkMM/Tv3/I4G3A=="], - "@astrojs/node": ["@astrojs/node@9.5.0", "", { "dependencies": { "@astrojs/internal-helpers": "0.7.4", "send": "^1.2.0", "server-destroy": "^1.0.1" }, "peerDependencies": { "astro": "^5.14.3" } }, "sha512-x1whLIatmCefaqJA8FjfI+P6FStF+bqmmrib0OUGM1M3cZhAXKLgPx6UF2AzQ3JgpXgCWYM24MHtraPvZhhyLQ=="], + "@astrojs/node": ["@astrojs/node@9.5.1", "", { "dependencies": { "@astrojs/internal-helpers": "0.7.5", "send": "^1.2.0", "server-destroy": "^1.0.1" }, "peerDependencies": { "astro": "^5.14.3" } }, "sha512-7k+SU877OUQylPr0mFcWrGvNuC78Lp9w+GInY8Rwc+LkHyDP9xls+nZAioK0WDWd+fyeQnlHbpDGURO3ZHuDVg=="], "@astrojs/prism": ["@astrojs/prism@3.3.0", "", { "dependencies": { "prismjs": "^1.30.0" } }, "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ=="], @@ -362,29 +362,29 @@ "@badrap/valita": ["@badrap/valita@0.3.11", "", {}, "sha512-oak0W8bycFjnrLeVCVvZqkOWTGh74wCPKUxGLJyhRukRs+V/hQdfZp1eDcQE4Gf3UrtJWfR/Ou4Xe0DZqJZ2FA=="], - "@bufbuild/buf": ["@bufbuild/buf@1.59.0", "", { "optionalDependencies": { "@bufbuild/buf-darwin-arm64": "1.59.0", "@bufbuild/buf-darwin-x64": "1.59.0", "@bufbuild/buf-linux-aarch64": "1.59.0", "@bufbuild/buf-linux-armv7": "1.59.0", "@bufbuild/buf-linux-x64": "1.59.0", "@bufbuild/buf-win32-arm64": "1.59.0", "@bufbuild/buf-win32-x64": "1.59.0" }, "bin": { "buf": "bin/buf", "protoc-gen-buf-breaking": "bin/protoc-gen-buf-breaking", "protoc-gen-buf-lint": "bin/protoc-gen-buf-lint" } }, "sha512-VdLuGnFp1OKJaiMevlLow6Jcvv9omOyM02Qa1zexl8dBB4Ac2ggz6bpT3Zb06tmCnqd8tFrI/Im1fbom3CznlQ=="], + "@bufbuild/buf": ["@bufbuild/buf@1.61.0", "", { "optionalDependencies": { "@bufbuild/buf-darwin-arm64": "1.61.0", "@bufbuild/buf-darwin-x64": "1.61.0", "@bufbuild/buf-linux-aarch64": "1.61.0", "@bufbuild/buf-linux-armv7": "1.61.0", "@bufbuild/buf-linux-x64": "1.61.0", "@bufbuild/buf-win32-arm64": "1.61.0", "@bufbuild/buf-win32-x64": "1.61.0" }, "bin": { "buf": "bin/buf", "protoc-gen-buf-lint": "bin/protoc-gen-buf-lint", "protoc-gen-buf-breaking": "bin/protoc-gen-buf-breaking" } }, "sha512-9kKZK/GjhIDUj50pngmjtC6bGFl6U1rFDH2gZJATRfp2vNnQPsb6BqZ+2lea37bgHBYdAYttlve8wnXszXmftA=="], - "@bufbuild/buf-darwin-arm64": ["@bufbuild/buf-darwin-arm64@1.59.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-d3JTxBCibC+C94JU0jwLMgo/WBhaAHBIRzZXaZ3Y8KREjTj3jhzAlelGZmCtQJyyE0l6DFSm3lQgMblJ5qlq/w=="], + "@bufbuild/buf-darwin-arm64": ["@bufbuild/buf-darwin-arm64@1.61.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-8vUGNV65LNPp+HT3NuCT9i/mCUEyLrSFctJ2Dz8JqnUu8fVPm4f8lVBSCT0TYLoQ8o8xb/A7bwWu14aKfXxgCg=="], - "@bufbuild/buf-darwin-x64": ["@bufbuild/buf-darwin-x64@1.59.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-eFnFB96GM6KjP5S8QFqjufjlMF41CVnXjkR8cIfR5jUXdwl1vf5S82Zv+cK1+Uogqhmt7AVBntd5Z+xmz4NKaw=="], + "@bufbuild/buf-darwin-x64": ["@bufbuild/buf-darwin-x64@1.61.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-dyJghwTYXT6e/Ec+2iPWijquTzyT+5vTItX4R7hM/soNQOs4eEo2z7EHLqvclHyi7+p7+8xye3z+BFM33ucM8A=="], - "@bufbuild/buf-linux-aarch64": ["@bufbuild/buf-linux-aarch64@1.59.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-g6DxTcJM29SBvqe42ll7HpkmTfecuG+PZYTysaxON9Y59fwtflhuLDpNqGhxWehHMkH11bFfpNeCGKjpGbVvkw=="], + "@bufbuild/buf-linux-aarch64": ["@bufbuild/buf-linux-aarch64@1.61.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-9r5DRqwpq3WX0ltzt1p/Oe+8g679Fg4XJLaH/zmjqpwHVO+tNzYy7PHK4qWg83PCoANw6OVizl+iTmnE0vbklg=="], - "@bufbuild/buf-linux-armv7": ["@bufbuild/buf-linux-armv7@1.59.0", "", { "os": "linux", "cpu": "arm" }, "sha512-C92s+gmKnAyCzN7MdbtukRXOiW7e0hkeQrOie17vF6qWXPk2r9ix0WXZvg5gZr9R4zD8pOYwRVwYiB9zFXZOaA=="], + "@bufbuild/buf-linux-armv7": ["@bufbuild/buf-linux-armv7@1.61.0", "", { "os": "linux", "cpu": "arm" }, "sha512-P2cSlzu68omZ6kyijMcYezZJFS4XayfLA0ATm1HP0zUaV+xVoeMOGhKvMWUFAa9SGYUs4Drxi2fyK/c2ZFA8sw=="], - "@bufbuild/buf-linux-x64": ["@bufbuild/buf-linux-x64@1.59.0", "", { "os": "linux", "cpu": "x64" }, "sha512-Pzc3TFm1t2fZ5uT7jkYBjyuLNKo5ji/wRl/lLLvOlTFRyqsSZBkFNQcJGHoHSej1yDWau16VMrAh0GN1rZfvAg=="], + "@bufbuild/buf-linux-x64": ["@bufbuild/buf-linux-x64@1.61.0", "", { "os": "linux", "cpu": "x64" }, "sha512-USDSLB0vkrR6Sk/VDtECLdOKHfynenCjnAchr9bdqC137IVJT7TVT8JhBW0UWMmXDZYjwbDrBLITwWj8hwk6Uw=="], - "@bufbuild/buf-win32-arm64": ["@bufbuild/buf-win32-arm64@1.59.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-hS5VThgYNqbMFgY9SibDA/RXBdegw12jgrT2H+Tzaa2rvlSADck9ZAq9rwf2H0IvFJOqtR75Lejb+5Fx2rThpQ=="], + "@bufbuild/buf-win32-arm64": ["@bufbuild/buf-win32-arm64@1.61.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-36n90c0lzhDMXRKhht8XreUCha4OTY7yR6g+bnkAFUXSbCbR3BpqrenWvl5NBtfX2Y70dmvjKnGwVanSIrb1uA=="], - "@bufbuild/buf-win32-x64": ["@bufbuild/buf-win32-x64@1.59.0", "", { "os": "win32", "cpu": "x64" }, "sha512-JAGSF3oaKC2L/TelqvjB1N7oB5pTiviVr8mxiaxHyv4HpvcxCVdiO+iw0goRhZb4QHhYYswk2gLMezWHBxtR/g=="], + "@bufbuild/buf-win32-x64": ["@bufbuild/buf-win32-x64@1.61.0", "", { "os": "win32", "cpu": "x64" }, "sha512-uBIU7tQlCBPyoeJZH0NzL6y9Y4ikje4OlgHYGssbaPLsCKELSFDHQkHFabkwnVeXSUf9Intq+U3jtb+qOIlflw=="], - "@bufbuild/protobuf": ["@bufbuild/protobuf@2.10.0", "", {}, "sha512-fdRs9PSrBF7QUntpZpq6BTw58fhgGJojgg39m9oFOJGZT+nip9b0so5cYY1oWl5pvemDLr0cPPsH46vwThEbpQ=="], + "@bufbuild/protobuf": ["@bufbuild/protobuf@2.10.2", "", {}, "sha512-uFsRXwIGyu+r6AMdz+XijIIZJYpoWeYzILt5yZ2d3mCjQrWUTVpVD9WL/jZAbvp+Ed04rOhrsk7FiTcEDseB5A=="], - "@bufbuild/protoc-gen-es": ["@bufbuild/protoc-gen-es@2.10.0", "", { "dependencies": { "@bufbuild/protobuf": "2.10.0", "@bufbuild/protoplugin": "2.10.0" }, "bin": { "protoc-gen-es": "bin/protoc-gen-es" } }, "sha512-g3xtuxeMkbacn8/qWQ8NbHBA8unLAvGD7sjcXV1/lfO4iCfd6hYL1Z+rn2yLQZE/JEkG+GPZoIs7m5KI5VYaMw=="], + "@bufbuild/protoc-gen-es": ["@bufbuild/protoc-gen-es@2.10.2", "", { "dependencies": { "@bufbuild/protobuf": "2.10.2", "@bufbuild/protoplugin": "2.10.2" }, "bin": { "protoc-gen-es": "bin/protoc-gen-es" } }, "sha512-vbjPsuofbtZwZXuOP7Y16CQsxrwCjuRONffmJSBEhoC7PQu/Cabp0+Fu/poLPm9CNM0tDCQA0xvgobgudaEYxQ=="], - "@bufbuild/protoplugin": ["@bufbuild/protoplugin@2.10.0", "", { "dependencies": { "@bufbuild/protobuf": "2.10.0", "@typescript/vfs": "^1.5.2", "typescript": "5.4.5" } }, "sha512-GPJOZ1Gp9/Ci3MXP3yI7+q4G7IhB5cSpbLjsfnBILxtNx69I9+ix3r9P7JfewHvqMjtPe6L+YWX1LPBGNfZMGw=="], + "@bufbuild/protoplugin": ["@bufbuild/protoplugin@2.10.2", "", { "dependencies": { "@bufbuild/protobuf": "2.10.2", "@typescript/vfs": "^1.6.2", "typescript": "5.4.5" } }, "sha512-RAWVs9tCzRqSS3tUtaFhOcauOAazCrm7tlGh0WHFq/44n5Fj6YgefdlZEPIaAK6VAA+FdOoFgtOJK2Ji5U24pw=="], - "@capsizecss/unpack": ["@capsizecss/unpack@3.0.0", "", { "dependencies": { "fontkit": "^2.0.2" } }, "sha512-+ntATQe1AlL7nTOYjwjj6w3299CgRot48wL761TUGYpYgAou3AaONZazp0PKZyCyWhudWsjhq1nvRHOvbMzhTA=="], + "@capsizecss/unpack": ["@capsizecss/unpack@3.0.1", "", { "dependencies": { "fontkit": "^2.0.2" } }, "sha512-8XqW8xGn++Eqqbz3e9wKuK7mxryeRjs4LOHLxbh2lwKeSbuNR4NFifDZT4KzvjU6HMOPbiNTsWpniK5EJfTWkg=="], "@cbor-extract/cbor-extract-darwin-arm64": ["@cbor-extract/cbor-extract-darwin-arm64@2.2.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-P7swiOAdF7aSi0H+tHtHtr6zrpF3aAq/W9FXx5HektRvLTM2O89xCyXF3pk7pLc7QpaY7AoaE8UowVf9QBdh3w=="], @@ -406,21 +406,21 @@ "@chainsafe/libp2p-noise": ["@chainsafe/libp2p-noise@17.0.0", "", { "dependencies": { "@chainsafe/as-chacha20poly1305": "^0.1.0", "@chainsafe/as-sha256": "^1.2.0", "@libp2p/crypto": "^5.1.9", "@libp2p/interface": "^3.0.0", "@libp2p/peer-id": "^6.0.0", "@libp2p/utils": "^7.0.0", "@noble/ciphers": "^2.0.1", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0", "wherearewe": "^2.0.1" } }, "sha512-vwrmY2Y+L1xYhIDiEpl61KHxwrLCZoXzTpwhyk34u+3+6zCAZPL3GxH3i2cs+u5IYNoyLptORdH17RKFXy7upA=="], - "@chainsafe/libp2p-quic": ["@chainsafe/libp2p-quic@1.1.3", "", { "dependencies": { "@libp2p/crypto": "^5.1.7", "@libp2p/interface": "^2.10.5", "@libp2p/utils": "^6.7.1", "@multiformats/multiaddr": "^12.4.0", "@multiformats/multiaddr-matcher": "^2.0.1", "it-stream-types": "^2.0.2", "race-signal": "^1.1.3", "uint8arraylist": "^2.4.8" }, "optionalDependencies": { "@chainsafe/libp2p-quic-darwin-arm64": "1.1.3", "@chainsafe/libp2p-quic-darwin-x64": "1.1.3", "@chainsafe/libp2p-quic-linux-arm64-gnu": "1.1.3", "@chainsafe/libp2p-quic-linux-arm64-musl": "1.1.3", "@chainsafe/libp2p-quic-linux-x64-gnu": "1.1.3", "@chainsafe/libp2p-quic-linux-x64-musl": "1.1.3", "@chainsafe/libp2p-quic-win32-x64-msvc": "1.1.3" } }, "sha512-Y9F2vGPW5ZhvYYAcDC4dF6i92h+pch+BAXC1yfO2AX2KLyg8rVlECOkEffeStp06DL4knPZLN+Qi10EgOVfwwA=="], + "@chainsafe/libp2p-quic": ["@chainsafe/libp2p-quic@1.1.8", "", { "dependencies": { "@libp2p/crypto": "^5.1.7", "@libp2p/interface": "^2.10.5", "@libp2p/utils": "^6.7.1", "@multiformats/multiaddr": "^12.4.0", "@multiformats/multiaddr-matcher": "^2.0.1", "it-stream-types": "^2.0.2", "race-signal": "^1.1.3", "uint8arraylist": "^2.4.8" }, "optionalDependencies": { "@chainsafe/libp2p-quic-darwin-arm64": "1.1.8", "@chainsafe/libp2p-quic-darwin-x64": "1.1.8", "@chainsafe/libp2p-quic-linux-arm64-gnu": "1.1.8", "@chainsafe/libp2p-quic-linux-arm64-musl": "1.1.8", "@chainsafe/libp2p-quic-linux-x64-gnu": "1.1.8", "@chainsafe/libp2p-quic-linux-x64-musl": "1.1.8", "@chainsafe/libp2p-quic-win32-x64-msvc": "1.1.8" } }, "sha512-90jwMEk7qzIxMu2WhpA+8LaZ6uiwcX7WmbqCNoAEjOhNrJsLF+OoBCoNvb5SFML5UY0BVNnG238lEkSIspf6Vw=="], - "@chainsafe/libp2p-quic-darwin-arm64": ["@chainsafe/libp2p-quic-darwin-arm64@1.1.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-L9Ta/CalkCiKC910thxR6GfqD0Tmm8QfSbZ5eTY7sGUuYYeE5/73UOlNzVHZxEWid7uceYHBYETTAUkdSsy+RQ=="], + "@chainsafe/libp2p-quic-darwin-arm64": ["@chainsafe/libp2p-quic-darwin-arm64@1.1.8", "", { "os": "darwin", "cpu": "arm64" }, "sha512-/w7nvBNVS5898+psJOgI5HvKpVjp3JvV6cZvb9oV2a+bMa3m9iVSUDlXVh1rM2F1bXkfsYiy0aEziFRzp2ElmA=="], - "@chainsafe/libp2p-quic-darwin-x64": ["@chainsafe/libp2p-quic-darwin-x64@1.1.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-hxE4wL/PQop/r6OLpzeJJ3c4WDtfk7zWBKhX2Zjul0jHc5v04a1DRTEmugooaqeU7UNnBQkBsqiHcA8efuhNqg=="], + "@chainsafe/libp2p-quic-darwin-x64": ["@chainsafe/libp2p-quic-darwin-x64@1.1.8", "", { "os": "darwin", "cpu": "x64" }, "sha512-07gIpuUG5mm+THTHqqP5G38WG5t7xWAlk/ASIIQ+jFk4HX/S1zuWXAA63VTaA/kh3y+K9I341YHYwK6hgR1erg=="], - "@chainsafe/libp2p-quic-linux-arm64-gnu": ["@chainsafe/libp2p-quic-linux-arm64-gnu@1.1.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-XUyafb32UHdkuhgNYATnoBj81YfRlVl1MDW+OPHD3XPsIYkloUHlPD9Y2cBH9m17K0lvhe/3KndeQ3WLZ2syNA=="], + "@chainsafe/libp2p-quic-linux-arm64-gnu": ["@chainsafe/libp2p-quic-linux-arm64-gnu@1.1.8", "", { "os": "linux", "cpu": "arm64" }, "sha512-QTll87NloHghBbAVENjAGEtNOHbZjxVQQd8+b9zZm/Mjs2APzSxwxVebeUlxsm9Z8G0p3X5AdlweL+sNW92A2Q=="], - "@chainsafe/libp2p-quic-linux-arm64-musl": ["@chainsafe/libp2p-quic-linux-arm64-musl@1.1.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-cmYfa3heaSUN/ts4P1Y1N72Oi7frQdufDC8KzBOgD5WVSLnpXw4Nq8mVt6kf7WU1FLC6FUffKuz3mRWse1gGVg=="], + "@chainsafe/libp2p-quic-linux-arm64-musl": ["@chainsafe/libp2p-quic-linux-arm64-musl@1.1.8", "", { "os": "linux", "cpu": "arm64" }, "sha512-3BHxwYLDS/9osNqctqwjCLhW1A7VajnRkgBhQEe+Q6MsjImQzmperOkG3q92hOpQ/Hh8UcIUUGJ1IB2Xpn92TQ=="], - "@chainsafe/libp2p-quic-linux-x64-gnu": ["@chainsafe/libp2p-quic-linux-x64-gnu@1.1.3", "", { "os": "linux", "cpu": "x64" }, "sha512-ZS4CtINANQeBvqVHAoWqW9SRfxZ9R5xbM1bQUPjjPsNWdIgu0vCjiIkRYqkaL9cJvVHJPguNhu/NwC6whkdWww=="], + "@chainsafe/libp2p-quic-linux-x64-gnu": ["@chainsafe/libp2p-quic-linux-x64-gnu@1.1.8", "", { "os": "linux", "cpu": "x64" }, "sha512-OUI6FON+w7igFpRBzN4D9Co0jZ1GSzcZRVtH7RjCN/MXEWB2x8h87Bg16bOFRwFr3WqmB5QCqaOdMMFe2kAqCw=="], - "@chainsafe/libp2p-quic-linux-x64-musl": ["@chainsafe/libp2p-quic-linux-x64-musl@1.1.3", "", { "os": "linux", "cpu": "x64" }, "sha512-LRi33YOHa/s/KSVRV4iCK+Cz8VBg2J8j3KrUEPtUp3aQvxYYvA/YkbRBcRNOyvEz6natzYA8LOycQsJTrVt4MA=="], + "@chainsafe/libp2p-quic-linux-x64-musl": ["@chainsafe/libp2p-quic-linux-x64-musl@1.1.8", "", { "os": "linux", "cpu": "x64" }, "sha512-PfURP49XPU+Ke2fNfHhpjYWJdnkUKL/X5OJZ4R3cIzF889l3UbmGkg/dXs+s63fefq1P2i+aTyigPw1UBGgs0g=="], - "@chainsafe/libp2p-quic-win32-x64-msvc": ["@chainsafe/libp2p-quic-win32-x64-msvc@1.1.3", "", { "os": "win32", "cpu": "x64" }, "sha512-zm2h1lYkhHEcVrzO/D0NyPwf5yj0/4zWwltaHXl4fdQMy8kqJCm8zcyZmBRfniDX8/03a2svbYPZdTDtb7FSTw=="], + "@chainsafe/libp2p-quic-win32-x64-msvc": ["@chainsafe/libp2p-quic-win32-x64-msvc@1.1.8", "", { "os": "win32", "cpu": "x64" }, "sha512-BL24zXw565Nhc7luKg2lzST404PqfK8i3E+zMigrwbay1non1HaBIjDmiB0XCrfhPT8mdq+fS3wQcnsN5vuYnQ=="], "@chainsafe/libp2p-yamux": ["@chainsafe/libp2p-yamux@8.0.1", "", { "dependencies": { "@libp2p/interface": "^3.0.0", "@libp2p/utils": "^7.0.0", "race-signal": "^2.0.0", "uint8arraylist": "^2.4.8" } }, "sha512-pJsqmUg1cZRJZn/luAtQaq0uLcVfExo51Rg7iRtAEceNYtsKUi/exfegnvTBzTnF1CGmTzVEV3MCLsRhqiNyoA=="], @@ -590,8 +590,6 @@ "@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.34.1", "", { "os": "win32", "cpu": "x64" }, "sha512-hw1iIAHpNE8q3uMIRCgGOeDoz9KtFNarFLQclLxr/LK1VBkj8nby18RjFvr6aP7USRYAjTZW6yisnBWMX571Tw=="], - "@ioredis/commands": ["@ioredis/commands@1.2.0", "", {}, "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg=="], - "@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], "@isaacs/string-locale-compare": ["@isaacs/string-locale-compare@1.1.0", "", {}, "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ=="], @@ -616,31 +614,31 @@ "@libp2p/crypto": ["@libp2p/crypto@5.1.10", "", { "dependencies": { "@libp2p/interface": "^3.0.0", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-kfQwQUV4iLV9tE7C6IjUd61XWEIrg4WBqGIDjeMoUhRPDGQ3z+eIIuIEaBRDEXr8nWd0YZuCprN1AunajHmbfg=="], - "@libp2p/identify": ["@libp2p/identify@4.0.5", "", { "dependencies": { "@libp2p/crypto": "^5.1.12", "@libp2p/interface": "^3.0.2", "@libp2p/interface-internal": "^3.0.5", "@libp2p/peer-id": "^6.0.3", "@libp2p/peer-record": "^9.0.3", "@libp2p/utils": "^7.0.5", "@multiformats/multiaddr": "^13.0.1", "@multiformats/multiaddr-matcher": "^3.0.1", "it-drain": "^3.0.10", "it-parallel": "^3.0.13", "main-event": "^1.0.1", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-p25fw5+w0OjsAgxJWWZhUY25hYGyfFlA1ifycE6DFnPuhYHosZx69/2Q30rq4kZgSEBCepGcj32cKRhWCn0L9A=="], + "@libp2p/identify": ["@libp2p/identify@4.0.9", "", { "dependencies": { "@libp2p/crypto": "^5.1.13", "@libp2p/interface": "^3.1.0", "@libp2p/interface-internal": "^3.0.9", "@libp2p/peer-id": "^6.0.4", "@libp2p/peer-record": "^9.0.4", "@libp2p/utils": "^7.0.9", "@multiformats/multiaddr": "^13.0.1", "@multiformats/multiaddr-matcher": "^3.0.1", "it-drain": "^3.0.10", "it-parallel": "^3.0.13", "main-event": "^1.0.1", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-tZ6Q+eCDcGan0TowBvp7sd86jgXIHs7PRIZeBduhjYV24QYSQ1V4mS71RygNRadhn4TVoZkuXwgIByc30eZWhw=="], - "@libp2p/interface": ["@libp2p/interface@3.0.2", "", { "dependencies": { "@multiformats/dns": "^1.0.6", "@multiformats/multiaddr": "^13.0.1", "main-event": "^1.0.1", "multiformats": "^13.4.0", "progress-events": "^1.0.1", "uint8arraylist": "^2.4.8" } }, "sha512-nb3H0eu9RPCBjwWUCafSL3TpFmt1Jhe4zgWlV98VrrWhtxg8xaunbEWzfVnU+R2TvV8IAljGw80OcqSst3gBlw=="], + "@libp2p/interface": ["@libp2p/interface@3.1.0", "", { "dependencies": { "@multiformats/dns": "^1.0.6", "@multiformats/multiaddr": "^13.0.1", "main-event": "^1.0.1", "multiformats": "^13.4.0", "progress-events": "^1.0.1", "uint8arraylist": "^2.4.8" } }, "sha512-RE7/XyvC47fQBe1cHxhMvepYKa5bFCUyFrrpj8PuM0E7JtzxU7F+Du5j4VXbg2yLDcToe0+j8mB7jvwE2AThYw=="], - "@libp2p/interface-internal": ["@libp2p/interface-internal@3.0.5", "", { "dependencies": { "@libp2p/interface": "^3.0.2", "@libp2p/peer-collections": "^7.0.5", "@multiformats/multiaddr": "^13.0.1", "progress-events": "^1.0.1" } }, "sha512-gaarewSLKpH5iMkXPmUctDk8SoBf/fXL/wNkpfHqHXtzP6Z4Hhm6eFc/DpL8NfCe+tLf1Cdmg3jOsxfdBS3IoA=="], + "@libp2p/interface-internal": ["@libp2p/interface-internal@3.0.9", "", { "dependencies": { "@libp2p/interface": "^3.1.0", "@libp2p/peer-collections": "^7.0.9", "@multiformats/multiaddr": "^13.0.1", "progress-events": "^1.0.1" } }, "sha512-g6hqsrorej945uh/iwA4MY4n7vAFq5mtuMXOf1vo4CS2v8Zl3RMOl0mQZIhUpHLq8XV2aZ3C5rSe4+KsOmZM5A=="], - "@libp2p/logger": ["@libp2p/logger@6.0.5", "", { "dependencies": { "@libp2p/interface": "^3.0.2", "@multiformats/multiaddr": "^13.0.1", "interface-datastore": "^9.0.1", "multiformats": "^13.4.0", "weald": "^1.0.6" } }, "sha512-4HdUwusPh57KKSY0v0YMYw6T2wl93svOLFNJuosy2xLto9zty1KWkrjaEFyF6jF0a7zBd1k5trjJsDXo8OKDxw=="], + "@libp2p/logger": ["@libp2p/logger@6.2.2", "", { "dependencies": { "@libp2p/interface": "^3.1.0", "@multiformats/multiaddr": "^13.0.1", "interface-datastore": "^9.0.1", "multiformats": "^13.4.0", "weald": "^1.1.0" } }, "sha512-XtanXDT+TuMuZoCK760HGV1AmJsZbwAw5AiRUxWDbsZPwAroYq64nb41AHRu9Gyc0TK9YD+p72+5+FIxbw0hzw=="], - "@libp2p/multistream-select": ["@libp2p/multistream-select@7.0.5", "", { "dependencies": { "@libp2p/interface": "^3.0.2", "@libp2p/utils": "^7.0.5", "it-length-prefixed": "^10.0.1", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-OXAv32VtxGYk88VX4jmUgD6Xo58xGgm1oKTNC1ieJ7PbNITfyr/LqOnruuw+/JwQ2LsE806ddOMM8aMV24RMIg=="], + "@libp2p/multistream-select": ["@libp2p/multistream-select@7.0.9", "", { "dependencies": { "@libp2p/interface": "^3.1.0", "@libp2p/utils": "^7.0.9", "it-length-prefixed": "^10.0.1", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-2WAaYuTD1B5FtC0+qFVyglMBnzI0KC8Xmiw7nX9XnlYwrnLj2LIBi/XK7MpsGU1LiphSxT8UfmngwnAWf4t1Dg=="], - "@libp2p/peer-collections": ["@libp2p/peer-collections@7.0.5", "", { "dependencies": { "@libp2p/interface": "^3.0.2", "@libp2p/peer-id": "^6.0.3", "@libp2p/utils": "^7.0.5", "multiformats": "^13.4.0" } }, "sha512-mUkVDAHyxGr8fAI+aa+kf6izP4BI3qqIvuMQQpppYRG3feptmiRqSulbt/UpXoIepLp/1hIlAeZ+QyAMBZ7EpA=="], + "@libp2p/peer-collections": ["@libp2p/peer-collections@7.0.9", "", { "dependencies": { "@libp2p/interface": "^3.1.0", "@libp2p/peer-id": "^6.0.4", "@libp2p/utils": "^7.0.9", "multiformats": "^13.4.0" } }, "sha512-pAMRxmT5V31V0gy2MfwVE1TMAcTnbyBYFOv60OWnkKth4hD+HvQ9DLW1z+opYDqRNON5sIWjcnDsIQDm2VUS7A=="], "@libp2p/peer-id": ["@libp2p/peer-id@6.0.3", "", { "dependencies": { "@libp2p/crypto": "^5.1.12", "@libp2p/interface": "^3.0.2", "multiformats": "^13.4.0", "uint8arrays": "^5.1.0" } }, "sha512-kNecI7YYeh55Jrx+ra0AxEx5CfpKB4/i+4rBJ8jRyLaMgJvwhTC055mZrKv+rUWEEfp/9VqCnDKQ8cVoDbDydA=="], - "@libp2p/peer-record": ["@libp2p/peer-record@9.0.3", "", { "dependencies": { "@libp2p/crypto": "^5.1.12", "@libp2p/interface": "^3.0.2", "@libp2p/peer-id": "^6.0.3", "@multiformats/multiaddr": "^13.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8-varint": "^2.0.4", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-W1K/fdyLDZpxEEcS08JafyNyDUAKHhdjxdt2M7ZwDtBbRrM9RFseZaGHufpMEgPZxne6RriLpJp1NLeFPF9bZA=="], + "@libp2p/peer-record": ["@libp2p/peer-record@9.0.4", "", { "dependencies": { "@libp2p/crypto": "^5.1.13", "@libp2p/interface": "^3.1.0", "@libp2p/peer-id": "^6.0.4", "@multiformats/multiaddr": "^13.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8-varint": "^2.0.4", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-c8NrP2q0FPIiEef2IKOQFi7k0CJK1vr0uk+jbn6KjF85YUWVyaVvuncZG7EwAjO68tuwGS0LLrvJWJbjHFqAwQ=="], - "@libp2p/peer-store": ["@libp2p/peer-store@12.0.5", "", { "dependencies": { "@libp2p/crypto": "^5.1.12", "@libp2p/interface": "^3.0.2", "@libp2p/peer-collections": "^7.0.5", "@libp2p/peer-id": "^6.0.3", "@libp2p/peer-record": "^9.0.3", "@multiformats/multiaddr": "^13.0.1", "interface-datastore": "^9.0.1", "it-all": "^3.0.9", "main-event": "^1.0.1", "mortice": "^3.3.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-hRv3SQZTpB6XFl+suyl0aD2OiLYQIA+UZ4SvCuXCYfIQd8TCSSUbcj1dICrK8aorDVus3ycyMqHAMmbts/5ndA=="], + "@libp2p/peer-store": ["@libp2p/peer-store@12.0.9", "", { "dependencies": { "@libp2p/crypto": "^5.1.13", "@libp2p/interface": "^3.1.0", "@libp2p/peer-collections": "^7.0.9", "@libp2p/peer-id": "^6.0.4", "@libp2p/peer-record": "^9.0.4", "@multiformats/multiaddr": "^13.0.1", "interface-datastore": "^9.0.1", "it-all": "^3.0.9", "main-event": "^1.0.1", "mortice": "^3.3.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-+OOKqrllUUACE3IcfFEVcByJo1fMUy9kztxwfy5wmOxybcysxmJ5p3NmETDCqRhlY2sEk55NuRLh5vzDfJIcQQ=="], - "@libp2p/ping": ["@libp2p/ping@3.0.5", "", { "dependencies": { "@libp2p/crypto": "^5.1.12", "@libp2p/interface": "^3.0.2", "@libp2p/interface-internal": "^3.0.5", "@multiformats/multiaddr": "^13.0.1", "p-event": "^7.0.0", "race-signal": "^2.0.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-/1WPyBtKg8yzM2iZ+XylH88S6Z964dggiFgBLtnAEU4kqF1gGFWI/GHOVXltSWKUulnooxpEBf7F8x1jn80MVQ=="], + "@libp2p/ping": ["@libp2p/ping@3.0.9", "", { "dependencies": { "@libp2p/crypto": "^5.1.13", "@libp2p/interface": "^3.1.0", "@libp2p/interface-internal": "^3.0.9", "@multiformats/multiaddr": "^13.0.1", "p-event": "^7.0.0", "race-signal": "^2.0.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-PeOH3jH+f4cjczxNMKsAf67x/ai3/YQIAc8rq+fkhRWzIuYKjSG8omgiIJJ9sGbaI0b7Ap8vFVbVflvb52qEDg=="], - "@libp2p/utils": ["@libp2p/utils@7.0.5", "", { "dependencies": { "@chainsafe/is-ip": "^2.1.0", "@chainsafe/netmask": "^2.0.0", "@libp2p/crypto": "^5.1.12", "@libp2p/interface": "^3.0.2", "@libp2p/logger": "^6.0.5", "@multiformats/multiaddr": "^13.0.1", "@sindresorhus/fnv1a": "^3.1.0", "any-signal": "^4.1.1", "cborg": "^4.2.14", "delay": "^6.0.0", "is-loopback-addr": "^2.0.2", "it-length-prefixed": "^10.0.1", "it-pipe": "^3.0.1", "it-pushable": "^3.2.3", "it-stream-types": "^2.0.2", "main-event": "^1.0.1", "netmask": "^2.0.2", "p-defer": "^4.0.1", "p-event": "^7.0.0", "race-signal": "^2.0.0", "uint8-varint": "^2.0.4", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-SmefnIdRXjLh9SdJ8nIL0LFvBqVuti3kujzk0/4Xj8mvAEzYl7h/Ge5VU6PHpzat9CZMplGQGGfr/vxX1WuckQ=="], + "@libp2p/utils": ["@libp2p/utils@7.0.9", "", { "dependencies": { "@chainsafe/is-ip": "^2.1.0", "@chainsafe/netmask": "^2.0.0", "@libp2p/crypto": "^5.1.13", "@libp2p/interface": "^3.1.0", "@libp2p/logger": "^6.2.2", "@multiformats/multiaddr": "^13.0.1", "@sindresorhus/fnv1a": "^3.1.0", "any-signal": "^4.1.1", "cborg": "^4.2.14", "delay": "^7.0.0", "is-loopback-addr": "^2.0.2", "it-length-prefixed": "^10.0.1", "it-pipe": "^3.0.1", "it-pushable": "^3.2.3", "it-stream-types": "^2.0.2", "main-event": "^1.0.1", "netmask": "^2.0.2", "p-defer": "^4.0.1", "p-event": "^7.0.0", "race-signal": "^2.0.0", "uint8-varint": "^2.0.4", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-2wYhsgfbFXfh5ui0ME9MNHc7uUIuZwpeZ/yagKmDSjIP7B+L3/9mj+vVXO14AhmjfwnKx2xUDQvzGZeq5to4ow=="], - "@libp2p/websockets": ["@libp2p/websockets@10.0.6", "", { "dependencies": { "@libp2p/interface": "^3.0.2", "@libp2p/utils": "^7.0.5", "@multiformats/multiaddr": "^13.0.1", "@multiformats/multiaddr-matcher": "^3.0.1", "@multiformats/multiaddr-to-uri": "^12.0.0", "main-event": "^1.0.1", "p-event": "^7.0.0", "progress-events": "^1.0.1", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0", "ws": "^8.18.3" } }, "sha512-rHsV3IR9fTsKUV/dexzmA1CIsIzkqgc5npwgUepXdrejTHhCZfmDSo52fdEsN4kfoWlOK4RmDxXrgQxxkrQeSw=="], + "@libp2p/websockets": ["@libp2p/websockets@10.1.2", "", { "dependencies": { "@libp2p/interface": "^3.1.0", "@libp2p/utils": "^7.0.9", "@multiformats/multiaddr": "^13.0.1", "@multiformats/multiaddr-matcher": "^3.0.1", "@multiformats/multiaddr-to-uri": "^12.0.0", "main-event": "^1.0.1", "p-event": "^7.0.0", "progress-events": "^1.0.1", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0", "ws": "^8.18.3" } }, "sha512-WjUxzVpniENxclwSRZpFtk3riV846WCf02Rm7MsAL9ui6szWcCEXzmMIjuo5mOzCUGOn0NPol6Uiz11nadC4iQ=="], - "@libp2p/webtransport": ["@libp2p/webtransport@6.0.7", "", { "dependencies": { "@chainsafe/libp2p-noise": "^17.0.0", "@libp2p/interface": "^3.0.2", "@libp2p/peer-id": "^6.0.3", "@libp2p/utils": "^7.0.5", "@multiformats/multiaddr": "^13.0.1", "@multiformats/multiaddr-matcher": "^3.0.1", "multiformats": "^13.3.6", "progress-events": "^1.0.1", "race-signal": "^2.0.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-N9w2RXygo93Bg1PaQJTsjPmx+itMhUXhvJrRvBWqvzDoNbjCEZ8ofJKjPGzWr0eNIXsF57rHrCHF1devBDjE4g=="], + "@libp2p/webtransport": ["@libp2p/webtransport@6.0.11", "", { "dependencies": { "@chainsafe/libp2p-noise": "^17.0.0", "@libp2p/interface": "^3.1.0", "@libp2p/peer-id": "^6.0.4", "@libp2p/utils": "^7.0.9", "@multiformats/multiaddr": "^13.0.1", "@multiformats/multiaddr-matcher": "^3.0.1", "multiformats": "^13.3.6", "progress-events": "^1.0.1", "race-signal": "^2.0.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-37WTY8BtC3/ysIL/SNwmtU+HWTSnCkpQfVd9K8VFhnKyOEv8yh3fXQ/UUDQF6OmqaITrbiG2bFqSkklqUv4h6Q=="], "@logdna/tail-file": ["@logdna/tail-file@2.2.0", "", {}, "sha512-XGSsWDweP80Fks16lwkAUIr54ICyBs6PsI4mpfTLQaWgEJRtY9xEV+PeyDpJ+sJEGZxqINlpmAwe/6tS1pP8Ng=="], @@ -970,17 +968,17 @@ "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.38.0", "", { "os": "win32", "cpu": "x64" }, "sha512-jjqy3uWlecfB98Psxb5cD6Fny9Fupv9LrDSPTQZUROqjvZmcCqNu4UMl7qqhlUUGpwiAkotj6GYu4SZdcr/nLw=="], - "@shikijs/core": ["@shikijs/core@3.13.0", "", { "dependencies": { "@shikijs/types": "3.13.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-3P8rGsg2Eh2qIHekwuQjzWhKI4jV97PhvYjYUzGqjvJfqdQPz+nMlfWahU24GZAyW1FxFI1sYjyhfh5CoLmIUA=="], + "@shikijs/core": ["@shikijs/core@3.19.0", "", { "dependencies": { "@shikijs/types": "3.19.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-L7SrRibU7ZoYi1/TrZsJOFAnnHyLTE1SwHG1yNWjZIVCqjOEmCSuK2ZO9thnRbJG6TOkPp+Z963JmpCNw5nzvA=="], - "@shikijs/engine-javascript": ["@shikijs/engine-javascript@3.13.0", "", { "dependencies": { "@shikijs/types": "3.13.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.3" } }, "sha512-Ty7xv32XCp8u0eQt8rItpMs6rU9Ki6LJ1dQOW3V/56PKDcpvfHPnYFbsx5FFUP2Yim34m/UkazidamMNVR4vKg=="], + "@shikijs/engine-javascript": ["@shikijs/engine-javascript@3.19.0", "", { "dependencies": { "@shikijs/types": "3.19.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.4" } }, "sha512-ZfWJNm2VMhKkQIKT9qXbs76RRcT0SF/CAvEz0+RkpUDAoDaCx0uFdCGzSRiD9gSlhm6AHkjdieOBJMaO2eC1rQ=="], - "@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@3.13.0", "", { "dependencies": { "@shikijs/types": "3.13.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-O42rBGr4UDSlhT2ZFMxqM7QzIU+IcpoTMzb3W7AlziI1ZF7R8eS2M0yt5Ry35nnnTX/LTLXFPUjRFCIW+Operg=="], + "@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@3.19.0", "", { "dependencies": { "@shikijs/types": "3.19.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-1hRxtYIJfJSZeM5ivbUXv9hcJP3PWRo5prG/V2sWwiubUKTa+7P62d2qxCW8jiVFX4pgRHhnHNp+qeR7Xl+6kg=="], - "@shikijs/langs": ["@shikijs/langs@3.13.0", "", { "dependencies": { "@shikijs/types": "3.13.0" } }, "sha512-672c3WAETDYHwrRP0yLy3W1QYB89Hbpj+pO4KhxK6FzIrDI2FoEXNiNCut6BQmEApYLfuYfpgOZaqbY+E9b8wQ=="], + "@shikijs/langs": ["@shikijs/langs@3.19.0", "", { "dependencies": { "@shikijs/types": "3.19.0" } }, "sha512-dBMFzzg1QiXqCVQ5ONc0z2ebyoi5BKz+MtfByLm0o5/nbUu3Iz8uaTCa5uzGiscQKm7lVShfZHU1+OG3t5hgwg=="], - "@shikijs/themes": ["@shikijs/themes@3.13.0", "", { "dependencies": { "@shikijs/types": "3.13.0" } }, "sha512-Vxw1Nm1/Od8jyA7QuAenaV78BG2nSr3/gCGdBkLpfLscddCkzkL36Q5b67SrLLfvAJTOUzW39x4FHVCFriPVgg=="], + "@shikijs/themes": ["@shikijs/themes@3.19.0", "", { "dependencies": { "@shikijs/types": "3.19.0" } }, "sha512-H36qw+oh91Y0s6OlFfdSuQ0Ld+5CgB/VE6gNPK+Hk4VRbVG/XQgkjnt4KzfnnoO6tZPtKJKHPjwebOCfjd6F8A=="], - "@shikijs/types": ["@shikijs/types@3.13.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-oM9P+NCFri/mmQ8LoFGVfVyemm5Hi27330zuOBp0annwJdKH1kOLndw3zCtAVDehPLg9fKqoEx3Ht/wNZxolfw=="], + "@shikijs/types": ["@shikijs/types@3.19.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-Z2hdeEQlzuntf/BZpFG8a+Fsw9UVXdML7w0o3TgSXV3yNESGon+bs9ITkQb3Ki7zxoXOOu5oJWqZ2uto06V9iQ=="], "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="], @@ -1150,7 +1148,7 @@ "@types/basic-auth": ["@types/basic-auth@1.1.8", "", { "dependencies": { "@types/node": "*" } }, "sha512-dKcUeixGuZn8pBjcUrf1N7x5K6lWuKuwHHitM2IZ4vwZUDWEhhNtwCWiba8jTA9zn0GQQ+fTFkWpKx8pOU/enw=="], - "@types/bun": ["@types/bun@1.3.3", "", { "dependencies": { "bun-types": "1.3.3" } }, "sha512-ogrKbJ2X5N0kWLLFKeytG0eHDleBYtngtlbu9cyBKFtNL3cnpDZkNdQj8flVf6WTZUX5ulI9AY1oa7ljhSrp+g=="], + "@types/bun": ["@types/bun@1.3.5", "", { "dependencies": { "bun-types": "1.3.5" } }, "sha512-RnygCqNrd3srIPEWBd5LFeUYG7plCoH2Yw9WaZGyNmdTEei+gWaHqydbaIRkIkcbXwhBT94q78QljxN0Sk838w=="], "@types/bunyan": ["@types/bunyan@1.8.11", "", { "dependencies": { "@types/node": "*" } }, "sha512-758fRH7umIMk5qt5ELmRMff4mLDlN+xyYzC+dkPTdKwbSkJFvz6xwyScrytPU0QIBbRRwbiE8/BIg8bpajerNQ=="], @@ -1234,7 +1232,7 @@ "@typescript/lib-dom": ["@types/web@0.0.115", "", {}, "sha512-IBtUgtxnITC7WTCg4tv6kCnSP0T+fM+3PzQPIzLzJY1DDlhBFKM/9+uMURw14YweWPDiFNIZ94Gc1bJtwow97g=="], - "@typescript/vfs": ["@typescript/vfs@1.6.1", "", { "dependencies": { "debug": "^4.1.1" }, "peerDependencies": { "typescript": "*" } }, "sha512-JwoxboBh7Oz1v38tPbkrZ62ZXNHAk9bJ7c9x0eI5zBfBnBYGhURdbnh7Z4smN/MV48Y5OCcZb58n972UtbazsA=="], + "@typescript/vfs": ["@typescript/vfs@1.6.2", "", { "dependencies": { "debug": "^4.1.1" }, "peerDependencies": { "typescript": "*" } }, "sha512-hoBwJwcbKHmvd2QVebiytN1aELvpk9B74B4L1mFm/XT1Q/VOYAWl2vQ9AWRFtQq8zmz6enTpfTV8WRc4ATjW/g=="], "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], @@ -1308,7 +1306,7 @@ "assert-plus": ["assert-plus@1.0.0", "", {}, "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw=="], - "astro": ["astro@5.15.1", "", { "dependencies": { "@astrojs/compiler": "^2.12.2", "@astrojs/internal-helpers": "0.7.4", "@astrojs/markdown-remark": "6.3.8", "@astrojs/telemetry": "3.3.0", "@capsizecss/unpack": "^3.0.0", "@oslojs/encoding": "^1.1.0", "@rollup/pluginutils": "^5.2.0", "acorn": "^8.15.0", "aria-query": "^5.3.2", "axobject-query": "^4.1.0", "boxen": "8.0.1", "ci-info": "^4.3.0", "clsx": "^2.1.1", "common-ancestor-path": "^1.0.1", "cookie": "^1.0.2", "cssesc": "^3.0.0", "debug": "^4.4.1", "deterministic-object-hash": "^2.0.2", "devalue": "^5.3.2", "diff": "^5.2.0", "dlv": "^1.1.3", "dset": "^3.1.4", "es-module-lexer": "^1.7.0", "esbuild": "^0.25.0", "estree-walker": "^3.0.3", "flattie": "^1.1.1", "fontace": "~0.3.0", "github-slugger": "^2.0.0", "html-escaper": "3.0.3", "http-cache-semantics": "^4.2.0", "import-meta-resolve": "^4.2.0", "js-yaml": "^4.1.0", "magic-string": "^0.30.18", "magicast": "^0.3.5", "mrmime": "^2.0.1", "neotraverse": "^0.6.18", "p-limit": "^6.2.0", "p-queue": "^8.1.0", "package-manager-detector": "^1.3.0", "picocolors": "^1.1.1", "picomatch": "^4.0.3", "prompts": "^2.4.2", "rehype": "^13.0.2", "semver": "^7.7.2", "shiki": "^3.12.0", "smol-toml": "^1.4.2", "tinyexec": "^1.0.1", "tinyglobby": "^0.2.14", "tsconfck": "^3.1.6", "ultrahtml": "^1.6.0", "unifont": "~0.6.0", "unist-util-visit": "^5.0.0", "unstorage": "^1.17.0", "vfile": "^6.0.3", "vite": "^6.3.6", "vitefu": "^1.1.1", "xxhash-wasm": "^1.1.0", "yargs-parser": "^21.1.1", "yocto-spinner": "^0.2.3", "zod": "^3.25.76", "zod-to-json-schema": "^3.24.6", "zod-to-ts": "^1.2.0" }, "optionalDependencies": { "sharp": "^0.34.0" }, "bin": { "astro": "astro.js" } }, "sha512-VM679M1qxOjGo6q3vKYDNDddkALGgMopG93IwbEXd3Buc2xVLuuPj4HNziNugSbPQx5S6UReMp5uzw10EJN81A=="], + "astro": ["astro@5.16.5", "", { "dependencies": { "@astrojs/compiler": "^2.13.0", "@astrojs/internal-helpers": "0.7.5", "@astrojs/markdown-remark": "6.3.10", "@astrojs/telemetry": "3.3.0", "@capsizecss/unpack": "^3.0.1", "@oslojs/encoding": "^1.1.0", "@rollup/pluginutils": "^5.3.0", "acorn": "^8.15.0", "aria-query": "^5.3.2", "axobject-query": "^4.1.0", "boxen": "8.0.1", "ci-info": "^4.3.1", "clsx": "^2.1.1", "common-ancestor-path": "^1.0.1", "cookie": "^1.0.2", "cssesc": "^3.0.0", "debug": "^4.4.3", "deterministic-object-hash": "^2.0.2", "devalue": "^5.5.0", "diff": "^5.2.0", "dlv": "^1.1.3", "dset": "^3.1.4", "es-module-lexer": "^1.7.0", "esbuild": "^0.25.0", "estree-walker": "^3.0.3", "flattie": "^1.1.1", "fontace": "~0.3.1", "github-slugger": "^2.0.0", "html-escaper": "3.0.3", "http-cache-semantics": "^4.2.0", "import-meta-resolve": "^4.2.0", "js-yaml": "^4.1.1", "magic-string": "^0.30.21", "magicast": "^0.5.1", "mrmime": "^2.0.1", "neotraverse": "^0.6.18", "p-limit": "^6.2.0", "p-queue": "^8.1.1", "package-manager-detector": "^1.5.0", "piccolore": "^0.1.3", "picomatch": "^4.0.3", "prompts": "^2.4.2", "rehype": "^13.0.2", "semver": "^7.7.3", "shiki": "^3.15.0", "smol-toml": "^1.5.2", "svgo": "^4.0.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tsconfck": "^3.1.6", "ultrahtml": "^1.6.0", "unifont": "~0.6.0", "unist-util-visit": "^5.0.0", "unstorage": "^1.17.3", "vfile": "^6.0.3", "vite": "^6.4.1", "vitefu": "^1.1.1", "xxhash-wasm": "^1.1.0", "yargs-parser": "^21.1.1", "yocto-spinner": "^0.2.3", "zod": "^3.25.76", "zod-to-json-schema": "^3.25.0", "zod-to-ts": "^1.2.0" }, "optionalDependencies": { "sharp": "^0.34.0" }, "bin": { "astro": "astro.js" } }, "sha512-QeuM4xzTR0QuXFDNlGVW0BW7rcquKFIkylaPeM4ufii0/RRiPTYtwxDYVZ3KfiMRuuc+nbLD0214kMKTvz/yvQ=="], "async": ["async@2.6.4", "", { "dependencies": { "lodash": "^4.17.14" } }, "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA=="], @@ -1446,8 +1444,6 @@ "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], - "cluster-key-slot": ["cluster-key-slot@1.1.2", "", {}, "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA=="], - "cmd-shim": ["cmd-shim@6.0.3", "", {}, "sha512-FMabTRlc5t5zjdenF6mS0MBeFZm0XqHqeOkcskKFb/LYCcRQ5fVgLOHVc4Lq9CqABd9zhjwPjMBCJvMCziSVtA=="], "color": ["color@4.2.3", "", { "dependencies": { "color-convert": "^2.0.1", "color-string": "^1.9.0" } }, "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A=="], @@ -1512,6 +1508,8 @@ "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], + "csso": ["csso@5.0.5", "", { "dependencies": { "css-tree": "~2.2.0" } }, "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ=="], + "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="], "cuint": ["cuint@0.2.2", "", {}, "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw=="], @@ -1520,8 +1518,6 @@ "datastore-core": ["datastore-core@11.0.2", "", { "dependencies": { "@libp2p/logger": "^6.0.0", "interface-datastore": "^9.0.0", "interface-store": "^7.0.0", "it-drain": "^3.0.9", "it-filter": "^3.1.3", "it-map": "^3.1.3", "it-merge": "^3.0.11", "it-pipe": "^3.0.1", "it-sort": "^3.0.8", "it-take": "^3.0.8" } }, "sha512-0pN4hMcaCWcnUBo5OL/8j14Lt1l/p1v2VvzryRYeJAKRLqnFrzy2FhAQ7y0yTA63ki760ImQHfm2XlZrfIdFpQ=="], - "db0": ["db0@0.3.1", "", { "peerDependencies": { "@electric-sql/pglite": "*", "@libsql/client": "*", "better-sqlite3": "*", "drizzle-orm": "*", "mysql2": "*", "sqlite3": "*" }, "optionalPeers": ["@electric-sql/pglite", "@libsql/client", "better-sqlite3", "drizzle-orm", "mysql2", "sqlite3"] }, "sha512-3RogPLE2LLq6t4YiFCREyl572aBjkfMvfwPyN51df00TbPbryL3XqBYuJ/j6mgPssPK8AKfYdLxizaO5UG10sA=="], - "debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], "decamelize": ["decamelize@1.2.0", "", {}, "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA=="], @@ -1544,12 +1540,10 @@ "defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], - "delay": ["delay@6.0.0", "", {}, "sha512-2NJozoOHQ4NuZuVIr5CWd0iiLVIRSDepakaovIN+9eIDHEhdCAEvSy2cuf1DCrPPQLvHmbqTHODlhHg8UCy4zw=="], + "delay": ["delay@7.0.0", "", { "dependencies": { "random-int": "^3.1.0", "unlimited-timeout": "^0.1.0" } }, "sha512-C3vaGs818qzZjCvVJ98GQUMVyWeg7dr5w2Nwwb2t5K8G98jOyyVO2ti2bKYk5yoYElqH3F2yA53ykuEnwD6MCg=="], "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="], - "denque": ["denque@2.1.0", "", {}, "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw=="], - "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], @@ -1562,7 +1556,7 @@ "deterministic-object-hash": ["deterministic-object-hash@2.0.2", "", { "dependencies": { "base-64": "^1.0.0" } }, "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ=="], - "devalue": ["devalue@5.4.1", "", {}, "sha512-YtoaOfsqjbZQKGIMRYDWKjUmSB4VJ/RElB+bXZawQAQYAo4xu08GKTMVlsZDTF6R2MbAgjcAQRPI5eIyRAT2OQ=="], + "devalue": ["devalue@5.6.1", "", {}, "sha512-jDwizj+IlEZBunHcOuuFVBnIMPAEHvTsJj0BcIp94xYguLRVBcXO853px/MyIJvbVzWdsGvrRweIUWJw8hBP7A=="], "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], @@ -1764,7 +1758,7 @@ "follow-redirects": ["follow-redirects@1.15.9", "", {}, "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ=="], - "fontace": ["fontace@0.3.0", "", { "dependencies": { "@types/fontkit": "^2.0.8", "fontkit": "^2.0.4" } }, "sha512-czoqATrcnxgWb/nAkfyIrRp6Q8biYj7nGnL6zfhTcX+JKKpWHFBnb8uNMw/kZr7u++3Y3wYSYoZgHkCcsuBpBg=="], + "fontace": ["fontace@0.3.1", "", { "dependencies": { "@types/fontkit": "^2.0.8", "fontkit": "^2.0.4" } }, "sha512-9f5g4feWT1jWT8+SbL85aLIRLIXUaDygaM2xPXRmzPYxrOMNok79Lr3FGJoKVNKibE0WCunNiEVG2mwuE+2qEg=="], "fontkit": ["fontkit@2.0.4", "", { "dependencies": { "@swc/helpers": "^0.5.12", "brotli": "^1.3.2", "clone": "^2.1.2", "dfa": "^1.2.0", "fast-deep-equal": "^3.1.3", "restructure": "^3.0.0", "tiny-inflate": "^1.0.3", "unicode-properties": "^1.4.0", "unicode-trie": "^2.0.0" } }, "sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g=="], @@ -1934,8 +1928,6 @@ "invariant": ["invariant@2.2.4", "", { "dependencies": { "loose-envify": "^1.0.0" } }, "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA=="], - "ioredis": ["ioredis@5.6.0", "", { "dependencies": { "@ioredis/commands": "^1.1.1", "cluster-key-slot": "^1.1.0", "debug": "^4.3.4", "denque": "^2.1.0", "lodash.defaults": "^4.2.0", "lodash.isarguments": "^3.1.0", "redis-errors": "^1.2.0", "redis-parser": "^3.0.0", "standard-as-callback": "^2.1.0" } }, "sha512-tBZlIIWbndeWBWCXWZiqtOF/yxf6yZX3tAlTJ7nfo5jhd6dctNxF7QnYlZLZ1a0o0pDoen7CgZqO+zjNaFbJAg=="], - "ip-address": ["ip-address@9.0.5", "", { "dependencies": { "jsbn": "1.1.0", "sprintf-js": "^1.1.3" } }, "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g=="], "ipaddr.js": ["ipaddr.js@2.2.0", "", {}, "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA=="], @@ -2088,7 +2080,7 @@ "leven": ["leven@2.1.0", "", {}, "sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA=="], - "libp2p": ["libp2p@3.0.6", "", { "dependencies": { "@chainsafe/is-ip": "^2.1.0", "@chainsafe/netmask": "^2.0.0", "@libp2p/crypto": "^5.1.12", "@libp2p/interface": "^3.0.2", "@libp2p/interface-internal": "^3.0.5", "@libp2p/logger": "^6.0.5", "@libp2p/multistream-select": "^7.0.5", "@libp2p/peer-collections": "^7.0.5", "@libp2p/peer-id": "^6.0.3", "@libp2p/peer-store": "^12.0.5", "@libp2p/utils": "^7.0.5", "@multiformats/dns": "^1.0.6", "@multiformats/multiaddr": "^13.0.1", "@multiformats/multiaddr-matcher": "^3.0.1", "any-signal": "^4.1.1", "datastore-core": "^11.0.1", "interface-datastore": "^9.0.1", "it-merge": "^3.0.12", "it-parallel": "^3.0.13", "main-event": "^1.0.1", "multiformats": "^13.4.0", "p-defer": "^4.0.1", "p-event": "^7.0.0", "p-retry": "^7.0.0", "progress-events": "^1.0.1", "race-signal": "^2.0.0", "uint8arrays": "^5.1.0" } }, "sha512-QtEbPVTjsHNy0B503ZXRwhoMawEdy+HOHaywJHTB3yHduzgJq+dN7gJFChnyFE8t45UhGZK50bO/+Q0q+5xXhw=="], + "libp2p": ["libp2p@3.1.2", "", { "dependencies": { "@chainsafe/is-ip": "^2.1.0", "@chainsafe/netmask": "^2.0.0", "@libp2p/crypto": "^5.1.13", "@libp2p/interface": "^3.1.0", "@libp2p/interface-internal": "^3.0.9", "@libp2p/logger": "^6.2.2", "@libp2p/multistream-select": "^7.0.9", "@libp2p/peer-collections": "^7.0.9", "@libp2p/peer-id": "^6.0.4", "@libp2p/peer-store": "^12.0.9", "@libp2p/utils": "^7.0.9", "@multiformats/dns": "^1.0.6", "@multiformats/multiaddr": "^13.0.1", "@multiformats/multiaddr-matcher": "^3.0.1", "any-signal": "^4.1.1", "datastore-core": "^11.0.1", "interface-datastore": "^9.0.1", "it-merge": "^3.0.12", "it-parallel": "^3.0.13", "main-event": "^1.0.1", "multiformats": "^13.4.0", "p-defer": "^4.0.1", "p-event": "^7.0.0", "p-retry": "^7.0.0", "progress-events": "^1.0.1", "race-signal": "^2.0.0", "uint8arrays": "^5.1.0" } }, "sha512-E14/IznfuJnmelwrsTIRqtds+XzbtIYdnfskv9ulmL+7fwM+7fsUl1z5wBlWFzPNs46t1MF9fPi9m1ytuzs2xw=="], "light-my-request": ["light-my-request@6.6.0", "", { "dependencies": { "cookie": "^1.0.1", "process-warning": "^4.0.0", "set-cookie-parser": "^2.6.0" } }, "sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A=="], @@ -2114,8 +2106,6 @@ "lodash.foreach": ["lodash.foreach@4.5.0", "", {}, "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ=="], - "lodash.isarguments": ["lodash.isarguments@3.1.0", "", {}, "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg=="], - "lodash.map": ["lodash.map@4.6.0", "", {}, "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q=="], "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], @@ -2140,9 +2130,9 @@ "lunr": ["lunr@2.3.9", "", {}, "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow=="], - "magic-string": ["magic-string@0.30.18", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ=="], + "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], - "magicast": ["magicast@0.3.5", "", { "dependencies": { "@babel/parser": "^7.25.4", "@babel/types": "^7.25.4", "source-map-js": "^1.2.0" } }, "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ=="], + "magicast": ["magicast@0.5.1", "", { "dependencies": { "@babel/parser": "^7.28.5", "@babel/types": "^7.28.5", "source-map-js": "^1.2.1" } }, "sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw=="], "main-event": ["main-event@1.0.1", "", {}, "sha512-NWtdGrAca/69fm6DIVd8T9rtfDII4Q8NQbIbsKQq2VzS9eqOGYs8uaNQjcuaCq/d9H/o625aOTJX2Qoxzqw0Pw=="], @@ -2398,7 +2388,7 @@ "oniguruma-parser": ["oniguruma-parser@0.12.1", "", {}, "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w=="], - "oniguruma-to-es": ["oniguruma-to-es@4.3.3", "", { "dependencies": { "oniguruma-parser": "^0.12.1", "regex": "^6.0.1", "regex-recursion": "^6.0.2" } }, "sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg=="], + "oniguruma-to-es": ["oniguruma-to-es@4.3.4", "", { "dependencies": { "oniguruma-parser": "^0.12.1", "regex": "^6.0.1", "regex-recursion": "^6.0.2" } }, "sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA=="], "openapi-types": ["openapi-types@12.1.3", "", {}, "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw=="], @@ -2420,7 +2410,7 @@ "p-map": ["p-map@4.0.0", "", { "dependencies": { "aggregate-error": "^3.0.0" } }, "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ=="], - "p-queue": ["p-queue@8.1.0", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw=="], + "p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="], "p-retry": ["p-retry@6.2.1", "", { "dependencies": { "@types/retry": "0.12.2", "is-network-error": "^1.0.0", "retry": "^0.13.1" } }, "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ=="], @@ -2430,7 +2420,7 @@ "package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="], - "package-manager-detector": ["package-manager-detector@1.4.1", "", {}, "sha512-dSMiVLBEA4XaNJ0PRb4N5cV/SEP4BWrWZKBmfF+OUm2pQTiZ6DDkKeWaltwu3JRhLoy59ayIkJ00cx9K9CaYTg=="], + "package-manager-detector": ["package-manager-detector@1.6.0", "", {}, "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA=="], "pacote": ["pacote@18.0.6", "", { "dependencies": { "@npmcli/git": "^5.0.0", "@npmcli/installed-package-contents": "^2.0.1", "@npmcli/package-json": "^5.1.0", "@npmcli/promise-spawn": "^7.0.0", "@npmcli/run-script": "^8.0.0", "cacache": "^18.0.0", "fs-minipass": "^3.0.0", "minipass": "^7.0.2", "npm-package-arg": "^11.0.0", "npm-packlist": "^8.0.0", "npm-pick-manifest": "^9.0.0", "npm-registry-fetch": "^17.0.0", "proc-log": "^4.0.0", "promise-retry": "^2.0.1", "sigstore": "^2.2.0", "ssri": "^10.0.0", "tar": "^6.1.11" }, "bin": { "pacote": "bin/index.js" } }, "sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A=="], @@ -2484,6 +2474,8 @@ "pgpass": ["pgpass@1.0.5", "", { "dependencies": { "split2": "^4.1.0" } }, "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug=="], + "piccolore": ["piccolore@0.1.3", "", {}, "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw=="], + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], "picomatch": ["picomatch@3.0.1", "", {}, "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag=="], @@ -2590,6 +2582,8 @@ "radix3": ["radix3@1.1.2", "", {}, "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA=="], + "random-int": ["random-int@3.1.0", "", {}, "sha512-h8CRz8cpvzj0hC/iH/1Gapgcl2TQ6xtnCpyOI5WvWfXf/yrDx2DOU+tD9rX23j36IF11xg1KqB9W11Z18JPMdw=="], + "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], "raw-body": ["raw-body@3.0.0", "", { "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", "iconv-lite": "0.6.3", "unpipe": "1.0.0" } }, "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g=="], @@ -2610,10 +2604,6 @@ "real-require": ["real-require@0.2.0", "", {}, "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg=="], - "redis-errors": ["redis-errors@1.2.0", "", {}, "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w=="], - - "redis-parser": ["redis-parser@3.0.0", "", { "dependencies": { "redis-errors": "^1.0.0" } }, "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A=="], - "regenerator-runtime": ["regenerator-runtime@0.14.1", "", {}, "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="], "regex": ["regex@6.0.1", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA=="], @@ -2734,7 +2724,7 @@ "shell-quote": ["shell-quote@1.8.2", "", {}, "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA=="], - "shiki": ["shiki@3.13.0", "", { "dependencies": { "@shikijs/core": "3.13.0", "@shikijs/engine-javascript": "3.13.0", "@shikijs/engine-oniguruma": "3.13.0", "@shikijs/langs": "3.13.0", "@shikijs/themes": "3.13.0", "@shikijs/types": "3.13.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-aZW4l8Og16CokuCLf8CF8kq+KK2yOygapU5m3+hoGw0Mdosc6fPitjM+ujYarppj5ZIKGyPDPP1vqmQhr+5/0g=="], + "shiki": ["shiki@3.19.0", "", { "dependencies": { "@shikijs/core": "3.19.0", "@shikijs/engine-javascript": "3.19.0", "@shikijs/engine-oniguruma": "3.19.0", "@shikijs/langs": "3.19.0", "@shikijs/themes": "3.19.0", "@shikijs/types": "3.19.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-77VJr3OR/VUZzPiStyRhADmO2jApMM0V2b1qf0RpfWya8Zr1PeZev5AEpPGAAKWdiYUtcZGBE4F5QvJml1PvWA=="], "shimmer": ["shimmer@1.2.1", "", {}, "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw=="], @@ -2760,7 +2750,7 @@ "smart-buffer": ["smart-buffer@4.2.0", "", {}, "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="], - "smol-toml": ["smol-toml@1.4.2", "", {}, "sha512-rInDH6lCNiEyn3+hH8KVGFdbjc099j47+OSgbMrfDYX1CmXLfdKd7qi6IfcWj2wFxvSVkuI46M+wPGYfEOEj6g=="], + "smol-toml": ["smol-toml@1.5.2", "", {}, "sha512-QlaZEqcAH3/RtNyet1IPIYPsEWAaYyXXv1Krsi+1L/QHppjX4Ifm8MQsBISz9vE8cHicIq3clogsheili5vhaQ=="], "socks": ["socks@2.8.4", "", { "dependencies": { "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" } }, "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ=="], @@ -2814,8 +2804,6 @@ "sst-win32-x86": ["sst-win32-x86@3.17.13", "", { "os": "win32", "cpu": "none" }, "sha512-AuMDGux+H1kPckKJ7Szgi04EpBoOKh/v5zFNAPjvWSkcWcGZ+hsBUx3h/FO/AkGK3RnlLMRj4CQQLoa10RSSIg=="], - "standard-as-callback": ["standard-as-callback@2.1.0", "", {}, "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A=="], - "standardwebhooks": ["standardwebhooks@1.0.0", "", { "dependencies": { "@stablelib/base64": "^1.0.0", "fast-sha256": "^1.3.0" } }, "sha512-BbHGOQK9olHPMvQNHWul6MYlrRTAOKn03rOe4A8O3CLWhNf4YHBqq2HJKKC+sfqpxiBY52pNeesD6jIiLDz8jg=="], "statuses": ["statuses@2.0.1", "", {}, "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="], @@ -2852,6 +2840,8 @@ "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], + "svgo": ["svgo@4.0.0", "", { "dependencies": { "commander": "^11.1.0", "css-select": "^5.1.0", "css-tree": "^3.0.1", "css-what": "^6.1.0", "csso": "^5.0.5", "picocolors": "^1.1.1", "sax": "^1.4.1" }, "bin": "./bin/svgo.js" }, "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw=="], + "tabbable": ["tabbable@6.2.0", "", {}, "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew=="], "table-layout": ["table-layout@4.1.1", "", { "dependencies": { "array-back": "^6.2.2", "wordwrapjs": "^5.1.0" } }, "sha512-iK5/YhZxq5GO5z8wb0bY1317uDF3Zjpha0QFFLA8/trAoiLbQD0HUbMesEaxyzUgDxi2QlcbM8IvqOlEjgoXBA=="], @@ -2870,9 +2860,9 @@ "tiny-typed-emitter": ["tiny-typed-emitter@2.1.0", "", {}, "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA=="], - "tinyexec": ["tinyexec@1.0.1", "", {}, "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw=="], + "tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], - "tinyglobby": ["tinyglobby@0.2.14", "", { "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" } }, "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ=="], + "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], "tmp": ["tmp@0.2.3", "", {}, "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w=="], @@ -2964,11 +2954,13 @@ "unist-util-visit-children": ["unist-util-visit-children@3.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA=="], - "unist-util-visit-parents": ["unist-util-visit-parents@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw=="], + "unist-util-visit-parents": ["unist-util-visit-parents@6.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ=="], + + "unlimited-timeout": ["unlimited-timeout@0.1.0", "", {}, "sha512-D4g+mxFeQGQHzCfnvij+R35ukJ0658Zzudw7j16p4tBBbNasKkKM4SocYxqhwT5xA7a9JYWDzKkEFyMlRi5sng=="], "unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="], - "unstorage": ["unstorage@1.17.0", "", { "dependencies": { "anymatch": "^3.1.3", "chokidar": "^4.0.3", "destr": "^2.0.5", "h3": "^1.15.4", "lru-cache": "^10.4.3", "node-fetch-native": "^1.6.7", "ofetch": "^1.4.1", "ufo": "^1.6.1" }, "peerDependencies": { "@azure/app-configuration": "^1.8.0", "@azure/cosmos": "^4.2.0", "@azure/data-tables": "^13.3.0", "@azure/identity": "^4.6.0", "@azure/keyvault-secrets": "^4.9.0", "@azure/storage-blob": "^12.26.0", "@capacitor/preferences": "^6.0.3 || ^7.0.0", "@deno/kv": ">=0.9.0", "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", "@planetscale/database": "^1.19.0", "@upstash/redis": "^1.34.3", "@vercel/blob": ">=0.27.1", "@vercel/functions": "^2.2.12", "@vercel/kv": "^1.0.1", "aws4fetch": "^1.0.20", "db0": ">=0.2.1", "idb-keyval": "^6.2.1", "ioredis": "^5.4.2", "uploadthing": "^7.4.4" }, "optionalPeers": ["@azure/app-configuration", "@azure/cosmos", "@azure/data-tables", "@azure/identity", "@azure/keyvault-secrets", "@azure/storage-blob", "@capacitor/preferences", "@deno/kv", "@netlify/blobs", "@planetscale/database", "@upstash/redis", "@vercel/blob", "@vercel/functions", "@vercel/kv", "aws4fetch", "db0", "idb-keyval", "ioredis", "uploadthing"] }, "sha512-l9Z7lBiwtNp8ZmcoZ/dmPkFXFdtEdZtTZafCSnEIj3YvtkXeGAtL2rN8MQFy/0cs4eOLpuRJMp9ivdug7TCvww=="], + "unstorage": ["unstorage@1.17.3", "", { "dependencies": { "anymatch": "^3.1.3", "chokidar": "^4.0.3", "destr": "^2.0.5", "h3": "^1.15.4", "lru-cache": "^10.4.3", "node-fetch-native": "^1.6.7", "ofetch": "^1.5.1", "ufo": "^1.6.1" }, "peerDependencies": { "@azure/app-configuration": "^1.8.0", "@azure/cosmos": "^4.2.0", "@azure/data-tables": "^13.3.0", "@azure/identity": "^4.6.0", "@azure/keyvault-secrets": "^4.9.0", "@azure/storage-blob": "^12.26.0", "@capacitor/preferences": "^6.0.3 || ^7.0.0", "@deno/kv": ">=0.9.0", "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", "@planetscale/database": "^1.19.0", "@upstash/redis": "^1.34.3", "@vercel/blob": ">=0.27.1", "@vercel/functions": "^2.2.12 || ^3.0.0", "@vercel/kv": "^1.0.1", "aws4fetch": "^1.0.20", "db0": ">=0.2.1", "idb-keyval": "^6.2.1", "ioredis": "^5.4.2", "uploadthing": "^7.4.4" }, "optionalPeers": ["@azure/app-configuration", "@azure/cosmos", "@azure/data-tables", "@azure/identity", "@azure/keyvault-secrets", "@azure/storage-blob", "@capacitor/preferences", "@deno/kv", "@netlify/blobs", "@planetscale/database", "@upstash/redis", "@vercel/blob", "@vercel/functions", "@vercel/kv", "aws4fetch", "db0", "idb-keyval", "ioredis", "uploadthing"] }, "sha512-i+JYyy0DoKmQ3FximTHbGadmIYb8JEpq7lxUjnjeB702bCPum0vzo6oy5Mfu0lpqISw7hCyMW2yj4nWC8bqJ3Q=="], "upath": ["upath@1.2.0", "", {}, "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg=="], @@ -3018,7 +3010,7 @@ "walk-up-path": ["walk-up-path@3.0.1", "", {}, "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA=="], - "weald": ["weald@1.0.6", "", { "dependencies": { "ms": "^3.0.0-canary.1", "supports-color": "^10.0.0" } }, "sha512-sX1PzkcMJZUJ848JbFzB6aKHHglTxqACEnq2KgI75b7vWYvfXFBNbOuDKqFKwCT44CrP6c5r+L4+5GmPnb5/SQ=="], + "weald": ["weald@1.1.1", "", { "dependencies": { "ms": "^3.0.0-canary.1", "supports-color": "^10.0.0" } }, "sha512-PaEQShzMCz8J/AD2N3dJMc1hTZWkJeLKS2NMeiVkV5KDHwgZe7qXLEzyodsT/SODxWDdXJJqocuwf3kHzcXhSQ=="], "web-namespaces": ["web-namespaces@2.0.1", "", {}, "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="], @@ -3090,7 +3082,7 @@ "zod-openapi": ["zod-openapi@4.2.3", "", { "peerDependencies": { "zod": "^3.21.4" } }, "sha512-i0SqpcdXfsvVWTIY1Jl3Tk421s9fBIkpXvaA86zDas+8FjfZjm+GX6ot6SPB2SyuHwUNTN02gE5uIVlYXlyrDQ=="], - "zod-to-json-schema": ["zod-to-json-schema@3.24.6", "", { "peerDependencies": { "zod": "^3.24.1" } }, "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg=="], + "zod-to-json-schema": ["zod-to-json-schema@3.25.0", "", { "peerDependencies": { "zod": "^3.25 || ^4" } }, "sha512-HvWtU2UG41LALjajJrML6uQejQhNJx+JBO9IflpSja4R03iNWfKXrj6W2h7ljuLyc1nKS+9yDyL/9tD1U/yBnQ=="], "zod-to-ts": ["zod-to-ts@1.2.0", "", { "peerDependencies": { "typescript": "^4.9.4 || ^5.0.2", "zod": "^3" } }, "sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA=="], @@ -3104,7 +3096,7 @@ "@apidevtools/json-schema-ref-parser/js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], - "@astrojs/markdown-remark/js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], + "@astrojs/markdown-remark/js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], "@astrojs/telemetry/ci-info": ["ci-info@4.2.0", "", {}, "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg=="], @@ -3468,12 +3460,22 @@ "@bufbuild/protoplugin/typescript": ["typescript@5.4.5", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ=="], + "@chainsafe/libp2p-noise/@libp2p/interface": ["@libp2p/interface@3.0.2", "", { "dependencies": { "@multiformats/dns": "^1.0.6", "@multiformats/multiaddr": "^13.0.1", "main-event": "^1.0.1", "multiformats": "^13.4.0", "progress-events": "^1.0.1", "uint8arraylist": "^2.4.8" } }, "sha512-nb3H0eu9RPCBjwWUCafSL3TpFmt1Jhe4zgWlV98VrrWhtxg8xaunbEWzfVnU+R2TvV8IAljGw80OcqSst3gBlw=="], + + "@chainsafe/libp2p-noise/@libp2p/utils": ["@libp2p/utils@7.0.5", "", { "dependencies": { "@chainsafe/is-ip": "^2.1.0", "@chainsafe/netmask": "^2.0.0", "@libp2p/crypto": "^5.1.12", "@libp2p/interface": "^3.0.2", "@libp2p/logger": "^6.0.5", "@multiformats/multiaddr": "^13.0.1", "@sindresorhus/fnv1a": "^3.1.0", "any-signal": "^4.1.1", "cborg": "^4.2.14", "delay": "^6.0.0", "is-loopback-addr": "^2.0.2", "it-length-prefixed": "^10.0.1", "it-pipe": "^3.0.1", "it-pushable": "^3.2.3", "it-stream-types": "^2.0.2", "main-event": "^1.0.1", "netmask": "^2.0.2", "p-defer": "^4.0.1", "p-event": "^7.0.0", "race-signal": "^2.0.0", "uint8-varint": "^2.0.4", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-SmefnIdRXjLh9SdJ8nIL0LFvBqVuti3kujzk0/4Xj8mvAEzYl7h/Ge5VU6PHpzat9CZMplGQGGfr/vxX1WuckQ=="], + + "@chainsafe/libp2p-quic/@libp2p/crypto": ["@libp2p/crypto@5.1.13", "", { "dependencies": { "@libp2p/interface": "^3.1.0", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-8NN9cQP3jDn+p9+QE9ByiEoZ2lemDFf/unTgiKmS3JF93ph240EUVdbCyyEgOMfykzb0okTM4gzvwfx9osJebQ=="], + "@chainsafe/libp2p-quic/@libp2p/interface": ["@libp2p/interface@2.11.0", "", { "dependencies": { "@multiformats/dns": "^1.0.6", "@multiformats/multiaddr": "^12.4.4", "it-pushable": "^3.2.3", "it-stream-types": "^2.0.2", "main-event": "^1.0.1", "multiformats": "^13.3.6", "progress-events": "^1.0.1", "uint8arraylist": "^2.4.8" } }, "sha512-0MUFKoXWHTQW3oWIgSHApmYMUKWO/Y02+7Hpyp+n3z+geD4Xo2Rku2gYWmxcq+Pyjkz6Q9YjDWz3Yb2SoV2E8Q=="], "@chainsafe/libp2p-quic/@libp2p/utils": ["@libp2p/utils@6.7.2", "", { "dependencies": { "@chainsafe/is-ip": "^2.1.0", "@chainsafe/netmask": "^2.0.0", "@libp2p/crypto": "^5.1.8", "@libp2p/interface": "^2.11.0", "@libp2p/logger": "^5.2.0", "@multiformats/multiaddr": "^12.4.4", "@sindresorhus/fnv1a": "^3.1.0", "any-signal": "^4.1.1", "delay": "^6.0.0", "get-iterator": "^2.0.1", "is-loopback-addr": "^2.0.2", "is-plain-obj": "^4.1.0", "it-foreach": "^2.1.3", "it-pipe": "^3.0.1", "it-pushable": "^3.2.3", "it-stream-types": "^2.0.2", "main-event": "^1.0.1", "netmask": "^2.0.2", "p-defer": "^4.0.1", "race-event": "^1.3.0", "race-signal": "^1.1.3", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-yglVPcYErb4al3MMTdedVLLsdUvr5KaqrrxohxTl/FXMFBvBs0o3w8lo29nfnTUpnNSHFhWZ9at0ZGNnpT/C/w=="], "@chainsafe/libp2p-quic/@multiformats/multiaddr": ["@multiformats/multiaddr@12.5.1", "", { "dependencies": { "@chainsafe/is-ip": "^2.0.1", "@chainsafe/netmask": "^2.0.0", "@multiformats/dns": "^1.0.3", "abort-error": "^1.0.1", "multiformats": "^13.0.0", "uint8-varint": "^2.0.1", "uint8arrays": "^5.0.0" } }, "sha512-+DDlr9LIRUS8KncI1TX/FfUn8F2dl6BIxJgshS/yFQCNB5IAF0OGzcwB39g5NLE22s4qqDePv0Qof6HdpJ/4aQ=="], + "@chainsafe/libp2p-yamux/@libp2p/interface": ["@libp2p/interface@3.0.2", "", { "dependencies": { "@multiformats/dns": "^1.0.6", "@multiformats/multiaddr": "^13.0.1", "main-event": "^1.0.1", "multiformats": "^13.4.0", "progress-events": "^1.0.1", "uint8arraylist": "^2.4.8" } }, "sha512-nb3H0eu9RPCBjwWUCafSL3TpFmt1Jhe4zgWlV98VrrWhtxg8xaunbEWzfVnU+R2TvV8IAljGw80OcqSst3gBlw=="], + + "@chainsafe/libp2p-yamux/@libp2p/utils": ["@libp2p/utils@7.0.5", "", { "dependencies": { "@chainsafe/is-ip": "^2.1.0", "@chainsafe/netmask": "^2.0.0", "@libp2p/crypto": "^5.1.12", "@libp2p/interface": "^3.0.2", "@libp2p/logger": "^6.0.5", "@multiformats/multiaddr": "^13.0.1", "@sindresorhus/fnv1a": "^3.1.0", "any-signal": "^4.1.1", "cborg": "^4.2.14", "delay": "^6.0.0", "is-loopback-addr": "^2.0.2", "it-length-prefixed": "^10.0.1", "it-pipe": "^3.0.1", "it-pushable": "^3.2.3", "it-stream-types": "^2.0.2", "main-event": "^1.0.1", "netmask": "^2.0.2", "p-defer": "^4.0.1", "p-event": "^7.0.0", "race-signal": "^2.0.0", "uint8-varint": "^2.0.4", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-SmefnIdRXjLh9SdJ8nIL0LFvBqVuti3kujzk0/4Xj8mvAEzYl7h/Ge5VU6PHpzat9CZMplGQGGfr/vxX1WuckQ=="], + "@chainsafe/libp2p-yamux/race-signal": ["race-signal@2.0.0", "", {}, "sha512-P31bLhE4ByBX/70QDXMutxnqgwrF1WUXea1O8DXuviAgkdbQ1iQMQotNgzJIBC9yUSn08u/acZrMUhgw7w6GpA=="], "@dotenvx/dotenvx/commander": ["commander@11.1.0", "", {}, "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="], @@ -3520,26 +3522,38 @@ "@libp2p/crypto/@libp2p/interface": ["@libp2p/interface@3.0.0", "", { "dependencies": { "@multiformats/dns": "^1.0.6", "@multiformats/multiaddr": "^13.0.1", "main-event": "^1.0.1", "multiformats": "^13.4.0", "progress-events": "^1.0.1", "uint8arraylist": "^2.4.8" } }, "sha512-fiHoXGUDiaZeksSm+Chf4/tuUynQuDWtadrbqDFxq0nJ5Q7aHPgsmJba7xSfELcqfQCTp00a31FQvXWSk7Oigg=="], - "@libp2p/identify/@libp2p/crypto": ["@libp2p/crypto@5.1.12", "", { "dependencies": { "@libp2p/interface": "^3.0.2", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-1yJS0BZj+HF4M3Uv/92y3oIbMcCar218accFBcX+nKVhBlwDbx6fkUURhs5GilIhMgDtir+qQ8Un1hwF4CgGzw=="], + "@libp2p/identify/@libp2p/crypto": ["@libp2p/crypto@5.1.13", "", { "dependencies": { "@libp2p/interface": "^3.1.0", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-8NN9cQP3jDn+p9+QE9ByiEoZ2lemDFf/unTgiKmS3JF93ph240EUVdbCyyEgOMfykzb0okTM4gzvwfx9osJebQ=="], + + "@libp2p/identify/@libp2p/peer-id": ["@libp2p/peer-id@6.0.4", "", { "dependencies": { "@libp2p/crypto": "^5.1.13", "@libp2p/interface": "^3.1.0", "multiformats": "^13.4.0", "uint8arrays": "^5.1.0" } }, "sha512-Z3xK0lwwKn4bPg3ozEpPr1HxsRi2CxZdghOL+MXoFah/8uhJJHxHFA8A/jxtKn4BB8xkk6F8R5vKNIS05yaCYw=="], "@libp2p/identify/@multiformats/multiaddr-matcher": ["@multiformats/multiaddr-matcher@3.0.1", "", { "dependencies": { "@multiformats/multiaddr": "^13.0.0" } }, "sha512-jvjwzCPysVTQ53F4KqwmcqZw73BqHMk0UUZrMP9P4OtJ/YHrfs122ikTqhVA2upe0P/Qz9l8HVlhEifVYB2q9A=="], + "@libp2p/peer-collections/@libp2p/peer-id": ["@libp2p/peer-id@6.0.4", "", { "dependencies": { "@libp2p/crypto": "^5.1.13", "@libp2p/interface": "^3.1.0", "multiformats": "^13.4.0", "uint8arrays": "^5.1.0" } }, "sha512-Z3xK0lwwKn4bPg3ozEpPr1HxsRi2CxZdghOL+MXoFah/8uhJJHxHFA8A/jxtKn4BB8xkk6F8R5vKNIS05yaCYw=="], + "@libp2p/peer-id/@libp2p/crypto": ["@libp2p/crypto@5.1.12", "", { "dependencies": { "@libp2p/interface": "^3.0.2", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-1yJS0BZj+HF4M3Uv/92y3oIbMcCar218accFBcX+nKVhBlwDbx6fkUURhs5GilIhMgDtir+qQ8Un1hwF4CgGzw=="], - "@libp2p/peer-record/@libp2p/crypto": ["@libp2p/crypto@5.1.12", "", { "dependencies": { "@libp2p/interface": "^3.0.2", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-1yJS0BZj+HF4M3Uv/92y3oIbMcCar218accFBcX+nKVhBlwDbx6fkUURhs5GilIhMgDtir+qQ8Un1hwF4CgGzw=="], + "@libp2p/peer-id/@libp2p/interface": ["@libp2p/interface@3.0.2", "", { "dependencies": { "@multiformats/dns": "^1.0.6", "@multiformats/multiaddr": "^13.0.1", "main-event": "^1.0.1", "multiformats": "^13.4.0", "progress-events": "^1.0.1", "uint8arraylist": "^2.4.8" } }, "sha512-nb3H0eu9RPCBjwWUCafSL3TpFmt1Jhe4zgWlV98VrrWhtxg8xaunbEWzfVnU+R2TvV8IAljGw80OcqSst3gBlw=="], - "@libp2p/peer-store/@libp2p/crypto": ["@libp2p/crypto@5.1.12", "", { "dependencies": { "@libp2p/interface": "^3.0.2", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-1yJS0BZj+HF4M3Uv/92y3oIbMcCar218accFBcX+nKVhBlwDbx6fkUURhs5GilIhMgDtir+qQ8Un1hwF4CgGzw=="], + "@libp2p/peer-record/@libp2p/crypto": ["@libp2p/crypto@5.1.13", "", { "dependencies": { "@libp2p/interface": "^3.1.0", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-8NN9cQP3jDn+p9+QE9ByiEoZ2lemDFf/unTgiKmS3JF93ph240EUVdbCyyEgOMfykzb0okTM4gzvwfx9osJebQ=="], - "@libp2p/ping/@libp2p/crypto": ["@libp2p/crypto@5.1.12", "", { "dependencies": { "@libp2p/interface": "^3.0.2", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-1yJS0BZj+HF4M3Uv/92y3oIbMcCar218accFBcX+nKVhBlwDbx6fkUURhs5GilIhMgDtir+qQ8Un1hwF4CgGzw=="], + "@libp2p/peer-record/@libp2p/peer-id": ["@libp2p/peer-id@6.0.4", "", { "dependencies": { "@libp2p/crypto": "^5.1.13", "@libp2p/interface": "^3.1.0", "multiformats": "^13.4.0", "uint8arrays": "^5.1.0" } }, "sha512-Z3xK0lwwKn4bPg3ozEpPr1HxsRi2CxZdghOL+MXoFah/8uhJJHxHFA8A/jxtKn4BB8xkk6F8R5vKNIS05yaCYw=="], + + "@libp2p/peer-store/@libp2p/crypto": ["@libp2p/crypto@5.1.13", "", { "dependencies": { "@libp2p/interface": "^3.1.0", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-8NN9cQP3jDn+p9+QE9ByiEoZ2lemDFf/unTgiKmS3JF93ph240EUVdbCyyEgOMfykzb0okTM4gzvwfx9osJebQ=="], + + "@libp2p/peer-store/@libp2p/peer-id": ["@libp2p/peer-id@6.0.4", "", { "dependencies": { "@libp2p/crypto": "^5.1.13", "@libp2p/interface": "^3.1.0", "multiformats": "^13.4.0", "uint8arrays": "^5.1.0" } }, "sha512-Z3xK0lwwKn4bPg3ozEpPr1HxsRi2CxZdghOL+MXoFah/8uhJJHxHFA8A/jxtKn4BB8xkk6F8R5vKNIS05yaCYw=="], + + "@libp2p/ping/@libp2p/crypto": ["@libp2p/crypto@5.1.13", "", { "dependencies": { "@libp2p/interface": "^3.1.0", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-8NN9cQP3jDn+p9+QE9ByiEoZ2lemDFf/unTgiKmS3JF93ph240EUVdbCyyEgOMfykzb0okTM4gzvwfx9osJebQ=="], "@libp2p/ping/race-signal": ["race-signal@2.0.0", "", {}, "sha512-P31bLhE4ByBX/70QDXMutxnqgwrF1WUXea1O8DXuviAgkdbQ1iQMQotNgzJIBC9yUSn08u/acZrMUhgw7w6GpA=="], - "@libp2p/utils/@libp2p/crypto": ["@libp2p/crypto@5.1.12", "", { "dependencies": { "@libp2p/interface": "^3.0.2", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-1yJS0BZj+HF4M3Uv/92y3oIbMcCar218accFBcX+nKVhBlwDbx6fkUURhs5GilIhMgDtir+qQ8Un1hwF4CgGzw=="], + "@libp2p/utils/@libp2p/crypto": ["@libp2p/crypto@5.1.13", "", { "dependencies": { "@libp2p/interface": "^3.1.0", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-8NN9cQP3jDn+p9+QE9ByiEoZ2lemDFf/unTgiKmS3JF93ph240EUVdbCyyEgOMfykzb0okTM4gzvwfx9osJebQ=="], "@libp2p/utils/race-signal": ["race-signal@2.0.0", "", {}, "sha512-P31bLhE4ByBX/70QDXMutxnqgwrF1WUXea1O8DXuviAgkdbQ1iQMQotNgzJIBC9yUSn08u/acZrMUhgw7w6GpA=="], "@libp2p/websockets/@multiformats/multiaddr-matcher": ["@multiformats/multiaddr-matcher@3.0.1", "", { "dependencies": { "@multiformats/multiaddr": "^13.0.0" } }, "sha512-jvjwzCPysVTQ53F4KqwmcqZw73BqHMk0UUZrMP9P4OtJ/YHrfs122ikTqhVA2upe0P/Qz9l8HVlhEifVYB2q9A=="], + "@libp2p/webtransport/@libp2p/peer-id": ["@libp2p/peer-id@6.0.4", "", { "dependencies": { "@libp2p/crypto": "^5.1.13", "@libp2p/interface": "^3.1.0", "multiformats": "^13.4.0", "uint8arrays": "^5.1.0" } }, "sha512-Z3xK0lwwKn4bPg3ozEpPr1HxsRi2CxZdghOL+MXoFah/8uhJJHxHFA8A/jxtKn4BB8xkk6F8R5vKNIS05yaCYw=="], + "@libp2p/webtransport/@multiformats/multiaddr-matcher": ["@multiformats/multiaddr-matcher@3.0.1", "", { "dependencies": { "@multiformats/multiaddr": "^13.0.0" } }, "sha512-jvjwzCPysVTQ53F4KqwmcqZw73BqHMk0UUZrMP9P4OtJ/YHrfs122ikTqhVA2upe0P/Qz9l8HVlhEifVYB2q9A=="], "@libp2p/webtransport/race-signal": ["race-signal@2.0.0", "", {}, "sha512-P31bLhE4ByBX/70QDXMutxnqgwrF1WUXea1O8DXuviAgkdbQ1iQMQotNgzJIBC9yUSn08u/acZrMUhgw7w6GpA=="], @@ -3560,6 +3574,8 @@ "@multiformats/dns/buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], + "@multiformats/dns/p-queue": ["p-queue@8.1.0", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw=="], + "@multiformats/multiaddr/multiformats": ["multiformats@13.3.7", "", {}, "sha512-meL9DERHj+fFVWoOX9fXqfcYcSpUfSYJPcFvDPKrxitICbwAoWR+Ut4j5NO9zAT917HUHLQmqzQbAsGNHlDcxQ=="], "@multiformats/multiaddr-matcher/@multiformats/multiaddr": ["@multiformats/multiaddr@12.5.1", "", { "dependencies": { "@chainsafe/is-ip": "^2.0.1", "@chainsafe/netmask": "^2.0.0", "@multiformats/dns": "^1.0.3", "abort-error": "^1.0.1", "multiformats": "^13.0.0", "uint8-varint": "^2.0.1", "uint8arrays": "^5.0.0" } }, "sha512-+DDlr9LIRUS8KncI1TX/FfUn8F2dl6BIxJgshS/yFQCNB5IAF0OGzcwB39g5NLE22s4qqDePv0Qof6HdpJ/4aQ=="], @@ -3906,12 +3922,14 @@ "@smithy/util-waiter/@smithy/types": ["@smithy/types@4.3.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA=="], - "@types/bun/bun-types": ["bun-types@1.3.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-z3Xwlg7j2l9JY27x5Qn3Wlyos8YAp0kKRlrePAOjgjMGS5IG6E7Jnlx736vH9UVI4wUICwwhC9anYL++XeOgTQ=="], + "@types/bun/bun-types": ["bun-types@1.3.5", "", { "dependencies": { "@types/node": "*" } }, "sha512-inmAYe2PFLs0SUbFOWSVD24sg1jFlMPxOjOSSCYqUgn4Hsc3rDc7dFvfVYjFPNHtov6kgUeulV4SxbuIV/stPw=="], "@types/pg/@types/node": ["@types/node@22.18.6", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-r8uszLPpeIWbNKtvWRt/DbVi5zbqZyj1PTmhRMqBMvDnaz1QpmSKujUtJLrqGZeoM8v72MfYggDceY4K1itzWQ=="], "@types/pg-pool/@types/pg": ["@types/pg@8.6.1", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w=="], + "@typescript/vfs/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + "@vanilla-extract/css/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], "@vanilla-extract/integration/find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], @@ -3934,13 +3952,13 @@ "astro/esbuild": ["esbuild@0.25.1", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.1", "@esbuild/android-arm": "0.25.1", "@esbuild/android-arm64": "0.25.1", "@esbuild/android-x64": "0.25.1", "@esbuild/darwin-arm64": "0.25.1", "@esbuild/darwin-x64": "0.25.1", "@esbuild/freebsd-arm64": "0.25.1", "@esbuild/freebsd-x64": "0.25.1", "@esbuild/linux-arm": "0.25.1", "@esbuild/linux-arm64": "0.25.1", "@esbuild/linux-ia32": "0.25.1", "@esbuild/linux-loong64": "0.25.1", "@esbuild/linux-mips64el": "0.25.1", "@esbuild/linux-ppc64": "0.25.1", "@esbuild/linux-riscv64": "0.25.1", "@esbuild/linux-s390x": "0.25.1", "@esbuild/linux-x64": "0.25.1", "@esbuild/netbsd-arm64": "0.25.1", "@esbuild/netbsd-x64": "0.25.1", "@esbuild/openbsd-arm64": "0.25.1", "@esbuild/openbsd-x64": "0.25.1", "@esbuild/sunos-x64": "0.25.1", "@esbuild/win32-arm64": "0.25.1", "@esbuild/win32-ia32": "0.25.1", "@esbuild/win32-x64": "0.25.1" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ=="], - "astro/js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], + "astro/js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], "astro/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], - "astro/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], + "astro/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], - "astro/vite": ["vite@6.4.0", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-oLnWs9Hak/LOlKjeSpOwD6JMks8BeICEdYMJBf6P4Lac/pO9tKiv/XhXnAM7nNfSkZahjlCZu9sS50zL8fSnsw=="], + "astro/vite": ["vite@6.4.1", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g=="], "astro/vitefu": ["vitefu@1.1.1", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" }, "optionalPeers": ["vite"] }, "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ=="], @@ -3992,6 +4010,10 @@ "css-select/domutils": ["domutils@1.5.1", "", { "dependencies": { "dom-serializer": "0", "domelementtype": "1" } }, "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw=="], + "csso/css-tree": ["css-tree@2.2.1", "", { "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" } }, "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA=="], + + "datastore-core/@libp2p/logger": ["@libp2p/logger@6.0.5", "", { "dependencies": { "@libp2p/interface": "^3.0.2", "@multiformats/multiaddr": "^13.0.1", "interface-datastore": "^9.0.1", "multiformats": "^13.4.0", "weald": "^1.0.6" } }, "sha512-4HdUwusPh57KKSY0v0YMYw6T2wl93svOLFNJuosy2xLto9zty1KWkrjaEFyF6jF0a7zBd1k5trjJsDXo8OKDxw=="], + "dom-serializer/domelementtype": ["domelementtype@1.3.1", "", {}, "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="], "dom-serializer/entities": ["entities@1.1.2", "", {}, "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="], @@ -4044,7 +4066,9 @@ "ip-address/sprintf-js": ["sprintf-js@1.1.3", "", {}, "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="], - "libp2p/@libp2p/crypto": ["@libp2p/crypto@5.1.12", "", { "dependencies": { "@libp2p/interface": "^3.0.2", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-1yJS0BZj+HF4M3Uv/92y3oIbMcCar218accFBcX+nKVhBlwDbx6fkUURhs5GilIhMgDtir+qQ8Un1hwF4CgGzw=="], + "libp2p/@libp2p/crypto": ["@libp2p/crypto@5.1.13", "", { "dependencies": { "@libp2p/interface": "^3.1.0", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-8NN9cQP3jDn+p9+QE9ByiEoZ2lemDFf/unTgiKmS3JF93ph240EUVdbCyyEgOMfykzb0okTM4gzvwfx9osJebQ=="], + + "libp2p/@libp2p/peer-id": ["@libp2p/peer-id@6.0.4", "", { "dependencies": { "@libp2p/crypto": "^5.1.13", "@libp2p/interface": "^3.1.0", "multiformats": "^13.4.0", "uint8arrays": "^5.1.0" } }, "sha512-Z3xK0lwwKn4bPg3ozEpPr1HxsRi2CxZdghOL+MXoFah/8uhJJHxHFA8A/jxtKn4BB8xkk6F8R5vKNIS05yaCYw=="], "libp2p/@multiformats/multiaddr-matcher": ["@multiformats/multiaddr-matcher@3.0.1", "", { "dependencies": { "@multiformats/multiaddr": "^13.0.0" } }, "sha512-jvjwzCPysVTQ53F4KqwmcqZw73BqHMk0UUZrMP9P4OtJ/YHrfs122ikTqhVA2upe0P/Qz9l8HVlhEifVYB2q9A=="], @@ -4052,12 +4076,18 @@ "libp2p/race-signal": ["race-signal@2.0.0", "", {}, "sha512-P31bLhE4ByBX/70QDXMutxnqgwrF1WUXea1O8DXuviAgkdbQ1iQMQotNgzJIBC9yUSn08u/acZrMUhgw7w6GpA=="], + "magicast/@babel/parser": ["@babel/parser@7.28.5", "", { "dependencies": { "@babel/types": "^7.28.5" }, "bin": "./bin/babel-parser.js" }, "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ=="], + + "magicast/@babel/types": ["@babel/types@7.28.5", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA=="], + "make-fetch-happen/http-cache-semantics": ["http-cache-semantics@4.1.1", "", {}, "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ=="], "markdown-it/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], "mdast-util-find-and-replace/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], + "mdast-util-find-and-replace/unist-util-visit-parents": ["unist-util-visit-parents@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw=="], + "minipass-flush/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], "minipass-pipeline/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], @@ -4132,6 +4162,12 @@ "string_decoder/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + "svgo/commander": ["commander@11.1.0", "", {}, "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="], + + "svgo/css-select": ["css-select@5.2.2", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw=="], + + "svgo/sax": ["sax@1.4.3", "", {}, "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ=="], + "tar/fs-minipass": ["fs-minipass@2.1.0", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg=="], "tar/minipass": ["minipass@5.0.0", "", {}, "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ=="], @@ -4146,7 +4182,7 @@ "tinyglobby/fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], - "tinyglobby/picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], + "tinyglobby/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], "tough-cookie/punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], @@ -4166,8 +4202,12 @@ "unified/vfile": ["vfile@6.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0", "vfile-message": "^4.0.0" } }, "sha512-zND7NlS8rJYb/sPqkb13ZvbbUoExdbi4w3SfRrMq6R3FvnLQmmfpajJNITuuYm6AZ5uao9vy4BAos3EXBPf2rg=="], + "unist-util-visit/unist-util-visit-parents": ["unist-util-visit-parents@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw=="], + "unstorage/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + "unstorage/ofetch": ["ofetch@1.5.1", "", { "dependencies": { "destr": "^2.0.5", "node-fetch-native": "^1.6.7", "ufo": "^1.6.1" } }, "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA=="], + "uri-js/punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], "verror/core-util-is": ["core-util-is@1.0.2", "", {}, "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="], @@ -4450,12 +4490,32 @@ "@babel/helper-compilation-targets/lru-cache/yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], + "@chainsafe/libp2p-noise/@libp2p/utils/@libp2p/crypto": ["@libp2p/crypto@5.1.12", "", { "dependencies": { "@libp2p/interface": "^3.0.2", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-1yJS0BZj+HF4M3Uv/92y3oIbMcCar218accFBcX+nKVhBlwDbx6fkUURhs5GilIhMgDtir+qQ8Un1hwF4CgGzw=="], + + "@chainsafe/libp2p-noise/@libp2p/utils/@libp2p/logger": ["@libp2p/logger@6.0.5", "", { "dependencies": { "@libp2p/interface": "^3.0.2", "@multiformats/multiaddr": "^13.0.1", "interface-datastore": "^9.0.1", "multiformats": "^13.4.0", "weald": "^1.0.6" } }, "sha512-4HdUwusPh57KKSY0v0YMYw6T2wl93svOLFNJuosy2xLto9zty1KWkrjaEFyF6jF0a7zBd1k5trjJsDXo8OKDxw=="], + + "@chainsafe/libp2p-noise/@libp2p/utils/delay": ["delay@6.0.0", "", {}, "sha512-2NJozoOHQ4NuZuVIr5CWd0iiLVIRSDepakaovIN+9eIDHEhdCAEvSy2cuf1DCrPPQLvHmbqTHODlhHg8UCy4zw=="], + + "@chainsafe/libp2p-noise/@libp2p/utils/race-signal": ["race-signal@2.0.0", "", {}, "sha512-P31bLhE4ByBX/70QDXMutxnqgwrF1WUXea1O8DXuviAgkdbQ1iQMQotNgzJIBC9yUSn08u/acZrMUhgw7w6GpA=="], + + "@chainsafe/libp2p-quic/@libp2p/crypto/@libp2p/interface": ["@libp2p/interface@3.1.0", "", { "dependencies": { "@multiformats/dns": "^1.0.6", "@multiformats/multiaddr": "^13.0.1", "main-event": "^1.0.1", "multiformats": "^13.4.0", "progress-events": "^1.0.1", "uint8arraylist": "^2.4.8" } }, "sha512-RE7/XyvC47fQBe1cHxhMvepYKa5bFCUyFrrpj8PuM0E7JtzxU7F+Du5j4VXbg2yLDcToe0+j8mB7jvwE2AThYw=="], + "@chainsafe/libp2p-quic/@libp2p/interface/multiformats": ["multiformats@13.3.7", "", {}, "sha512-meL9DERHj+fFVWoOX9fXqfcYcSpUfSYJPcFvDPKrxitICbwAoWR+Ut4j5NO9zAT917HUHLQmqzQbAsGNHlDcxQ=="], + "@chainsafe/libp2p-quic/@libp2p/utils/@libp2p/crypto": ["@libp2p/crypto@5.1.10", "", { "dependencies": { "@libp2p/interface": "^3.0.0", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-kfQwQUV4iLV9tE7C6IjUd61XWEIrg4WBqGIDjeMoUhRPDGQ3z+eIIuIEaBRDEXr8nWd0YZuCprN1AunajHmbfg=="], + "@chainsafe/libp2p-quic/@libp2p/utils/@libp2p/logger": ["@libp2p/logger@5.2.0", "", { "dependencies": { "@libp2p/interface": "^2.11.0", "@multiformats/multiaddr": "^12.4.4", "interface-datastore": "^8.3.1", "multiformats": "^13.3.6", "weald": "^1.0.4" } }, "sha512-OEFS529CnIKfbWEHmuCNESw9q0D0hL8cQ8klQfjIVPur15RcgAEgc1buQ7Y6l0B6tCYg120bp55+e9tGvn8c0g=="], + "@chainsafe/libp2p-quic/@libp2p/utils/delay": ["delay@6.0.0", "", {}, "sha512-2NJozoOHQ4NuZuVIr5CWd0iiLVIRSDepakaovIN+9eIDHEhdCAEvSy2cuf1DCrPPQLvHmbqTHODlhHg8UCy4zw=="], + "@chainsafe/libp2p-quic/@multiformats/multiaddr/multiformats": ["multiformats@13.3.7", "", {}, "sha512-meL9DERHj+fFVWoOX9fXqfcYcSpUfSYJPcFvDPKrxitICbwAoWR+Ut4j5NO9zAT917HUHLQmqzQbAsGNHlDcxQ=="], + "@chainsafe/libp2p-yamux/@libp2p/utils/@libp2p/crypto": ["@libp2p/crypto@5.1.12", "", { "dependencies": { "@libp2p/interface": "^3.0.2", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-1yJS0BZj+HF4M3Uv/92y3oIbMcCar218accFBcX+nKVhBlwDbx6fkUURhs5GilIhMgDtir+qQ8Un1hwF4CgGzw=="], + + "@chainsafe/libp2p-yamux/@libp2p/utils/@libp2p/logger": ["@libp2p/logger@6.0.5", "", { "dependencies": { "@libp2p/interface": "^3.0.2", "@multiformats/multiaddr": "^13.0.1", "interface-datastore": "^9.0.1", "multiformats": "^13.4.0", "weald": "^1.0.6" } }, "sha512-4HdUwusPh57KKSY0v0YMYw6T2wl93svOLFNJuosy2xLto9zty1KWkrjaEFyF6jF0a7zBd1k5trjJsDXo8OKDxw=="], + + "@chainsafe/libp2p-yamux/@libp2p/utils/delay": ["delay@6.0.0", "", {}, "sha512-2NJozoOHQ4NuZuVIr5CWd0iiLVIRSDepakaovIN+9eIDHEhdCAEvSy2cuf1DCrPPQLvHmbqTHODlhHg8UCy4zw=="], + "@esbuild-kit/core-utils/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.18.20", "", { "os": "android", "cpu": "arm" }, "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw=="], "@esbuild-kit/core-utils/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.18.20", "", { "os": "android", "cpu": "arm64" }, "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ=="], @@ -4514,6 +4574,10 @@ "@jridgewell/source-map/@jridgewell/trace-mapping/@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="], + "@libp2p/peer-collections/@libp2p/peer-id/@libp2p/crypto": ["@libp2p/crypto@5.1.13", "", { "dependencies": { "@libp2p/interface": "^3.1.0", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-8NN9cQP3jDn+p9+QE9ByiEoZ2lemDFf/unTgiKmS3JF93ph240EUVdbCyyEgOMfykzb0okTM4gzvwfx9osJebQ=="], + + "@libp2p/webtransport/@libp2p/peer-id/@libp2p/crypto": ["@libp2p/crypto@5.1.13", "", { "dependencies": { "@libp2p/interface": "^3.1.0", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "multiformats": "^13.4.0", "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "sha512-8NN9cQP3jDn+p9+QE9ByiEoZ2lemDFf/unTgiKmS3JF93ph240EUVdbCyyEgOMfykzb0okTM4gzvwfx9osJebQ=="], + "@macaron-css/integration/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.14.54", "", { "os": "linux", "cpu": "none" }, "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw=="], "@modelcontextprotocol/sdk/eventsource/eventsource-parser": ["eventsource-parser@3.0.0", "", {}, "sha512-T1C0XCUimhxVQzW4zFipdx0SficT651NnkR0ZSH3yQwh+mFMdLfgjABVi4YtMTtaL4s168593DaoaRLMqryavA=="], @@ -4726,6 +4790,12 @@ "css-select/domutils/domelementtype": ["domelementtype@1.3.1", "", {}, "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="], + "csso/css-tree/mdn-data": ["mdn-data@2.0.28", "", {}, "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="], + + "datastore-core/@libp2p/logger/@libp2p/interface": ["@libp2p/interface@3.0.2", "", { "dependencies": { "@multiformats/dns": "^1.0.6", "@multiformats/multiaddr": "^13.0.1", "main-event": "^1.0.1", "multiformats": "^13.4.0", "progress-events": "^1.0.1", "uint8arraylist": "^2.4.8" } }, "sha512-nb3H0eu9RPCBjwWUCafSL3TpFmt1Jhe4zgWlV98VrrWhtxg8xaunbEWzfVnU+R2TvV8IAljGw80OcqSst3gBlw=="], + + "datastore-core/@libp2p/logger/weald": ["weald@1.0.6", "", { "dependencies": { "ms": "^3.0.0-canary.1", "supports-color": "^10.0.0" } }, "sha512-sX1PzkcMJZUJ848JbFzB6aKHHglTxqACEnq2KgI75b7vWYvfXFBNbOuDKqFKwCT44CrP6c5r+L4+5GmPnb5/SQ=="], + "express/debug/ms": ["ms@2.1.2", "", {}, "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="], "express/mime-types/mime-db": ["mime-db@1.53.0", "", {}, "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg=="], @@ -4738,12 +4808,18 @@ "fast-json-stringify/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + "magicast/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + + "magicast/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + "readable-stream/buffer/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], "send/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], "serve-static/send/fresh": ["fresh@0.5.2", "", {}, "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="], + "svgo/css-select/nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="], + "tar-stream/bl/buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], "tar/fs-minipass/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], @@ -4938,12 +5014,20 @@ "@aws-sdk/signature-v4-multi-region/@aws-sdk/middleware-sdk-s3/@smithy/util-stream/@smithy/node-http-handler": ["@smithy/node-http-handler@4.0.3", "", { "dependencies": { "@smithy/abort-controller": "^4.0.1", "@smithy/protocol-http": "^5.0.1", "@smithy/querystring-builder": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-dYCLeINNbYdvmMLtW0VdhW1biXt+PPCGazzT5ZjKw46mOtdgToQEwjqZSS9/EN8+tNs/RO0cEWG044+YZs97aA=="], + "@chainsafe/libp2p-noise/@libp2p/utils/@libp2p/logger/weald": ["weald@1.0.6", "", { "dependencies": { "ms": "^3.0.0-canary.1", "supports-color": "^10.0.0" } }, "sha512-sX1PzkcMJZUJ848JbFzB6aKHHglTxqACEnq2KgI75b7vWYvfXFBNbOuDKqFKwCT44CrP6c5r+L4+5GmPnb5/SQ=="], + + "@chainsafe/libp2p-quic/@libp2p/crypto/@libp2p/interface/@multiformats/multiaddr": ["@multiformats/multiaddr@13.0.1", "", { "dependencies": { "@chainsafe/is-ip": "^2.0.1", "multiformats": "^13.0.0", "uint8-varint": "^2.0.1", "uint8arrays": "^5.0.0" } }, "sha512-XToN915cnfr6Lr9EdGWakGJbPT0ghpg/850HvdC+zFX8XvpLZElwa8synCiwa8TuvKNnny6m8j8NVBNCxhIO3g=="], + + "@chainsafe/libp2p-quic/@libp2p/utils/@libp2p/crypto/@libp2p/interface": ["@libp2p/interface@3.0.0", "", { "dependencies": { "@multiformats/dns": "^1.0.6", "@multiformats/multiaddr": "^13.0.1", "main-event": "^1.0.1", "multiformats": "^13.4.0", "progress-events": "^1.0.1", "uint8arraylist": "^2.4.8" } }, "sha512-fiHoXGUDiaZeksSm+Chf4/tuUynQuDWtadrbqDFxq0nJ5Q7aHPgsmJba7xSfELcqfQCTp00a31FQvXWSk7Oigg=="], + "@chainsafe/libp2p-quic/@libp2p/utils/@libp2p/logger/interface-datastore": ["interface-datastore@8.3.2", "", { "dependencies": { "interface-store": "^6.0.0", "uint8arrays": "^5.1.0" } }, "sha512-R3NLts7pRbJKc3qFdQf+u40hK8XWc0w4Qkx3OFEstC80VoaDUABY/dXA2EJPhtNC+bsrf41Ehvqb6+pnIclyRA=="], "@chainsafe/libp2p-quic/@libp2p/utils/@libp2p/logger/multiformats": ["multiformats@13.3.7", "", {}, "sha512-meL9DERHj+fFVWoOX9fXqfcYcSpUfSYJPcFvDPKrxitICbwAoWR+Ut4j5NO9zAT917HUHLQmqzQbAsGNHlDcxQ=="], "@chainsafe/libp2p-quic/@libp2p/utils/@libp2p/logger/weald": ["weald@1.0.4", "", { "dependencies": { "ms": "^3.0.0-canary.1", "supports-color": "^9.4.0" } }, "sha512-+kYTuHonJBwmFhP1Z4YQK/dGi3jAnJGCYhyODFpHK73rbxnp9lnZQj7a2m+WVgn8fXr5bJaxUpF6l8qZpPeNWQ=="], + "@chainsafe/libp2p-yamux/@libp2p/utils/@libp2p/logger/weald": ["weald@1.0.6", "", { "dependencies": { "ms": "^3.0.0-canary.1", "supports-color": "^10.0.0" } }, "sha512-sX1PzkcMJZUJ848JbFzB6aKHHglTxqACEnq2KgI75b7vWYvfXFBNbOuDKqFKwCT44CrP6c5r+L4+5GmPnb5/SQ=="], + "@grpc/proto-loader/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], "@rocicorp/zero/@opentelemetry/sdk-trace-node/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], @@ -5096,6 +5180,8 @@ "command-line-usage/chalk-template/chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + "datastore-core/@libp2p/logger/weald/ms": ["ms@3.0.0-canary.1", "", {}, "sha512-kh8ARjh8rMN7Du2igDRO9QJnqCb2xYTJxyQYK7vJJS4TvLLmsbyhiKpSW+t+y26gyOyMd0riphX0GeWKU3ky5g=="], + "tar-stream/bl/buffer/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], "vite-node/vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.21.5", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ=="], @@ -5210,12 +5296,20 @@ "@aws-sdk/signature-v4-multi-region/@aws-sdk/middleware-sdk-s3/@smithy/util-stream/@smithy/node-http-handler/@smithy/querystring-builder": ["@smithy/querystring-builder@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "@smithy/util-uri-escape": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-wU87iWZoCbcqrwszsOewEIuq+SU2mSoBE2CcsLwE0I19m0B2gOJr1MVjxWcDQYOzHbR1xCk7AcOBbGFUYOKvdg=="], + "@chainsafe/libp2p-noise/@libp2p/utils/@libp2p/logger/weald/ms": ["ms@3.0.0-canary.1", "", {}, "sha512-kh8ARjh8rMN7Du2igDRO9QJnqCb2xYTJxyQYK7vJJS4TvLLmsbyhiKpSW+t+y26gyOyMd0riphX0GeWKU3ky5g=="], + + "@chainsafe/libp2p-quic/@libp2p/crypto/@libp2p/interface/@multiformats/multiaddr/multiformats": ["multiformats@13.3.7", "", {}, "sha512-meL9DERHj+fFVWoOX9fXqfcYcSpUfSYJPcFvDPKrxitICbwAoWR+Ut4j5NO9zAT917HUHLQmqzQbAsGNHlDcxQ=="], + + "@chainsafe/libp2p-quic/@libp2p/utils/@libp2p/crypto/@libp2p/interface/@multiformats/multiaddr": ["@multiformats/multiaddr@13.0.1", "", { "dependencies": { "@chainsafe/is-ip": "^2.0.1", "multiformats": "^13.0.0", "uint8-varint": "^2.0.1", "uint8arrays": "^5.0.0" } }, "sha512-XToN915cnfr6Lr9EdGWakGJbPT0ghpg/850HvdC+zFX8XvpLZElwa8synCiwa8TuvKNnny6m8j8NVBNCxhIO3g=="], + "@chainsafe/libp2p-quic/@libp2p/utils/@libp2p/logger/interface-datastore/interface-store": ["interface-store@6.0.3", "", {}, "sha512-+WvfEZnFUhRwFxgz+QCQi7UC6o9AM0EHM9bpIe2Nhqb100NHCsTvNAn4eJgvgV2/tmLo1MP9nGxQKEcZTAueLA=="], "@chainsafe/libp2p-quic/@libp2p/utils/@libp2p/logger/weald/ms": ["ms@3.0.0-canary.1", "", {}, "sha512-kh8ARjh8rMN7Du2igDRO9QJnqCb2xYTJxyQYK7vJJS4TvLLmsbyhiKpSW+t+y26gyOyMd0riphX0GeWKU3ky5g=="], "@chainsafe/libp2p-quic/@libp2p/utils/@libp2p/logger/weald/supports-color": ["supports-color@9.4.0", "", {}, "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw=="], + "@chainsafe/libp2p-yamux/@libp2p/utils/@libp2p/logger/weald/ms": ["ms@3.0.0-canary.1", "", {}, "sha512-kh8ARjh8rMN7Du2igDRO9QJnqCb2xYTJxyQYK7vJJS4TvLLmsbyhiKpSW+t+y26gyOyMd0riphX0GeWKU3ky5g=="], + "@grpc/proto-loader/yargs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], "@vanilla-extract/integration/find-up/locate-path/p-locate/p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], @@ -5228,6 +5322,8 @@ "@aws-sdk/signature-v4-multi-region/@aws-sdk/middleware-sdk-s3/@smithy/smithy-client/@smithy/middleware-endpoint/@smithy/url-parser/@smithy/querystring-parser": ["@smithy/querystring-parser@4.0.1", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-Ma2XC7VS9aV77+clSFylVUnPZRindhB7BbmYiNOdr+CHt/kZNJoPP0cd3QxCnCFyPXC4eybmyE98phEHkqZ5Jw=="], + "@chainsafe/libp2p-quic/@libp2p/utils/@libp2p/crypto/@libp2p/interface/@multiformats/multiaddr/multiformats": ["multiformats@13.3.7", "", {}, "sha512-meL9DERHj+fFVWoOX9fXqfcYcSpUfSYJPcFvDPKrxitICbwAoWR+Ut4j5NO9zAT917HUHLQmqzQbAsGNHlDcxQ=="], + "@vanilla-extract/integration/find-up/locate-path/p-locate/p-limit/yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], "aws-crt/mqtt/help-me/glob/minimatch/brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], diff --git a/containerfiles/desktop-hyprland-runner.Containerfile b/containerfiles/desktop-hyprland-runner.Containerfile new file mode 100644 index 00000000..94e48ff2 --- /dev/null +++ b/containerfiles/desktop-hyprland-runner.Containerfile @@ -0,0 +1,23 @@ +# Container build arguments # +ARG RUNNER_COMMON_IMAGE=runner-common:latest + +#*********************# +# Final Runtime Stage # +#*********************# +FROM ${RUNNER_COMMON_IMAGE} + +### FLAVOR/VARIANT CONFIGURATION ### +## Hyprland Desktop ##p +RUN --mount=type=cache,target=/var/cache/pacman/pkg \ + pacman -S --noconfirm --needed hyprland hyprpaper hyprlock hypridle hyprpicker waybar waypaper xdg-desktop-portal-gtk xdg-desktop-portal-hyprland && \ + # Cleanup + paccache -rk1 && \ + rm -rf /usr/share/{info,man,doc}/* + +## FLAVOR/VARIANT LAUNCH COMMAND ## +ENV NESTRI_LAUNCH_COMPOSITOR="Hyprland" +### END OF FLAVOR/VARIANT CONFIGURATION ### + +### REQUIRED DEFAULT ENTRYPOINT FOR FLAVOR/VARIANT ### +USER root +ENTRYPOINT ["supervisord", "-c", "/etc/nestri/supervisord.conf"] diff --git a/containerfiles/desktop-kdeplasma-runner.Containerfile b/containerfiles/desktop-kdeplasma-runner.Containerfile new file mode 100644 index 00000000..4973efc7 --- /dev/null +++ b/containerfiles/desktop-kdeplasma-runner.Containerfile @@ -0,0 +1,39 @@ +# Container build arguments # +ARG RUNNER_COMMON_IMAGE=runner-common:latest + +#*********************# +# Final Runtime Stage # +#*********************# +FROM ${RUNNER_COMMON_IMAGE} + +### FLAVOR/VARIANT CONFIGURATION ### +## KDE Plasma Desktop ## +RUN --mount=type=cache,target=/var/cache/pacman/pkg \ + pacman -S --noconfirm --needed plasma-desktop plasma-wayland-protocols kscreen konsole && \ + # Cleanup + paccache -rk1 && \ + rm -rf /usr/share/{info,man,doc}/* + +## Custom wrapper launch script +COPY <<-'EOT' /tmp/nestri/plasmadesktop-launcher +#!/bin/bash +set -euo pipefail + +mkdir -p /tmp/nestri +sudo -E chown -R "${NESTRI_USER}:${NESTRI_USER}" /tmp/nestri +cat < /tmp/nestri/kwin_wayland_wrapper +#!/bin/sh +/usr/bin/kwin_wayland_wrapper --no-lockscreen --width $WIDTH --height $HEIGHT --xwayland \$@ +EOF +chmod a+x /tmp/nestri/kwin_wayland_wrapper +export PATH=/tmp/nestri/:$PATH + +dbus-launch startplasma-wayland + +rm /tmp/nestri/kwin_wayland_wrapper +EOT +RUN chmod +x /tmp/nestri/plasmadesktop-launcher + +## FLAVOR/VARIANT LAUNCH COMMAND ## +ENV NESTRI_LAUNCH_COMPOSITOR="/tmp/nestri/plasmadesktop-launcher" +### END OF FLAVOR/VARIANT CONFIGURATION ### diff --git a/containerfiles/heroic-runner.Containerfile b/containerfiles/heroic-runner.Containerfile index 6d54b934..d30fe39d 100644 --- a/containerfiles/heroic-runner.Containerfile +++ b/containerfiles/heroic-runner.Containerfile @@ -17,7 +17,3 @@ RUN --mount=type=cache,target=/var/cache/pacman/pkg \ ## FLAVOR/VARIANT LAUNCH COMMAND ## ENV NESTRI_LAUNCH_CMD="heroic" ### END OF FLAVOR/VARIANT CONFIGURATION ### - -### REQUIRED DEFAULT ENTRYPOINT FOR FLAVOR/VARIANT ### -USER root -ENTRYPOINT ["supervisord", "-c", "/etc/nestri/supervisord.conf"] diff --git a/containerfiles/minecraft-runner.Containerfile b/containerfiles/minecraft-runner.Containerfile index 51c3e014..7756056b 100644 --- a/containerfiles/minecraft-runner.Containerfile +++ b/containerfiles/minecraft-runner.Containerfile @@ -18,7 +18,3 @@ RUN --mount=type=cache,target=/var/cache/pacman/pkg \ ## FLAVOR/VARIANT LAUNCH COMMAND ## ENV NESTRI_LAUNCH_CMD="minecraft-launcher" ### END OF FLAVOR/VARIANT CONFIGURATION ### - -### REQUIRED DEFAULT ENTRYPOINT FOR FLAVOR/VARIANT ### -USER root -ENTRYPOINT ["supervisord", "-c", "/etc/nestri/supervisord.conf"] diff --git a/containerfiles/relay.Containerfile b/containerfiles/relay.Containerfile index bc82d95f..eda69608 100644 --- a/containerfiles/relay.Containerfile +++ b/containerfiles/relay.Containerfile @@ -3,12 +3,10 @@ WORKDIR /builder COPY packages/relay/ /builder/ RUN go build -FROM docker.io/golang:1.25-alpine +FROM docker.io/alpine:3.23 COPY --from=go-build /builder/relay /relay/relay WORKDIR /relay -# TODO: Switch running layer to just alpine (doesn't need golang dev stack) - # ENV flags ENV REGEN_IDENTITY=false ENV VERBOSE=false diff --git a/containerfiles/runner-base.Containerfile b/containerfiles/runner-base.Containerfile index 43159011..daf97816 100644 --- a/containerfiles/runner-base.Containerfile +++ b/containerfiles/runner-base.Containerfile @@ -9,5 +9,5 @@ FROM ${BASE_IMAGE} AS bases # Only lightweight stuff needed by both builder and runtime RUN --mount=type=cache,target=/var/cache/pacman/pkg \ pacman -Sy --noconfirm \ - libssh2 curl wget libevdev libc++abi \ + libssh2 curl wget libevdev libc++abi libselinux \ gstreamer gst-plugins-base diff --git a/containerfiles/runner-builder.Containerfile b/containerfiles/runner-builder.Containerfile index 71784349..e26e6f15 100644 --- a/containerfiles/runner-builder.Containerfile +++ b/containerfiles/runner-builder.Containerfile @@ -15,13 +15,14 @@ ENV CARGO_HOME=/usr/local/cargo \ # Install build essentials and caching tools RUN --mount=type=cache,target=/var/cache/pacman/pkg \ - pacman -S --noconfirm rustup git base-devel mold \ + pacman -S --noconfirm rustup git base-devel \ meson pkgconf cmake git gcc make -# Override various linker with symlink so mold is forcefully used (ld, ld.lld, lld) -RUN ln -sf /usr/bin/mold /usr/bin/ld && \ - ln -sf /usr/bin/mold /usr/bin/ld.lld && \ - ln -sf /usr/bin/mold /usr/bin/lld +# Override various linkers with symlink so wild is forcefully used (ld, ld.lld, lld) +# Removed for time being until Wild is more stable +#RUN ln -sf /usr/bin/wild /usr/bin/ld && \ +# ln -sf /usr/bin/wild /usr/bin/ld.lld && \ +# ln -sf /usr/bin/wild /usr/bin/lld # Install latest Rust using rustup RUN rustup default stable @@ -41,7 +42,7 @@ RUN --mount=type=cache,target=/var/cache/pacman/pkg \ pacman -S --noconfirm lib32-gcc-libs # Clone repository -RUN git clone --depth 1 --rev "2fde5376b6b9a38cdbd94ccc6a80c9d29a81a417" https://github.com/DatCaptainHorse/vimputti.git +RUN git clone --depth 1 --rev "cd306e954842082916107f12d3940e1093662033" https://github.com/DatCaptainHorse/vimputti.git #-------------------------------------------------------------------- FROM vimputti-manager-deps AS vimputti-manager-planner @@ -130,7 +131,7 @@ RUN --mount=type=cache,target=${CARGO_HOME}/registry \ cargo install cargo-c # Clone repository -RUN git clone --depth 1 --rev "67b1183997fd7aaf57398e4b01bd64c4d2433c45" https://github.com/games-on-whales/gst-wayland-display.git +RUN git clone --depth 1 --rev "fd620860f260f051fd731bb9feaac8632cbe3c9e" https://github.com/games-on-whales/gst-wayland-display.git #-------------------------------------------------------------------- FROM gst-wayland-deps AS gst-wayland-planner @@ -168,7 +169,7 @@ WORKDIR /builder # Install build dependencies RUN --mount=type=cache,target=/var/cache/pacman/pkg \ - pacman -S --noconfirm libtool libcap libselinux + pacman -S --noconfirm libtool libcap # Copy patch file from host COPY packages/patches/bubblewrap/ /builder/patches/ diff --git a/containerfiles/runner-common.Containerfile b/containerfiles/runner-common.Containerfile index 9ed3bf35..d625a80d 100644 --- a/containerfiles/runner-common.Containerfile +++ b/containerfiles/runner-common.Containerfile @@ -12,20 +12,20 @@ FROM runtime ### Package Installation ### # Core system components RUN --mount=type=cache,target=/var/cache/pacman/pkg \ - pacman -S --needed --noconfirm \ - vulkan-intel lib32-vulkan-intel vpl-gpu-rt \ - vulkan-radeon lib32-vulkan-radeon \ - mesa lib32-mesa vulkan-mesa-layers lib32-vulkan-mesa-layers \ - gtk3 lib32-gtk3 \ - sudo xorg-xwayland seatd libinput gamescope mangohud wlr-randr \ - pipewire pipewire-pulse pipewire-alsa wireplumber \ - noto-fonts-cjk supervisor jq pacman-contrib \ - hwdata openssh \ + pacman -S --needed --noconfirm --assume-installed bubblewrap \ + vulkan-intel vpl-gpu-rt \ + vulkan-radeon \ + mesa vulkan-mesa-layers \ + gtk3 \ + sudo xorg-xwayland seatd libinput gamescope mangohud wlr-randr \ + pipewire pipewire-pulse pipewire-alsa wireplumber \ + noto-fonts-cjk jq pacman-contrib \ + hwdata openssh \ # GStreamer stack - gst-plugins-good \ - gst-plugins-bad gst-plugin-pipewire \ - gst-plugin-webrtchttp gst-plugin-rswebrtc gst-plugin-rsrtp \ - gst-plugin-va gst-plugin-qsv && \ + gst-plugins-good \ + gst-plugins-bad gst-plugin-pipewire \ + gst-plugin-webrtchttp gst-plugin-rswebrtc gst-plugin-rsrtp \ + gst-plugin-va gst-plugin-qsv && \ # Cleanup paccache -rk1 && \ rm -rf /usr/share/{info,man,doc}/* @@ -56,33 +56,44 @@ RUN mkdir -p "/home/${NESTRI_USER}" && \ RUN mkdir -p /run/dbus && \ # Wireplumber suspend disable sed -i -z \ - -e 's/{[[:space:]]*name = node\/suspend-node\.lua,[[:space:]]*type = script\/lua[[:space:]]*provides = hooks\.node\.suspend[[:space:]]*}[[:space:]]*//g' \ - -e '/wants = \[/{s/hooks\.node\.suspend\s*//; s/,\s*\]/]/}' \ - /usr/share/wireplumber/wireplumber.conf + -e 's/{[[:space:]]*name = node\/suspend-node\.lua,[[:space:]]*type = script\/lua[[:space:]]*provides = hooks\.node\.suspend[[:space:]]*}[[:space:]]*//g' \ + -e '/wants = \[/{s/hooks\.node\.suspend\s*//; s/,\s*\]/]/}' \ + /usr/share/wireplumber/wireplumber.conf ## Audio Systems Configs - Latency optimizations + Loopback ## RUN mkdir -p /etc/pipewire/pipewire.conf.d && \ mkdir -p /etc/wireplumber/wireplumber.conf.d -COPY packages/configs/wireplumber.conf.d/* /etc/wireplumber/wireplumber.conf.d/ -COPY packages/configs/pipewire.conf.d/* /etc/pipewire/pipewire.conf.d/ +COPY packages/configs/wireplumber.conf.d/*.conf /etc/wireplumber/wireplumber.conf.d/ +COPY packages/configs/pipewire.conf.d/*.conf /etc/pipewire/pipewire.conf.d/ ## MangoHud Config ## COPY packages/configs/MangoHud/MangoHud.conf /etc/nestri/configs/MangoHud/ ### Artifacts from Builder ### COPY --from=builder /artifacts/bin/nestri-server /usr/bin/ -COPY --from=builder /artifacts/bin/bwrap /usr/bin/ +COPY --from=builder /artifacts/bin/bwrap /usr/sbin/ COPY --from=builder /artifacts/lib/ /usr/lib/ COPY --from=builder /artifacts/lib32/ /usr/lib32/ COPY --from=builder /artifacts/lib64/ /usr/lib64/ COPY --from=builder /artifacts/bin/vimputti-manager /usr/bin/ ### Scripts and Final Configuration ### +## Scripts ## COPY packages/scripts/ /etc/nestri/ -RUN chmod +x /etc/nestri/{envs.sh,entrypoint*.sh} && \ +RUN chmod +x /etc/nestri/{envs.sh,entrypoint*.sh,pressure-vent.sh} && \ chown -R "${NESTRI_USER}:${NESTRI_USER}" "${NESTRI_HOME}" && \ sed -i 's/^#\(en_US\.UTF-8\)/\1/' /etc/locale.gen && \ - setcap cap_net_admin+ep /usr/bin/vimputti-manager && \ + setcap cap_mknod+ep /usr/bin/vimputti-manager && \ dbus-uuidgen > /etc/machine-id && \ LANG=en_US.UTF-8 locale-gen + +## s6-overlay ## +ADD https://github.com/just-containers/s6-overlay/releases/download/v3.2.2.0/s6-overlay-noarch.tar.xz /tmp +ADD https://github.com/just-containers/s6-overlay/releases/download/v3.2.2.0/s6-overlay-x86_64.tar.xz /tmp +RUN tar -C / -Jxpf /tmp/s6-overlay-noarch.tar.xz && tar -C / -Jxpf /tmp/s6-overlay-x86_64.tar.xz + +COPY packages/configs/s6-overlay/ /etc/s6-overlay/s6-rc.d/ +RUN chmod +x /etc/s6-overlay/s6-rc.d/*/run + +ENTRYPOINT ["/init"] diff --git a/containerfiles/steam-runner.Containerfile b/containerfiles/steam-runner.Containerfile index 4840a0aa..3d4c64f2 100644 --- a/containerfiles/steam-runner.Containerfile +++ b/containerfiles/steam-runner.Containerfile @@ -9,7 +9,9 @@ FROM ${RUNNER_COMMON_IMAGE} ### FLAVOR/VARIANT CONFIGURATION ### ## STEAM ## RUN --mount=type=cache,target=/var/cache/pacman/pkg \ - pacman -S --noconfirm steam && \ + pacman -S --noconfirm --assume-installed bubblewrap \ + steam \ + lib32-mesa lib32-vulkan-mesa-layers lib32-vulkan-intel lib32-vulkan-radeon && \ # Cleanup paccache -rk1 && \ rm -rf /usr/share/{info,man,doc}/* @@ -19,9 +21,6 @@ RUN mkdir -p "${NESTRI_HOME}/.local/share/Steam/config" COPY packages/configs/steam/config.vdf "${NESTRI_HOME}/.local/share/Steam/config/" ## FLAVOR/VARIANT LAUNCH COMMAND ## -ENV NESTRI_LAUNCH_CMD="steam -tenfoot -cef-force-gpu" +ENV NESTRI_LAUNCH_COMPOSITOR="gamescope --backend wayland --force-grab-cursor -g -f -W \$WIDTH -H \$HEIGHT -r \$FRAMERATE --mangoapp -e" +ENV NESTRI_LAUNCH_CMD="env DISPLAY=:0 steam -tenfoot -cef-force-gpu" ### END OF FLAVOR/VARIANT CONFIGURATION ### - -### REQUIRED DEFAULT ENTRYPOINT FOR FLAVOR/VARIANT ### -USER root -ENTRYPOINT ["supervisord", "-c", "/etc/nestri/supervisord.conf"] diff --git a/packages/configs/s6-overlay/application/dependencies.d/compositor b/packages/configs/s6-overlay/application/dependencies.d/compositor new file mode 100644 index 00000000..e69de29b diff --git a/packages/configs/s6-overlay/application/dependencies.d/dbus-session b/packages/configs/s6-overlay/application/dependencies.d/dbus-session new file mode 100644 index 00000000..e69de29b diff --git a/packages/configs/s6-overlay/application/dependencies.d/nestri-server b/packages/configs/s6-overlay/application/dependencies.d/nestri-server new file mode 100644 index 00000000..e69de29b diff --git a/packages/configs/s6-overlay/application/notification-fd b/packages/configs/s6-overlay/application/notification-fd new file mode 100644 index 00000000..e440e5c8 --- /dev/null +++ b/packages/configs/s6-overlay/application/notification-fd @@ -0,0 +1 @@ +3 \ No newline at end of file diff --git a/packages/configs/s6-overlay/application/run b/packages/configs/s6-overlay/application/run new file mode 100644 index 00000000..0d8218ca --- /dev/null +++ b/packages/configs/s6-overlay/application/run @@ -0,0 +1,25 @@ +#!/command/with-contenv bash +set -euo pipefail + +if [[ -f /etc/nestri/common.sh ]]; then + source /etc/nestri/common.sh +else + exit 1 +fi + +# check if NESTRI_LAUNCH_CMD is unset or empty +if [[ -z "${NESTRI_LAUNCH_CMD:-}" ]]; then + # exit with 0 so s6 doesn't think the service failed and try to restart it repeatedly + exit 0 +fi + +export LD_PRELOAD="/usr/lib64/libvimputti_shim.so:/usr/lib32/libvimputti_shim.so" + +s6-setuidgid ${NESTRI_USER} ${NESTRI_LAUNCH_CMD} & +PROCESS_PID=$! + +# notify +printf 'ready\n' >&3 + +# wait till process exits +wait "${PROCESS_PID}" diff --git a/packages/configs/s6-overlay/application/type b/packages/configs/s6-overlay/application/type new file mode 100644 index 00000000..1780f9f4 --- /dev/null +++ b/packages/configs/s6-overlay/application/type @@ -0,0 +1 @@ +longrun \ No newline at end of file diff --git a/packages/configs/s6-overlay/compositor/dependencies.d/dbus-session b/packages/configs/s6-overlay/compositor/dependencies.d/dbus-session new file mode 100644 index 00000000..e69de29b diff --git a/packages/configs/s6-overlay/compositor/dependencies.d/nestri-server b/packages/configs/s6-overlay/compositor/dependencies.d/nestri-server new file mode 100644 index 00000000..e69de29b diff --git a/packages/configs/s6-overlay/compositor/notification-fd b/packages/configs/s6-overlay/compositor/notification-fd new file mode 100644 index 00000000..e440e5c8 --- /dev/null +++ b/packages/configs/s6-overlay/compositor/notification-fd @@ -0,0 +1 @@ +3 \ No newline at end of file diff --git a/packages/configs/s6-overlay/compositor/run b/packages/configs/s6-overlay/compositor/run new file mode 100644 index 00000000..e437dc39 --- /dev/null +++ b/packages/configs/s6-overlay/compositor/run @@ -0,0 +1,44 @@ +#!/command/with-contenv bash +set -euo pipefail + +if [[ -f /etc/nestri/common.sh ]]; then + source /etc/nestri/common.sh +else + exit 1 +fi + +# check if NESTRI_LAUNCH_COMPOSITOR is unset or empty +if [[ -z "${NESTRI_LAUNCH_COMPOSITOR:-}" ]]; then + # exit with 0 so s6 doesn't think the service failed and try to restart it repeatedly + exit 0 +fi + +export LD_PRELOAD="/usr/lib64/libvimputti_shim.so:/usr/lib32/libvimputti_shim.so" + +# Set socket based on compositor type +COMPOSITOR_SOCKET="${NESTRI_XDG_RUNTIME_DIR}/wayland-0" + +# Check if this is gamescope +if [[ "${NESTRI_LAUNCH_COMPOSITOR}" == *"gamescope"* ]]; then + COMPOSITOR_SOCKET="${NESTRI_XDG_RUNTIME_DIR}/gamescope-0" +fi + +# remove possibly stale socket +rm -f "${COMPOSITOR_SOCKET}" + +# expand internal variables +FINAL_LAUNCH_COMPOSITOR=$(echo "${NESTRI_LAUNCH_COMPOSITOR}" | envsubst) + +WAYLAND_DISPLAY=wayland-1 s6-setuidgid ${NESTRI_USER} $FINAL_LAUNCH_COMPOSITOR & +PROCESS_PID=$! + +# wait for socket +while ! test -S "${COMPOSITOR_SOCKET}"; do + sleep 1 +done + +# notify +printf 'ready\n' >&3 + +# wait till process exits +wait "${PROCESS_PID}" diff --git a/packages/configs/s6-overlay/compositor/type b/packages/configs/s6-overlay/compositor/type new file mode 100644 index 00000000..1780f9f4 --- /dev/null +++ b/packages/configs/s6-overlay/compositor/type @@ -0,0 +1 @@ +longrun \ No newline at end of file diff --git a/packages/configs/s6-overlay/dbus-session/dependencies.d/dbus-system b/packages/configs/s6-overlay/dbus-session/dependencies.d/dbus-system new file mode 100644 index 00000000..e69de29b diff --git a/packages/configs/s6-overlay/dbus-session/notification-fd b/packages/configs/s6-overlay/dbus-session/notification-fd new file mode 100644 index 00000000..e440e5c8 --- /dev/null +++ b/packages/configs/s6-overlay/dbus-session/notification-fd @@ -0,0 +1 @@ +3 \ No newline at end of file diff --git a/packages/configs/s6-overlay/dbus-session/run b/packages/configs/s6-overlay/dbus-session/run new file mode 100644 index 00000000..c20ca717 --- /dev/null +++ b/packages/configs/s6-overlay/dbus-session/run @@ -0,0 +1,25 @@ +#!/command/with-contenv bash +set -euo pipefail + +if [[ -f /etc/nestri/common.sh ]]; then + source /etc/nestri/common.sh +else + exit 1 +fi + +# remove possibly stale socket +rm -f "${NESTRI_XDG_RUNTIME_DIR}/bus" + +s6-setuidgid ${NESTRI_USER} dbus-daemon --session --address=unix:path="${NESTRI_XDG_RUNTIME_DIR}/bus" --nofork --nopidfile & +PROCESS_PID=$! + +# wait for socket +while ! test -S "${NESTRI_XDG_RUNTIME_DIR}/bus"; do + sleep 0.5 +done + +# notify +printf 'ready\n' >&3 + +# wait till process exits +wait "${PROCESS_PID}" diff --git a/packages/configs/s6-overlay/dbus-session/type b/packages/configs/s6-overlay/dbus-session/type new file mode 100644 index 00000000..1780f9f4 --- /dev/null +++ b/packages/configs/s6-overlay/dbus-session/type @@ -0,0 +1 @@ +longrun \ No newline at end of file diff --git a/packages/configs/s6-overlay/dbus-system/dependencies.d/init b/packages/configs/s6-overlay/dbus-system/dependencies.d/init new file mode 100644 index 00000000..e69de29b diff --git a/packages/configs/s6-overlay/dbus-system/notification-fd b/packages/configs/s6-overlay/dbus-system/notification-fd new file mode 100644 index 00000000..e440e5c8 --- /dev/null +++ b/packages/configs/s6-overlay/dbus-system/notification-fd @@ -0,0 +1 @@ +3 \ No newline at end of file diff --git a/packages/configs/s6-overlay/dbus-system/run b/packages/configs/s6-overlay/dbus-system/run new file mode 100644 index 00000000..072a1be4 --- /dev/null +++ b/packages/configs/s6-overlay/dbus-system/run @@ -0,0 +1,25 @@ +#!/command/with-contenv bash +set -euo pipefail + +if [[ -f /etc/nestri/common.sh ]]; then + source /etc/nestri/common.sh +else + exit 1 +fi + +# remove possibly stale socket +rm -f "/run/dbus/system_bus_socket" + +dbus-daemon --system --address=unix:path="/run/dbus/system_bus_socket" --nofork --nopidfile & +PROCESS_PID=$! + +# wait for socket +while ! test -S "/run/dbus/system_bus_socket"; do + sleep 0.5 +done + +# notify +printf 'ready\n' >&3 + +# wait till process exits +wait "${PROCESS_PID}" diff --git a/packages/configs/s6-overlay/dbus-system/type b/packages/configs/s6-overlay/dbus-system/type new file mode 100644 index 00000000..1780f9f4 --- /dev/null +++ b/packages/configs/s6-overlay/dbus-system/type @@ -0,0 +1 @@ +longrun \ No newline at end of file diff --git a/packages/configs/s6-overlay/init/run b/packages/configs/s6-overlay/init/run new file mode 100644 index 00000000..259041db --- /dev/null +++ b/packages/configs/s6-overlay/init/run @@ -0,0 +1,238 @@ +#!/command/with-contenv bash +set -euo pipefail + +# Common helpers as requirement +if [[ -f /etc/nestri/common.sh ]]; then + source /etc/nestri/common.sh +else + echo "Error: Common script not found at /etc/nestri/common.sh" >&2 + exit 1 +fi + +# Configuration +CACHE_DIR="${NESTRI_HOME}/.cache/nestri" +NVIDIA_INSTALLER_DIR="/tmp" + + +# Methods # + +# Ensures user ownership across directories +handle_user_permissions() { + if ! chown "${NESTRI_USER}:${NESTRI_USER}" "${NESTRI_HOME}" 2>/dev/null; then + echo "Error: Failed to change ownership of ${NESTRI_HOME} to ${NESTRI_USER}:${NESTRI_USER}" >&2 + return 1 + fi + # Also apply to .cache + if [[ -d "${NESTRI_HOME}/.cache" ]]; then + if ! chown "${NESTRI_USER}:${NESTRI_USER}" "${NESTRI_HOME}/.cache" 2>/dev/null; then + echo "Error: Failed to change ownership of ${NESTRI_HOME}/.cache to ${NESTRI_USER}:${NESTRI_USER}" >&2 + return 1 + fi + fi + return 0 +} + +# Prepares environment for namespace-less applications (like Steam) +setup_namespaceless() { + rm -f /run/systemd/container || true + mkdir -p /run/pressure-vessel || true +} + +# Ensures cache directory exists +setup_cache() { + log "Setting up cache directory at $CACHE_DIR..." + mkdir -p "$CACHE_DIR" || { + log "Warning: Failed to create cache directory, continuing.." + return 1 + } + chown "${NESTRI_USER}:${NESTRI_USER}" "$CACHE_DIR" 2>/dev/null || { + log "Warning: Failed to set cache directory ownership, continuing.." + } +} + +# Grabs NVIDIA driver installer +get_nvidia_installer() { + local driver_version="$1" + local arch="$2" + local filename="NVIDIA-Linux-${arch}-${driver_version}.run" + local cached_file="${CACHE_DIR}/${filename}" + local tmp_file="${NVIDIA_INSTALLER_DIR}/${filename}" + + # Check cache + if [[ -f "$cached_file" ]]; then + log "Found cached NVIDIA installer at $cached_file." + cp "$cached_file" "$tmp_file" || { + log "Warning: Failed to copy cached installer, proceeding with download." + rm -f "$cached_file" 2>/dev/null + } + fi + + # Download if not in tmp + if [[ ! -f "$tmp_file" ]]; then + log "Downloading NVIDIA driver installer ($filename)..." + local urls=( + "https://international.download.nvidia.com/XFree86/Linux-${arch}/${driver_version}/${filename}" + "https://international.download.nvidia.com/tesla/${driver_version}/${filename}" + ) + local success=0 + for url in "${urls[@]}"; do + if wget -q --show-progress "$url" -O "$tmp_file"; then + success=1 + break + fi + log "Failed to download from $url, trying next source..." + done + + if [[ "$success" -eq 0 ]]; then + log "Error: Failed to download NVIDIA driver from all sources." + return 1 + fi + + # Cache the downloaded file + cp "$tmp_file" "$cached_file" 2>/dev/null && \ + chown "${NESTRI_USER}:${NESTRI_USER}" "$cached_file" 2>/dev/null || \ + log "Warning: Failed to cache NVIDIA driver, continuing..." + fi + + chmod +x "$tmp_file" || { + log "Error: Failed to make NVIDIA installer executable." + return 1 + } + return 0 +} + +# Installs the NVIDIA driver +install_nvidia_driver() { + local filename="$1" + log "Installing NVIDIA driver components from $filename..." + bash ./"$filename" \ + --silent \ + --skip-depmod \ + --skip-module-unload \ + --no-kernel-module \ + --install-compat32-libs \ + --no-nouveau-check \ + --no-nvidia-modprobe \ + --no-systemd \ + --no-rpms \ + --no-backup \ + --no-distro-scripts \ + --no-libglx-indirect \ + --no-install-libglvnd \ + --no-check-for-alternate-installs || { + log "Error: NVIDIA driver installation failed." + return 1 + } + + log "NVIDIA driver installation completed." + return 0 +} + +log_container_info() { + if ! declare -p container_runtime &>/dev/null; then + log "Warning: container_runtime is not defined" + return + fi + + if [[ "${container_runtime:-none}" != "none" ]]; then + log "Detected container:" + log "> ${container_runtime}" + else + log "No container runtime detected" + fi +} + +log_gpu_info() { + if ! declare -p vendor_devices &>/dev/null; then + log "Warning: vendor_devices array is not defined" + return + fi + + log "Detected GPUs:" + for vendor in "${!vendor_devices[@]}"; do + log "> $vendor: ${vendor_devices[$vendor]}" + done +} + + +# Main # + +# Start by getting the container we are running under +get_container_info || { + log "Warning: Failed to detect container information" +} +log_container_info + +# Setup cache now +setup_cache + +# Get and detect GPU(s) +get_gpu_info || { + log "Error: Failed to detect GPU information" + exit 1 +} +log_gpu_info + +# Handle NVIDIA GPU +if [[ -n "${vendor_devices[nvidia]:-}" ]]; then + log "NVIDIA GPU(s) detected, applying driver fix.." + + # Determine NVIDIA driver version + nvidia_driver_version="" + if [[ -f "/proc/driver/nvidia/version" ]]; then + nvidia_driver_version=$(awk '/NVIDIA/ {for(i=1;i<=NF;i++) if ($i ~ /^[0-9]+\.[0-9\.]+/) {print $i; exit}}' /proc/driver/nvidia/version | head -n1) + elif command -v nvidia-smi >/dev/null 2>&1; then + nvidia_driver_version=$(nvidia-smi --version | grep -i 'driver version' | cut -d: -f2 | tr -d ' ') + fi + + if [[ -z "$nvidia_driver_version" ]]; then + log "Error: Failed to determine NVIDIA driver version." + # Check for other GPU vendors before exiting + if [[ -n "${vendor_devices[amd]:-}" || -n "${vendor_devices[intel]:-}" ]]; then + log "Other GPUs (AMD or Intel) detected, continuing without NVIDIA driver" + else + log "No other GPUs detected, exiting due to NVIDIA driver version failure" + exit 1 + fi + else + log "Detected NVIDIA driver version: $nvidia_driver_version" + + # Get installer + arch=$(uname -m) + filename="NVIDIA-Linux-${arch}-${nvidia_driver_version}.run" + cd "$NVIDIA_INSTALLER_DIR" || { + log "Error: Failed to change to $NVIDIA_INSTALLER_DIR." + exit 1 + } + get_nvidia_installer "$nvidia_driver_version" "$arch" || { + # Check for other GPU vendors before exiting + if [[ -n "${vendor_devices[amd]:-}" || -n "${vendor_devices[intel]:-}" ]]; then + log "Other GPUs (AMD or Intel) detected, continuing without NVIDIA driver" + else + log "No other GPUs detected, exiting due to NVIDIA installer failure" + exit 1 + fi + } + + # Install driver + install_nvidia_driver "$filename" || { + # Check for other GPU vendors before exiting + if [[ -n "${vendor_devices[amd]:-}" || -n "${vendor_devices[intel]:-}" ]]; then + log "Other GPUs (AMD or Intel) detected, continuing without NVIDIA driver" + else + log "No other GPUs detected, exiting due to NVIDIA driver installation failure" + exit 1 + fi + } + fi +fi + +# Handle user permissions +log "Ensuring user permissions..." +handle_user_permissions || exit 1 + +# Setup namespaceless env if needed for container runtime +if [[ "$container_runtime" != "podman" ]]; then + log "Applying namespace-less configuration" + setup_namespaceless +fi diff --git a/packages/configs/s6-overlay/init/type b/packages/configs/s6-overlay/init/type new file mode 100644 index 00000000..3d92b15f --- /dev/null +++ b/packages/configs/s6-overlay/init/type @@ -0,0 +1 @@ +oneshot \ No newline at end of file diff --git a/packages/configs/s6-overlay/init/up b/packages/configs/s6-overlay/init/up new file mode 100644 index 00000000..179b6e33 --- /dev/null +++ b/packages/configs/s6-overlay/init/up @@ -0,0 +1 @@ +/etc/s6-overlay/s6-rc.d/init/run diff --git a/packages/configs/s6-overlay/nestri-server/dependencies.d/dbus-session b/packages/configs/s6-overlay/nestri-server/dependencies.d/dbus-session new file mode 100644 index 00000000..e69de29b diff --git a/packages/configs/s6-overlay/nestri-server/dependencies.d/pipewire b/packages/configs/s6-overlay/nestri-server/dependencies.d/pipewire new file mode 100644 index 00000000..e69de29b diff --git a/packages/configs/s6-overlay/nestri-server/dependencies.d/pipewire-pulse b/packages/configs/s6-overlay/nestri-server/dependencies.d/pipewire-pulse new file mode 100644 index 00000000..e69de29b diff --git a/packages/configs/s6-overlay/nestri-server/dependencies.d/vimputti-manager b/packages/configs/s6-overlay/nestri-server/dependencies.d/vimputti-manager new file mode 100644 index 00000000..e69de29b diff --git a/packages/configs/s6-overlay/nestri-server/dependencies.d/wireplumber b/packages/configs/s6-overlay/nestri-server/dependencies.d/wireplumber new file mode 100644 index 00000000..e69de29b diff --git a/packages/configs/s6-overlay/nestri-server/notification-fd b/packages/configs/s6-overlay/nestri-server/notification-fd new file mode 100644 index 00000000..e440e5c8 --- /dev/null +++ b/packages/configs/s6-overlay/nestri-server/notification-fd @@ -0,0 +1 @@ +3 \ No newline at end of file diff --git a/packages/configs/s6-overlay/nestri-server/run b/packages/configs/s6-overlay/nestri-server/run new file mode 100644 index 00000000..7cb7958c --- /dev/null +++ b/packages/configs/s6-overlay/nestri-server/run @@ -0,0 +1,25 @@ +#!/command/with-contenv bash +set -euo pipefail + +if [[ -f /etc/nestri/common.sh ]]; then + source /etc/nestri/common.sh +else + exit 1 +fi + +# remove possibly stale socket +rm -f "${NESTRI_XDG_RUNTIME_DIR}/wayland-1" + +s6-setuidgid ${NESTRI_USER} nestri-server $NESTRI_PARAMS & +PROCESS_PID=$! + +# wait for socket +while ! test -S "${NESTRI_XDG_RUNTIME_DIR}/wayland-1"; do + sleep 1 +done + +# notify +printf 'ready\n' >&3 + +# wait till process exists +wait "${PROCESS_PID}" diff --git a/packages/configs/s6-overlay/nestri-server/type b/packages/configs/s6-overlay/nestri-server/type new file mode 100644 index 00000000..1780f9f4 --- /dev/null +++ b/packages/configs/s6-overlay/nestri-server/type @@ -0,0 +1 @@ +longrun \ No newline at end of file diff --git a/packages/configs/s6-overlay/pipewire-pulse/dependencies.d/dbus-session b/packages/configs/s6-overlay/pipewire-pulse/dependencies.d/dbus-session new file mode 100644 index 00000000..e69de29b diff --git a/packages/configs/s6-overlay/pipewire-pulse/dependencies.d/pipewire b/packages/configs/s6-overlay/pipewire-pulse/dependencies.d/pipewire new file mode 100644 index 00000000..e69de29b diff --git a/packages/configs/s6-overlay/pipewire-pulse/notification-fd b/packages/configs/s6-overlay/pipewire-pulse/notification-fd new file mode 100644 index 00000000..e440e5c8 --- /dev/null +++ b/packages/configs/s6-overlay/pipewire-pulse/notification-fd @@ -0,0 +1 @@ +3 \ No newline at end of file diff --git a/packages/configs/s6-overlay/pipewire-pulse/run b/packages/configs/s6-overlay/pipewire-pulse/run new file mode 100644 index 00000000..b330c526 --- /dev/null +++ b/packages/configs/s6-overlay/pipewire-pulse/run @@ -0,0 +1,26 @@ +#!/command/with-contenv bash +set -euo pipefail + +if [[ -f /etc/nestri/common.sh ]]; then + source /etc/nestri/common.sh +else + exit 1 +fi + +# remove possibly stale socket +rm -rf "${NESTRI_XDG_RUNTIME_DIR}/pulse" + +s6-setuidgid ${NESTRI_USER} pipewire-pulse & +PROCESS_PID=$! + +# wait for socket +while ! test -S "${NESTRI_XDG_RUNTIME_DIR}/pulse/native"; do + sleep 0.5 +done + +# notify +printf 'ready\n' >&3 + +# wait till process exits +wait "${PROCESS_PID}" + diff --git a/packages/configs/s6-overlay/pipewire-pulse/type b/packages/configs/s6-overlay/pipewire-pulse/type new file mode 100644 index 00000000..1780f9f4 --- /dev/null +++ b/packages/configs/s6-overlay/pipewire-pulse/type @@ -0,0 +1 @@ +longrun \ No newline at end of file diff --git a/packages/configs/s6-overlay/pipewire/dependencies.d/dbus-session b/packages/configs/s6-overlay/pipewire/dependencies.d/dbus-session new file mode 100644 index 00000000..e69de29b diff --git a/packages/configs/s6-overlay/pipewire/notification-fd b/packages/configs/s6-overlay/pipewire/notification-fd new file mode 100644 index 00000000..e440e5c8 --- /dev/null +++ b/packages/configs/s6-overlay/pipewire/notification-fd @@ -0,0 +1 @@ +3 \ No newline at end of file diff --git a/packages/configs/s6-overlay/pipewire/run b/packages/configs/s6-overlay/pipewire/run new file mode 100644 index 00000000..816442f3 --- /dev/null +++ b/packages/configs/s6-overlay/pipewire/run @@ -0,0 +1,26 @@ +#!/command/with-contenv bash +set -euo pipefail + +if [[ -f /etc/nestri/common.sh ]]; then + source /etc/nestri/common.sh +else + exit 1 +fi + +# remove possibly stale socket +rm -f "${NESTRI_XDG_RUNTIME_DIR}/pipewire-0" + +s6-setuidgid ${NESTRI_USER} pipewire & +PROCESS_PID=$! + +# wait for socket +while ! test -S "${NESTRI_XDG_RUNTIME_DIR}/pipewire-0"; do + sleep 0.5 +done + +# notify +printf 'ready\n' >&3 + +# wait till process exits +wait "${PROCESS_PID}" + diff --git a/packages/configs/s6-overlay/pipewire/type b/packages/configs/s6-overlay/pipewire/type new file mode 100644 index 00000000..1780f9f4 --- /dev/null +++ b/packages/configs/s6-overlay/pipewire/type @@ -0,0 +1 @@ +longrun \ No newline at end of file diff --git a/packages/configs/s6-overlay/user/contents.d/application b/packages/configs/s6-overlay/user/contents.d/application new file mode 100644 index 00000000..e69de29b diff --git a/packages/configs/s6-overlay/user/contents.d/compositor b/packages/configs/s6-overlay/user/contents.d/compositor new file mode 100644 index 00000000..e69de29b diff --git a/packages/configs/s6-overlay/user/contents.d/nestri-server b/packages/configs/s6-overlay/user/contents.d/nestri-server new file mode 100644 index 00000000..e69de29b diff --git a/packages/configs/s6-overlay/vimputti-manager/dependencies.d/dbus-session b/packages/configs/s6-overlay/vimputti-manager/dependencies.d/dbus-session new file mode 100644 index 00000000..e69de29b diff --git a/packages/configs/s6-overlay/vimputti-manager/notification-fd b/packages/configs/s6-overlay/vimputti-manager/notification-fd new file mode 100644 index 00000000..e440e5c8 --- /dev/null +++ b/packages/configs/s6-overlay/vimputti-manager/notification-fd @@ -0,0 +1 @@ +3 \ No newline at end of file diff --git a/packages/configs/s6-overlay/vimputti-manager/run b/packages/configs/s6-overlay/vimputti-manager/run new file mode 100644 index 00000000..157fb7c4 --- /dev/null +++ b/packages/configs/s6-overlay/vimputti-manager/run @@ -0,0 +1,27 @@ +#!/command/with-contenv bash +set -euo pipefail + +if [[ -f /etc/nestri/common.sh ]]; then + source /etc/nestri/common.sh +else + exit 1 +fi + +export VIMPUTTI_PATH="${NESTRI_VIMPUTTI_PATH}" + +# remove possibly stale socket +rm -f "/tmp/vimputti-0" + +s6-setuidgid ${NESTRI_USER} vimputti-manager & +PROCESS_PID=$! + +# wait for socket +while ! test -S "/tmp/vimputti-0"; do + sleep 1 +done + +# notify +printf 'ready\n' >&3 + +# wait till process exists +wait "${PROCESS_PID}" diff --git a/packages/configs/s6-overlay/vimputti-manager/type b/packages/configs/s6-overlay/vimputti-manager/type new file mode 100644 index 00000000..1780f9f4 --- /dev/null +++ b/packages/configs/s6-overlay/vimputti-manager/type @@ -0,0 +1 @@ +longrun \ No newline at end of file diff --git a/packages/configs/s6-overlay/wireplumber/dependencies.d/dbus-session b/packages/configs/s6-overlay/wireplumber/dependencies.d/dbus-session new file mode 100644 index 00000000..e69de29b diff --git a/packages/configs/s6-overlay/wireplumber/dependencies.d/dbus-system b/packages/configs/s6-overlay/wireplumber/dependencies.d/dbus-system new file mode 100644 index 00000000..e69de29b diff --git a/packages/configs/s6-overlay/wireplumber/dependencies.d/pipewire b/packages/configs/s6-overlay/wireplumber/dependencies.d/pipewire new file mode 100644 index 00000000..e69de29b diff --git a/packages/configs/s6-overlay/wireplumber/dependencies.d/pipewire-pulse b/packages/configs/s6-overlay/wireplumber/dependencies.d/pipewire-pulse new file mode 100644 index 00000000..e69de29b diff --git a/packages/configs/s6-overlay/wireplumber/notification-fd b/packages/configs/s6-overlay/wireplumber/notification-fd new file mode 100644 index 00000000..e440e5c8 --- /dev/null +++ b/packages/configs/s6-overlay/wireplumber/notification-fd @@ -0,0 +1 @@ +3 \ No newline at end of file diff --git a/packages/configs/s6-overlay/wireplumber/run b/packages/configs/s6-overlay/wireplumber/run new file mode 100644 index 00000000..4ea727e1 --- /dev/null +++ b/packages/configs/s6-overlay/wireplumber/run @@ -0,0 +1,20 @@ +#!/command/with-contenv bash +set -euo pipefail + +if [[ -f /etc/nestri/common.sh ]]; then + source /etc/nestri/common.sh +else + exit 1 +fi + +s6-setuidgid ${NESTRI_USER} wireplumber & +PROCESS_PID=$! + +# safety sleep for wireplumber +sleep 0.5 + +# notify +printf 'ready\n' >&3 + +# wait till process exits +wait "${PROCESS_PID}" diff --git a/packages/configs/s6-overlay/wireplumber/type b/packages/configs/s6-overlay/wireplumber/type new file mode 100644 index 00000000..1780f9f4 --- /dev/null +++ b/packages/configs/s6-overlay/wireplumber/type @@ -0,0 +1 @@ +longrun \ No newline at end of file diff --git a/packages/input/package.json b/packages/input/package.json index 2c4559a4..df633daa 100644 --- a/packages/input/package.json +++ b/packages/input/package.json @@ -7,22 +7,22 @@ ".": "./src/index.ts" }, "devDependencies": { - "@bufbuild/buf": "^1.59.0", - "@bufbuild/protoc-gen-es": "^2.10.0" + "@bufbuild/buf": "^1.61.0", + "@bufbuild/protoc-gen-es": "^2.10.2" }, "dependencies": { - "@bufbuild/protobuf": "^2.10.0", + "@bufbuild/protobuf": "^2.10.2", "@chainsafe/libp2p-noise": "^17.0.0", - "@chainsafe/libp2p-quic": "^1.1.3", + "@chainsafe/libp2p-quic": "^1.1.8", "@chainsafe/libp2p-yamux": "^8.0.1", - "@libp2p/identify": "^4.0.5", - "@libp2p/interface": "^3.0.2", - "@libp2p/ping": "^3.0.5", - "@libp2p/websockets": "^10.0.6", - "@libp2p/webtransport": "^6.0.7", - "@libp2p/utils": "^7.0.5", + "@libp2p/identify": "^4.0.9", + "@libp2p/interface": "^3.1.0", + "@libp2p/ping": "^3.0.9", + "@libp2p/websockets": "^10.1.2", + "@libp2p/webtransport": "^6.0.11", + "@libp2p/utils": "^7.0.9", "@multiformats/multiaddr": "^13.0.1", - "libp2p": "^3.0.6", + "libp2p": "^3.1.2", "uint8arraylist": "^2.4.8" } } \ No newline at end of file diff --git a/packages/input/src/keyboard.ts b/packages/input/src/keyboard.ts index c7242a0a..db204c1e 100644 --- a/packages/input/src/keyboard.ts +++ b/packages/input/src/keyboard.ts @@ -1,7 +1,11 @@ import { keyCodeToLinuxEventCode } from "./codes"; import { WebRTCStream } from "./webrtc-stream"; -import { ProtoKeyDownSchema, ProtoKeyUpSchema } from "./proto/types_pb"; -import { create, toBinary } from "@bufbuild/protobuf"; +import { + ProtoKeyDownSchema, + ProtoKeyUpSchema, + //ProtoClipboardSchema, +} from "./proto/types_pb"; +import { create, Message, toBinary } from "@bufbuild/protobuf"; import { createMessage } from "./utils"; import { ProtoMessageSchema } from "./proto/messages_pb"; @@ -13,21 +17,40 @@ export class Keyboard { protected wrtc: WebRTCStream; protected connected!: boolean; + private onEscapeCallback?: () => void; + // Store references to event listeners private readonly keydownListener: (e: KeyboardEvent) => void; private readonly keyupListener: (e: KeyboardEvent) => void; constructor({ webrtc }: Props) { this.wrtc = webrtc; - this.keydownListener = this.createKeyboardListener((e: any) => - create(ProtoKeyDownSchema, { - key: this.keyToVirtualKeyCode(e.code), - }), + this.keydownListener = this.createKeyboardListener( + async (e: KeyboardEvent) => { + let rets = []; + if (e.shiftKey && e.code === "Escape" && this.onEscapeCallback !== undefined) { + this.onEscapeCallback(); + return rets; + } + /*if (e.ctrlKey && e.key === "v" && navigator.clipboard) { + rets.push(create(ProtoClipboardSchema, { + content: await navigator.clipboard.readText(), + })); + }*/ + rets.push( + create(ProtoKeyDownSchema, { + key: this.keyToVirtualKeyCode(e.code), + }), + ); + return rets; + }, ); - this.keyupListener = this.createKeyboardListener((e: any) => - create(ProtoKeyUpSchema, { - key: this.keyToVirtualKeyCode(e.code), - }), + this.keyupListener = this.createKeyboardListener( + async (e: KeyboardEvent) => [ + create(ProtoKeyUpSchema, { + key: this.keyToVirtualKeyCode(e.code), + }), + ], ); this.run(); } @@ -56,10 +79,12 @@ export class Keyboard { // Prevent repeated key events from being sent (important for games) if ((e as any).repeat) return; - const data = dataCreator(e as any); - - const message = createMessage(data, "input"); - this.wrtc.sendBinary(toBinary(ProtoMessageSchema, message)); + dataCreator(e as any).then((datas: Message[]) => { + datas.forEach((data) => { + const message = createMessage(data, "input"); + this.wrtc.sendBinary(toBinary(ProtoMessageSchema, message)); + }); + }); }; } @@ -68,6 +93,10 @@ export class Keyboard { this.connected = false; } + public setOnEscape(cb: () => void) { + this.onEscapeCallback = cb; + } + private keyToVirtualKeyCode(code: string) { // Treat Home key as Escape - TODO: Make user-configurable if (code === "Home") return 1; diff --git a/packages/input/src/mouse.ts b/packages/input/src/mouse.ts index ea3d43e8..0caf96cf 100644 --- a/packages/input/src/mouse.ts +++ b/packages/input/src/mouse.ts @@ -76,9 +76,15 @@ export class Mouse { if (document.pointerLockElement == this.canvas) { this.connected = true; this.canvas.addEventListener("mousemove", this.mousemoveListener); - this.canvas.addEventListener("mousedown", this.mousedownListener); - this.canvas.addEventListener("mouseup", this.mouseupListener); - this.canvas.addEventListener("wheel", this.mousewheelListener); + this.canvas.addEventListener("mousedown", this.mousedownListener, { + passive: true, + }); + this.canvas.addEventListener("mouseup", this.mouseupListener, { + passive: true, + }); + this.canvas.addEventListener("wheel", this.mousewheelListener, { + passive: true, + }); } else { if (this.connected) { this.stop(); @@ -119,7 +125,6 @@ export class Mouse { dataCreator: (e: Event) => any, ): (e: Event) => void { return (e: Event) => { - e.preventDefault(); e.stopPropagation(); const data = dataCreator(e as any); diff --git a/packages/play-standalone/package.json b/packages/play-standalone/package.json index 7b43d6e6..f8ae0a49 100644 --- a/packages/play-standalone/package.json +++ b/packages/play-standalone/package.json @@ -9,8 +9,8 @@ "astro": "astro" }, "dependencies": { - "@astrojs/node": "9.5.0", + "@astrojs/node": "9.5.1", "@nestri/input": "*", - "astro": "5.15.1" + "astro": "5.16.5" } } \ No newline at end of file diff --git a/packages/play-standalone/public/fonts/GeistMono-VariableFont_wght.ttf b/packages/play-standalone/public/fonts/GeistMono-VariableFont_wght.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f86f195187890961e3e45bc1100b2b4246f2404b GIT binary patch literal 137804 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 literal 0 HcmV?d00001 diff --git a/packages/play-standalone/src/components/NerdStats.astro b/packages/play-standalone/src/components/NerdStats.astro new file mode 100644 index 00000000..5cf37eac --- /dev/null +++ b/packages/play-standalone/src/components/NerdStats.astro @@ -0,0 +1,153 @@ +--- +interface Props { + audioCodec?: string; + audioBitrate?: number; + fps?: number; + resolution?: { width: number; height: number }; + videoCodec?: string; + videoBitrate?: number; +} +const { + audioCodec, + audioBitrate, + fps, + resolution, + videoCodec, + videoBitrate +} = Astro.props; +--- + + + + +
+ + Nerd Stats +
+
+ Audio Stream +
+
    +
  • Codec: {audioCodec}
  • +
  • Bitrate: {audioBitrate}
  • +
+
+
+ Video Stream +
+
    +
  • FPS: {fps}
  • +
  • WxH: {resolution ? resolution?.width + "x" + resolution?.height : ""}
  • +
  • Codec: {videoCodec}
  • +
  • Bitrate: {videoBitrate}
  • +
+
+
+ + + + + + \ No newline at end of file diff --git a/packages/play-standalone/src/layouts/DefaultLayout.astro b/packages/play-standalone/src/layouts/DefaultLayout.astro index 71fa24b5..cbdb2973 100644 --- a/packages/play-standalone/src/layouts/DefaultLayout.astro +++ b/packages/play-standalone/src/layouts/DefaultLayout.astro @@ -20,11 +20,25 @@ font-display: swap; } + @font-face { + font-family: "Geist Mono"; + src: url("/fonts/GeistMono-VariableFont_wght.ttf"); + font-weight: normal; + font-style: normal; + font-display: swap; + } + * { font-family: "Basement Grotesque", sans-serif; } + html, body { + width: 100%; + height: 100%; + } + body { + overflow: hidden; display: flex; justify-content: center; align-items: center; diff --git a/packages/play-standalone/src/pages/[room].astro b/packages/play-standalone/src/pages/[room].astro index f7385df1..75e33a3d 100644 --- a/packages/play-standalone/src/pages/[room].astro +++ b/packages/play-standalone/src/pages/[room].astro @@ -1,5 +1,6 @@ --- import DefaultLayout from "../layouts/DefaultLayout.astro"; +import NerdStats from "../components/NerdStats.astro"; const { room } = Astro.params; // Passing of environment variables to the client side @@ -16,13 +17,22 @@ if (envs_map.size > 0) { } --- + -

Offline

-

Warming up the GPU...

+
+ +
+
+

Offline

+

Loading..

+
+ +
+ +