diff --git a/LICENSE b/LICENSE
new file mode 100644
index 000000000..110071e0d
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2023 Start9 Labs, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/LICENSE.md b/LICENSE.md
deleted file mode 100644
index bacd53575..000000000
--- a/LICENSE.md
+++ /dev/null
@@ -1,42 +0,0 @@
-# START9 NON-COMMERCIAL LICENSE v1
-Version 1, 22 September 2022
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-### 1.Definitions
-
-"License" means version 1 of the Start9 Non-Commercial License.
-
-"Licensor" means the Start9 Labs, Inc, or its successor(s) in interest, or a future assignee of the copyright.
-
-"You" (or "Your") means an individual or organization exercising permissions granted by this License.
-
-"Source Code" for a work means the preferred form of the work for making modifications to it.
-
-"Object Code" means any non-source form of a work, including the machine-language output by a compiler or assembler.
-
-"Work" means any work of authorship, whether in Source or Object form, made available under this License.
-
-"Derivative Work" means any work, whether in Source or Object form, that is based on (or derived from) the Work.
-
-"Distribute" means to convey or to publish and generally has the same meaning here as under U.S. Copyright law.
-
-"Sell" means practicing any or all of the rights granted to you under the License to provide to third parties, for a fee or other consideration (including, without limitation, fees for hosting, consulting, or support services), a product or service whose value derives, entirely or substantially, from the functionality of the Work or Derivative Work.
-
-### 2. Grant of Rights
-
-Subject to the terms of this license, the Licensor grants you, the licensee, a non-exclusive, worldwide, royalty-free copyright license to access, audit, copy, modify, compile, run, test, distribute, or otherwise use the Software.
-
-### 3. Limitations
-
-1. The grant of rights under the License does NOT include, and the License does NOT grant You the right to Sell the Work or Derivative Work.
-2. If you Distribute the Work or Derivative Work, you expressly undertake not to remove or modify, in any manner, the copyright notices attached to the Work or displayed in any output of the Work when run, and to reproduce these notices, in an identical manner, in any distributed copies of the Work or Derivative Work together with a copy of this License.
-3. If you Distribute a Derivative Work, it must carry prominent notices stating that it has been modified from the Work, providing a relevant date.
-
-### 4. Contributions
-
-You hereby grant to Licensor a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license to use and exploit any Derivative Work of which you are the author.
-
-### 5. Disclaimer
-
-THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. LICENSOR HAS NO OBLIGATION TO SUPPORT RECIPIENTS OF THE SOFTWARE.
diff --git a/Makefile b/Makefile
index ed6f2b011..fed830c69 100644
--- a/Makefile
+++ b/Makefile
@@ -19,7 +19,7 @@ FRONTEND_INSTALL_WIZARD_SRC := $(shell find frontend/projects/install-wizard)
PATCH_DB_CLIENT_SRC := $(shell find patch-db/client -not -path patch-db/client/dist -and -not -path patch-db/client/node_modules)
GZIP_BIN := $(shell which pigz || which gzip)
TAR_BIN := $(shell which gtar || which tar)
-ALL_TARGETS := $(EMBASSY_BINS) system-images/compat/docker-images/$(ARCH).tar system-images/utils/docker-images/$(ARCH).tar system-images/binfmt/docker-images/$(ARCH).tar $(EMBASSY_SRC) $(shell if [ "$(OS_ARCH)" = "raspberrypi" ]; then echo cargo-deps/aarch64-unknown-linux-gnu/release/pi-beep; fi) $(ENVIRONMENT_FILE) $(GIT_HASH_FILE) $(VERSION_FILE)
+ALL_TARGETS := $(EMBASSY_BINS) system-images/compat/docker-images/$(ARCH).tar system-images/utils/docker-images/$(ARCH).tar system-images/binfmt/docker-images/$(ARCH).tar $(EMBASSY_SRC) $(shell if [ "$(OS_ARCH)" = "raspberrypi" ]; then echo cargo-deps/aarch64-unknown-linux-gnu/release/pi-beep; fi) $(shell /bin/bash -c 'if [[ "${ENVIRONMENT}" =~ (^|-)unstable($$|-) ]]; then echo cargo-deps/$(ARCH)-unknown-linux-gnu/release/tokio-console; fi') $(ENVIRONMENT_FILE) $(GIT_HASH_FILE) $(VERSION_FILE)
ifeq ($(REMOTE),)
mkdir = mkdir -p $1
@@ -75,7 +75,7 @@ format:
sdk:
cd backend/ && ./install-sdk.sh
-startos_raspberrypi.img: $(BUILD_SRC) startos.raspberrypi.squashfs $(VERSION_FILE) $(ENVIRONMENT_FILE) $(GIT_HASH_FILE) cargo-deps/aarch64-unknown-linux-gnu/release/pi-beep | sudo
+startos_raspberrypi.img: $(BUILD_SRC) startos.raspberrypi.squashfs $(VERSION_FILE) $(ENVIRONMENT_FILE) $(GIT_HASH_FILE) | sudo
./build/raspberrypi/make-image.sh
# For creating os images. DO NOT USE
@@ -85,9 +85,11 @@ install: $(ALL_TARGETS)
$(call ln,/usr/bin/startbox,$(DESTDIR)/usr/bin/startd)
$(call ln,/usr/bin/startbox,$(DESTDIR)/usr/bin/start-cli)
$(call ln,/usr/bin/startbox,$(DESTDIR)/usr/bin/start-sdk)
+ $(call ln,/usr/bin/startbox,$(DESTDIR)/usr/bin/start-deno)
$(call ln,/usr/bin/startbox,$(DESTDIR)/usr/bin/avahi-alias)
$(call ln,/usr/bin/startbox,$(DESTDIR)/usr/bin/embassy-cli)
if [ "$(OS_ARCH)" = "raspberrypi" ]; then $(call cp,cargo-deps/aarch64-unknown-linux-gnu/release/pi-beep,$(DESTDIR)/usr/bin/pi-beep); fi
+ if /bin/bash -c '[[ "${ENVIRONMENT}" =~ (^|-)unstable($$|-) ]]'; then $(call cp,cargo-deps/$(ARCH)-unknown-linux-gnu/release/tokio-console,$(DESTDIR)/usr/bin/tokio-console); fi
$(call mkdir,$(DESTDIR)/usr/lib)
$(call rm,$(DESTDIR)/usr/lib/embassy)
@@ -122,7 +124,7 @@ update:
@if [ -z "$(REMOTE)" ]; then >&2 echo "Must specify REMOTE" && false; fi
$(call ssh,"sudo rsync -a --delete --force --info=progress2 /media/embassy/embassyfs/current/ /media/embassy/next/")
$(MAKE) install REMOTE=$(REMOTE) SSHPASS=$(SSHPASS) DESTDIR=/media/embassy/next OS_ARCH=$(OS_ARCH)
- $(call ssh,"sudo touch /media/embassy/config/upgrade && sudo sync && sudo reboot")
+ $(call ssh,'sudo NO_SYNC=1 /media/embassy/next/usr/lib/embassy/scripts/chroot-and-upgrade "apt-get install -y $(shell cat ./build/lib/depends)"')
emulate-reflash:
@if [ -z "$(REMOTE)" ]; then >&2 echo "Must specify REMOTE" && false; fi
@@ -130,14 +132,14 @@ emulate-reflash:
$(MAKE) install REMOTE=$(REMOTE) SSHPASS=$(SSHPASS) DESTDIR=/media/embassy/next OS_ARCH=$(OS_ARCH)
$(call ssh,"sudo touch /media/embassy/config/upgrade && sudo rm -f /media/embassy/config/disk.guid && sudo sync && sudo reboot")
-system-images/compat/docker-images/aarch64.tar system-images/compat/docker-images/x86_64.tar: $(COMPAT_SRC) | sudo
- cd system-images/compat && make
+system-images/compat/docker-images/aarch64.tar system-images/compat/docker-images/x86_64.tar: $(COMPAT_SRC) backend/Cargo.lock | sudo
+ cd system-images/compat && make && touch docker-images/*.tar
system-images/utils/docker-images/aarch64.tar system-images/utils/docker-images/x86_64.tar: $(UTILS_SRC) | sudo
- cd system-images/utils && make
+ cd system-images/utils && make && touch docker-images/*.tar
system-images/binfmt/docker-images/aarch64.tar system-images/binfmt/docker-images/x86_64.tar: $(BINFMT_SRC) | sudo
- cd system-images/binfmt && make
+ cd system-images/binfmt && make && touch docker-images/*.tar
snapshots: libs/snapshot_creator/Cargo.toml
cd libs/ && ./build-v8-snapshot.sh
@@ -198,3 +200,6 @@ backend: $(EMBASSY_BINS)
cargo-deps/aarch64-unknown-linux-gnu/release/pi-beep: | sudo
ARCH=aarch64 ./build-cargo-dep.sh pi-beep
+
+cargo-deps/$(ARCH)-unknown-linux-gnu/release/tokio-console: | sudo
+ ARCH=$(ARCH) ./build-cargo-dep.sh tokio-console
diff --git a/README.md b/README.md
index 125a956a4..db3c24e73 100644
--- a/README.md
+++ b/README.md
@@ -1,32 +1,35 @@
@@ -35,7 +38,7 @@
Welcome to the era of Sovereign Computing
- StartOS is a Debian-based Linux distro optimized for running a personal server. It facilitates the discovery, installation, network configuration, service configuration, data backup, dependency management, and health monitoring of self-hosted software services.
+ StartOS is an open source Linux distribution optimized for running a personal server. It facilitates the discovery, installation, network configuration, service configuration, data backup, dependency management, and health monitoring of self-hosted software services.
@@ -65,7 +68,7 @@ There are multiple ways to contribute: work directly on StartOS, package a servi
To report security issues, please email our security team - security@start9.com.
## 🌎 Marketplace
-There are dozens of service available for StartOS, and new ones are being added all the time. Check out the full list of available services [here](https://marketplace.start9.com/marketplace). To read more about the Marketplace ecosystem, check out this [blog post](https://blog.start9.com/start9-marketplace-strategy/)
+There are dozens of services available for StartOS, and new ones are being added all the time. Check out the full list of available services [here](https://marketplace.start9.com/marketplace). To read more about the Marketplace ecosystem, check out this [blog post](https://blog.start9.com/start9-marketplace-strategy/)
## 🖥️ User Interface Screenshots
diff --git a/backend/.sqlx/query-1ce5254f27de971fd87f5ab66d300f2b22433c86617a0dbf796bf2170186dd2e.json b/backend/.sqlx/query-1ce5254f27de971fd87f5ab66d300f2b22433c86617a0dbf796bf2170186dd2e.json
new file mode 100644
index 000000000..d36100fef
--- /dev/null
+++ b/backend/.sqlx/query-1ce5254f27de971fd87f5ab66d300f2b22433c86617a0dbf796bf2170186dd2e.json
@@ -0,0 +1,16 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "INSERT INTO network_keys (package, interface, key) VALUES ($1, $2, $3) ON CONFLICT (package, interface) DO NOTHING",
+ "describe": {
+ "columns": [],
+ "parameters": {
+ "Left": [
+ "Text",
+ "Text",
+ "Bytea"
+ ]
+ },
+ "nullable": []
+ },
+ "hash": "1ce5254f27de971fd87f5ab66d300f2b22433c86617a0dbf796bf2170186dd2e"
+}
diff --git a/backend/.sqlx/query-21471490cdc3adb206274cc68e1ea745ffa5da4479478c1fd2158a45324b1930.json b/backend/.sqlx/query-21471490cdc3adb206274cc68e1ea745ffa5da4479478c1fd2158a45324b1930.json
new file mode 100644
index 000000000..e0b1d7cf2
--- /dev/null
+++ b/backend/.sqlx/query-21471490cdc3adb206274cc68e1ea745ffa5da4479478c1fd2158a45324b1930.json
@@ -0,0 +1,14 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "DELETE FROM ssh_keys WHERE fingerprint = $1",
+ "describe": {
+ "columns": [],
+ "parameters": {
+ "Left": [
+ "Text"
+ ]
+ },
+ "nullable": []
+ },
+ "hash": "21471490cdc3adb206274cc68e1ea745ffa5da4479478c1fd2158a45324b1930"
+}
diff --git a/backend/.sqlx/query-28ea34bbde836e0618c5fc9bb7c36e463c20c841a7d6a0eb15be0f24f4a928ec.json b/backend/.sqlx/query-28ea34bbde836e0618c5fc9bb7c36e463c20c841a7d6a0eb15be0f24f4a928ec.json
new file mode 100644
index 000000000..e234a72a9
--- /dev/null
+++ b/backend/.sqlx/query-28ea34bbde836e0618c5fc9bb7c36e463c20c841a7d6a0eb15be0f24f4a928ec.json
@@ -0,0 +1,40 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "SELECT hostname, path, username, password FROM cifs_shares WHERE id = $1",
+ "describe": {
+ "columns": [
+ {
+ "ordinal": 0,
+ "name": "hostname",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 1,
+ "name": "path",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 2,
+ "name": "username",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 3,
+ "name": "password",
+ "type_info": "Text"
+ }
+ ],
+ "parameters": {
+ "Left": [
+ "Int4"
+ ]
+ },
+ "nullable": [
+ false,
+ false,
+ false,
+ true
+ ]
+ },
+ "hash": "28ea34bbde836e0618c5fc9bb7c36e463c20c841a7d6a0eb15be0f24f4a928ec"
+}
diff --git a/backend/.sqlx/query-4099028a5c0de578255bf54a67cef6cb0f1e9a4e158260700f1639dd4b438997.json b/backend/.sqlx/query-4099028a5c0de578255bf54a67cef6cb0f1e9a4e158260700f1639dd4b438997.json
new file mode 100644
index 000000000..761af064b
--- /dev/null
+++ b/backend/.sqlx/query-4099028a5c0de578255bf54a67cef6cb0f1e9a4e158260700f1639dd4b438997.json
@@ -0,0 +1,34 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "SELECT * FROM ssh_keys WHERE fingerprint = $1",
+ "describe": {
+ "columns": [
+ {
+ "ordinal": 0,
+ "name": "fingerprint",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 1,
+ "name": "openssh_pubkey",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 2,
+ "name": "created_at",
+ "type_info": "Text"
+ }
+ ],
+ "parameters": {
+ "Left": [
+ "Text"
+ ]
+ },
+ "nullable": [
+ false,
+ false,
+ false
+ ]
+ },
+ "hash": "4099028a5c0de578255bf54a67cef6cb0f1e9a4e158260700f1639dd4b438997"
+}
diff --git a/backend/.sqlx/query-4691e3a2ce80b59009ac17124f54f925f61dc5ea371903e62cdffa5d7b67ca96.json b/backend/.sqlx/query-4691e3a2ce80b59009ac17124f54f925f61dc5ea371903e62cdffa5d7b67ca96.json
new file mode 100644
index 000000000..1f7edd1ce
--- /dev/null
+++ b/backend/.sqlx/query-4691e3a2ce80b59009ac17124f54f925f61dc5ea371903e62cdffa5d7b67ca96.json
@@ -0,0 +1,50 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "SELECT * FROM session WHERE logged_out IS NULL OR logged_out > CURRENT_TIMESTAMP",
+ "describe": {
+ "columns": [
+ {
+ "ordinal": 0,
+ "name": "id",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 1,
+ "name": "logged_in",
+ "type_info": "Timestamp"
+ },
+ {
+ "ordinal": 2,
+ "name": "logged_out",
+ "type_info": "Timestamp"
+ },
+ {
+ "ordinal": 3,
+ "name": "last_active",
+ "type_info": "Timestamp"
+ },
+ {
+ "ordinal": 4,
+ "name": "user_agent",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 5,
+ "name": "metadata",
+ "type_info": "Text"
+ }
+ ],
+ "parameters": {
+ "Left": []
+ },
+ "nullable": [
+ false,
+ false,
+ true,
+ false,
+ true,
+ false
+ ]
+ },
+ "hash": "4691e3a2ce80b59009ac17124f54f925f61dc5ea371903e62cdffa5d7b67ca96"
+}
diff --git a/backend/.sqlx/query-4bcfbefb1eb3181343871a1cd7fc3afb81c2be5c681cfa8b4be0ce70610e9c3a.json b/backend/.sqlx/query-4bcfbefb1eb3181343871a1cd7fc3afb81c2be5c681cfa8b4be0ce70610e9c3a.json
new file mode 100644
index 000000000..2157198e5
--- /dev/null
+++ b/backend/.sqlx/query-4bcfbefb1eb3181343871a1cd7fc3afb81c2be5c681cfa8b4be0ce70610e9c3a.json
@@ -0,0 +1,14 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "UPDATE session SET logged_out = CURRENT_TIMESTAMP WHERE id = $1",
+ "describe": {
+ "columns": [],
+ "parameters": {
+ "Left": [
+ "Text"
+ ]
+ },
+ "nullable": []
+ },
+ "hash": "4bcfbefb1eb3181343871a1cd7fc3afb81c2be5c681cfa8b4be0ce70610e9c3a"
+}
diff --git a/backend/.sqlx/query-629be61c3c341c131ddbbff0293a83dbc6afd07cae69d246987f62cf0cc35c2a.json b/backend/.sqlx/query-629be61c3c341c131ddbbff0293a83dbc6afd07cae69d246987f62cf0cc35c2a.json
new file mode 100644
index 000000000..764cff84a
--- /dev/null
+++ b/backend/.sqlx/query-629be61c3c341c131ddbbff0293a83dbc6afd07cae69d246987f62cf0cc35c2a.json
@@ -0,0 +1,20 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "SELECT password FROM account",
+ "describe": {
+ "columns": [
+ {
+ "ordinal": 0,
+ "name": "password",
+ "type_info": "Text"
+ }
+ ],
+ "parameters": {
+ "Left": []
+ },
+ "nullable": [
+ false
+ ]
+ },
+ "hash": "629be61c3c341c131ddbbff0293a83dbc6afd07cae69d246987f62cf0cc35c2a"
+}
diff --git a/backend/.sqlx/query-687688055e63d27123cdc89a5bbbd8361776290a9411d527eaf1fdb40bef399d.json b/backend/.sqlx/query-687688055e63d27123cdc89a5bbbd8361776290a9411d527eaf1fdb40bef399d.json
new file mode 100644
index 000000000..2e8a9ee0e
--- /dev/null
+++ b/backend/.sqlx/query-687688055e63d27123cdc89a5bbbd8361776290a9411d527eaf1fdb40bef399d.json
@@ -0,0 +1,23 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "SELECT key FROM tor WHERE package = $1 AND interface = $2",
+ "describe": {
+ "columns": [
+ {
+ "ordinal": 0,
+ "name": "key",
+ "type_info": "Bytea"
+ }
+ ],
+ "parameters": {
+ "Left": [
+ "Text",
+ "Text"
+ ]
+ },
+ "nullable": [
+ false
+ ]
+ },
+ "hash": "687688055e63d27123cdc89a5bbbd8361776290a9411d527eaf1fdb40bef399d"
+}
diff --git a/backend/.sqlx/query-6d35ccf780fb2bb62586dd1d3df9c1550a41ee580dad3f49d35cb843ebef10ca.json b/backend/.sqlx/query-6d35ccf780fb2bb62586dd1d3df9c1550a41ee580dad3f49d35cb843ebef10ca.json
new file mode 100644
index 000000000..3f859bd10
--- /dev/null
+++ b/backend/.sqlx/query-6d35ccf780fb2bb62586dd1d3df9c1550a41ee580dad3f49d35cb843ebef10ca.json
@@ -0,0 +1,14 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "UPDATE session SET last_active = CURRENT_TIMESTAMP WHERE id = $1 AND logged_out IS NULL OR logged_out > CURRENT_TIMESTAMP",
+ "describe": {
+ "columns": [],
+ "parameters": {
+ "Left": [
+ "Text"
+ ]
+ },
+ "nullable": []
+ },
+ "hash": "6d35ccf780fb2bb62586dd1d3df9c1550a41ee580dad3f49d35cb843ebef10ca"
+}
diff --git a/backend/.sqlx/query-770c1017734720453dc87b58c385b987c5af5807151ff71a59000014586752e0.json b/backend/.sqlx/query-770c1017734720453dc87b58c385b987c5af5807151ff71a59000014586752e0.json
new file mode 100644
index 000000000..cf3591e01
--- /dev/null
+++ b/backend/.sqlx/query-770c1017734720453dc87b58c385b987c5af5807151ff71a59000014586752e0.json
@@ -0,0 +1,24 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "INSERT INTO network_keys (package, interface, key) VALUES ($1, $2, $3) ON CONFLICT (package, interface) DO UPDATE SET package = EXCLUDED.package RETURNING key",
+ "describe": {
+ "columns": [
+ {
+ "ordinal": 0,
+ "name": "key",
+ "type_info": "Bytea"
+ }
+ ],
+ "parameters": {
+ "Left": [
+ "Text",
+ "Text",
+ "Bytea"
+ ]
+ },
+ "nullable": [
+ false
+ ]
+ },
+ "hash": "770c1017734720453dc87b58c385b987c5af5807151ff71a59000014586752e0"
+}
diff --git a/backend/.sqlx/query-7b64f032d507e8ffe37c41f4c7ad514a66c421a11ab04c26d89a7aa8f6b67210.json b/backend/.sqlx/query-7b64f032d507e8ffe37c41f4c7ad514a66c421a11ab04c26d89a7aa8f6b67210.json
new file mode 100644
index 000000000..53fc6f066
--- /dev/null
+++ b/backend/.sqlx/query-7b64f032d507e8ffe37c41f4c7ad514a66c421a11ab04c26d89a7aa8f6b67210.json
@@ -0,0 +1,65 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "SELECT id, package_id, created_at, code, level, title, message, data FROM notifications WHERE id < $1 ORDER BY id DESC LIMIT $2",
+ "describe": {
+ "columns": [
+ {
+ "ordinal": 0,
+ "name": "id",
+ "type_info": "Int4"
+ },
+ {
+ "ordinal": 1,
+ "name": "package_id",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 2,
+ "name": "created_at",
+ "type_info": "Timestamp"
+ },
+ {
+ "ordinal": 3,
+ "name": "code",
+ "type_info": "Int4"
+ },
+ {
+ "ordinal": 4,
+ "name": "level",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 5,
+ "name": "title",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 6,
+ "name": "message",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 7,
+ "name": "data",
+ "type_info": "Text"
+ }
+ ],
+ "parameters": {
+ "Left": [
+ "Int4",
+ "Int8"
+ ]
+ },
+ "nullable": [
+ false,
+ true,
+ false,
+ false,
+ false,
+ false,
+ false,
+ true
+ ]
+ },
+ "hash": "7b64f032d507e8ffe37c41f4c7ad514a66c421a11ab04c26d89a7aa8f6b67210"
+}
diff --git a/backend/.sqlx/query-7c7a3549c997eb75bf964ea65fbb98a73045adf618696cd838d79203ef5383fb.json b/backend/.sqlx/query-7c7a3549c997eb75bf964ea65fbb98a73045adf618696cd838d79203ef5383fb.json
new file mode 100644
index 000000000..245a838d8
--- /dev/null
+++ b/backend/.sqlx/query-7c7a3549c997eb75bf964ea65fbb98a73045adf618696cd838d79203ef5383fb.json
@@ -0,0 +1,19 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "\n INSERT INTO account (\n id,\n server_id,\n hostname,\n password,\n network_key,\n root_ca_key_pem,\n root_ca_cert_pem\n ) VALUES (\n 0, $1, $2, $3, $4, $5, $6\n ) ON CONFLICT (id) DO UPDATE SET\n server_id = EXCLUDED.server_id,\n hostname = EXCLUDED.hostname,\n password = EXCLUDED.password,\n network_key = EXCLUDED.network_key,\n root_ca_key_pem = EXCLUDED.root_ca_key_pem,\n root_ca_cert_pem = EXCLUDED.root_ca_cert_pem\n ",
+ "describe": {
+ "columns": [],
+ "parameters": {
+ "Left": [
+ "Text",
+ "Text",
+ "Text",
+ "Bytea",
+ "Text",
+ "Text"
+ ]
+ },
+ "nullable": []
+ },
+ "hash": "7c7a3549c997eb75bf964ea65fbb98a73045adf618696cd838d79203ef5383fb"
+}
diff --git a/backend/.sqlx/query-7e0649d839927e57fa03ee51a2c9f96a8bdb0fc97ee8a3c6df1069e1e2b98576.json b/backend/.sqlx/query-7e0649d839927e57fa03ee51a2c9f96a8bdb0fc97ee8a3c6df1069e1e2b98576.json
new file mode 100644
index 000000000..e3ce7957d
--- /dev/null
+++ b/backend/.sqlx/query-7e0649d839927e57fa03ee51a2c9f96a8bdb0fc97ee8a3c6df1069e1e2b98576.json
@@ -0,0 +1,14 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "DELETE FROM tor WHERE package = $1",
+ "describe": {
+ "columns": [],
+ "parameters": {
+ "Left": [
+ "Text"
+ ]
+ },
+ "nullable": []
+ },
+ "hash": "7e0649d839927e57fa03ee51a2c9f96a8bdb0fc97ee8a3c6df1069e1e2b98576"
+}
diff --git a/backend/.sqlx/query-8951b9126fbf60dbb5997241e11e3526b70bccf3e407327917294a993bc17ed5.json b/backend/.sqlx/query-8951b9126fbf60dbb5997241e11e3526b70bccf3e407327917294a993bc17ed5.json
new file mode 100644
index 000000000..e39aebf69
--- /dev/null
+++ b/backend/.sqlx/query-8951b9126fbf60dbb5997241e11e3526b70bccf3e407327917294a993bc17ed5.json
@@ -0,0 +1,16 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "INSERT INTO tor (package, interface, key) VALUES ($1, $2, $3) ON CONFLICT (package, interface) DO NOTHING",
+ "describe": {
+ "columns": [],
+ "parameters": {
+ "Left": [
+ "Text",
+ "Text",
+ "Bytea"
+ ]
+ },
+ "nullable": []
+ },
+ "hash": "8951b9126fbf60dbb5997241e11e3526b70bccf3e407327917294a993bc17ed5"
+}
diff --git a/backend/.sqlx/query-94d471bb374b4965c6cbedf8c17bbf6bea226d38efaf6559923c79a36d5ca08c.json b/backend/.sqlx/query-94d471bb374b4965c6cbedf8c17bbf6bea226d38efaf6559923c79a36d5ca08c.json
new file mode 100644
index 000000000..e7fe8d38c
--- /dev/null
+++ b/backend/.sqlx/query-94d471bb374b4965c6cbedf8c17bbf6bea226d38efaf6559923c79a36d5ca08c.json
@@ -0,0 +1,64 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "SELECT id, package_id, created_at, code, level, title, message, data FROM notifications ORDER BY id DESC LIMIT $1",
+ "describe": {
+ "columns": [
+ {
+ "ordinal": 0,
+ "name": "id",
+ "type_info": "Int4"
+ },
+ {
+ "ordinal": 1,
+ "name": "package_id",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 2,
+ "name": "created_at",
+ "type_info": "Timestamp"
+ },
+ {
+ "ordinal": 3,
+ "name": "code",
+ "type_info": "Int4"
+ },
+ {
+ "ordinal": 4,
+ "name": "level",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 5,
+ "name": "title",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 6,
+ "name": "message",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 7,
+ "name": "data",
+ "type_info": "Text"
+ }
+ ],
+ "parameters": {
+ "Left": [
+ "Int8"
+ ]
+ },
+ "nullable": [
+ false,
+ true,
+ false,
+ false,
+ false,
+ false,
+ false,
+ true
+ ]
+ },
+ "hash": "94d471bb374b4965c6cbedf8c17bbf6bea226d38efaf6559923c79a36d5ca08c"
+}
diff --git a/backend/.sqlx/query-95c4ab4c645f3302568c6ff13d85ab58252362694cf0f56999bf60194d20583a.json b/backend/.sqlx/query-95c4ab4c645f3302568c6ff13d85ab58252362694cf0f56999bf60194d20583a.json
new file mode 100644
index 000000000..aadc0fc3a
--- /dev/null
+++ b/backend/.sqlx/query-95c4ab4c645f3302568c6ff13d85ab58252362694cf0f56999bf60194d20583a.json
@@ -0,0 +1,44 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "SELECT id, hostname, path, username, password FROM cifs_shares",
+ "describe": {
+ "columns": [
+ {
+ "ordinal": 0,
+ "name": "id",
+ "type_info": "Int4"
+ },
+ {
+ "ordinal": 1,
+ "name": "hostname",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 2,
+ "name": "path",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 3,
+ "name": "username",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 4,
+ "name": "password",
+ "type_info": "Text"
+ }
+ ],
+ "parameters": {
+ "Left": []
+ },
+ "nullable": [
+ false,
+ false,
+ false,
+ false,
+ true
+ ]
+ },
+ "hash": "95c4ab4c645f3302568c6ff13d85ab58252362694cf0f56999bf60194d20583a"
+}
diff --git a/backend/.sqlx/query-a60d6e66719325b08dc4ecfacaf337527233c84eee758ac9be967906e5841d27.json b/backend/.sqlx/query-a60d6e66719325b08dc4ecfacaf337527233c84eee758ac9be967906e5841d27.json
new file mode 100644
index 000000000..c56a9ebd1
--- /dev/null
+++ b/backend/.sqlx/query-a60d6e66719325b08dc4ecfacaf337527233c84eee758ac9be967906e5841d27.json
@@ -0,0 +1,14 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "DELETE FROM cifs_shares WHERE id = $1",
+ "describe": {
+ "columns": [],
+ "parameters": {
+ "Left": [
+ "Int4"
+ ]
+ },
+ "nullable": []
+ },
+ "hash": "a60d6e66719325b08dc4ecfacaf337527233c84eee758ac9be967906e5841d27"
+}
diff --git a/backend/.sqlx/query-a6b0c8909a3a5d6d9156aebfb359424e6b5a1d1402e028219e21726f1ebd282e.json b/backend/.sqlx/query-a6b0c8909a3a5d6d9156aebfb359424e6b5a1d1402e028219e21726f1ebd282e.json
new file mode 100644
index 000000000..86bd9250e
--- /dev/null
+++ b/backend/.sqlx/query-a6b0c8909a3a5d6d9156aebfb359424e6b5a1d1402e028219e21726f1ebd282e.json
@@ -0,0 +1,32 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "SELECT fingerprint, openssh_pubkey, created_at FROM ssh_keys",
+ "describe": {
+ "columns": [
+ {
+ "ordinal": 0,
+ "name": "fingerprint",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 1,
+ "name": "openssh_pubkey",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 2,
+ "name": "created_at",
+ "type_info": "Text"
+ }
+ ],
+ "parameters": {
+ "Left": []
+ },
+ "nullable": [
+ false,
+ false,
+ false
+ ]
+ },
+ "hash": "a6b0c8909a3a5d6d9156aebfb359424e6b5a1d1402e028219e21726f1ebd282e"
+}
diff --git a/backend/.sqlx/query-b1147beaaabbed89f2ab8c1e13ec4393a9a8fde2833cf096af766a979d94dee6.json b/backend/.sqlx/query-b1147beaaabbed89f2ab8c1e13ec4393a9a8fde2833cf096af766a979d94dee6.json
new file mode 100644
index 000000000..c8ff84277
--- /dev/null
+++ b/backend/.sqlx/query-b1147beaaabbed89f2ab8c1e13ec4393a9a8fde2833cf096af766a979d94dee6.json
@@ -0,0 +1,18 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "UPDATE cifs_shares SET hostname = $1, path = $2, username = $3, password = $4 WHERE id = $5",
+ "describe": {
+ "columns": [],
+ "parameters": {
+ "Left": [
+ "Text",
+ "Text",
+ "Text",
+ "Text",
+ "Int4"
+ ]
+ },
+ "nullable": []
+ },
+ "hash": "b1147beaaabbed89f2ab8c1e13ec4393a9a8fde2833cf096af766a979d94dee6"
+}
diff --git a/backend/.sqlx/query-d5117054072476377f3c4f040ea429d4c9b2cf534e76f35c80a2bf60e8599cca.json b/backend/.sqlx/query-d5117054072476377f3c4f040ea429d4c9b2cf534e76f35c80a2bf60e8599cca.json
new file mode 100644
index 000000000..b77ba7ce9
--- /dev/null
+++ b/backend/.sqlx/query-d5117054072476377f3c4f040ea429d4c9b2cf534e76f35c80a2bf60e8599cca.json
@@ -0,0 +1,20 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "SELECT openssh_pubkey FROM ssh_keys",
+ "describe": {
+ "columns": [
+ {
+ "ordinal": 0,
+ "name": "openssh_pubkey",
+ "type_info": "Text"
+ }
+ ],
+ "parameters": {
+ "Left": []
+ },
+ "nullable": [
+ false
+ ]
+ },
+ "hash": "d5117054072476377f3c4f040ea429d4c9b2cf534e76f35c80a2bf60e8599cca"
+}
diff --git a/backend/.sqlx/query-da71f94b29798d1738d2b10b9a721ea72db8cfb362e7181c8226d9297507c62b.json b/backend/.sqlx/query-da71f94b29798d1738d2b10b9a721ea72db8cfb362e7181c8226d9297507c62b.json
new file mode 100644
index 000000000..5c5c89c27
--- /dev/null
+++ b/backend/.sqlx/query-da71f94b29798d1738d2b10b9a721ea72db8cfb362e7181c8226d9297507c62b.json
@@ -0,0 +1,19 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "INSERT INTO notifications (package_id, code, level, title, message, data) VALUES ($1, $2, $3, $4, $5, $6)",
+ "describe": {
+ "columns": [],
+ "parameters": {
+ "Left": [
+ "Text",
+ "Int4",
+ "Text",
+ "Text",
+ "Text",
+ "Text"
+ ]
+ },
+ "nullable": []
+ },
+ "hash": "da71f94b29798d1738d2b10b9a721ea72db8cfb362e7181c8226d9297507c62b"
+}
diff --git a/backend/.sqlx/query-e185203cf84e43b801dfb23b4159e34aeaef1154dcd3d6811ab504915497ccf7.json b/backend/.sqlx/query-e185203cf84e43b801dfb23b4159e34aeaef1154dcd3d6811ab504915497ccf7.json
new file mode 100644
index 000000000..a4dc187cd
--- /dev/null
+++ b/backend/.sqlx/query-e185203cf84e43b801dfb23b4159e34aeaef1154dcd3d6811ab504915497ccf7.json
@@ -0,0 +1,14 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "DELETE FROM notifications WHERE id = $1",
+ "describe": {
+ "columns": [],
+ "parameters": {
+ "Left": [
+ "Int4"
+ ]
+ },
+ "nullable": []
+ },
+ "hash": "e185203cf84e43b801dfb23b4159e34aeaef1154dcd3d6811ab504915497ccf7"
+}
diff --git a/backend/.sqlx/query-e545696735f202f9d13cf22a561f3ff3f9aed7f90027a9ba97634bcb47d772f0.json b/backend/.sqlx/query-e545696735f202f9d13cf22a561f3ff3f9aed7f90027a9ba97634bcb47d772f0.json
new file mode 100644
index 000000000..97a4ec95a
--- /dev/null
+++ b/backend/.sqlx/query-e545696735f202f9d13cf22a561f3ff3f9aed7f90027a9ba97634bcb47d772f0.json
@@ -0,0 +1,20 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "SELECT tor_key FROM account WHERE id = 0",
+ "describe": {
+ "columns": [
+ {
+ "ordinal": 0,
+ "name": "tor_key",
+ "type_info": "Bytea"
+ }
+ ],
+ "parameters": {
+ "Left": []
+ },
+ "nullable": [
+ true
+ ]
+ },
+ "hash": "e545696735f202f9d13cf22a561f3ff3f9aed7f90027a9ba97634bcb47d772f0"
+}
diff --git a/backend/.sqlx/query-e5843c5b0e7819b29aa1abf2266799bd4f82e761837b526a0972c3d4439a264d.json b/backend/.sqlx/query-e5843c5b0e7819b29aa1abf2266799bd4f82e761837b526a0972c3d4439a264d.json
new file mode 100644
index 000000000..b2aa04370
--- /dev/null
+++ b/backend/.sqlx/query-e5843c5b0e7819b29aa1abf2266799bd4f82e761837b526a0972c3d4439a264d.json
@@ -0,0 +1,16 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "INSERT INTO session (id, user_agent, metadata) VALUES ($1, $2, $3)",
+ "describe": {
+ "columns": [],
+ "parameters": {
+ "Left": [
+ "Text",
+ "Text",
+ "Text"
+ ]
+ },
+ "nullable": []
+ },
+ "hash": "e5843c5b0e7819b29aa1abf2266799bd4f82e761837b526a0972c3d4439a264d"
+}
diff --git a/backend/.sqlx/query-e95322a8e2ae3b93f1e974b24c0b81803f1e9ec9e8ebbf15cafddfc1c5a028ed.json b/backend/.sqlx/query-e95322a8e2ae3b93f1e974b24c0b81803f1e9ec9e8ebbf15cafddfc1c5a028ed.json
new file mode 100644
index 000000000..fd5a467ec
--- /dev/null
+++ b/backend/.sqlx/query-e95322a8e2ae3b93f1e974b24c0b81803f1e9ec9e8ebbf15cafddfc1c5a028ed.json
@@ -0,0 +1,40 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "\n SELECT\n network_keys.package,\n network_keys.interface,\n network_keys.key,\n tor.key AS \"tor_key?\"\n FROM\n network_keys\n LEFT JOIN\n tor\n ON\n network_keys.package = tor.package\n AND\n network_keys.interface = tor.interface\n WHERE\n network_keys.package = $1\n ",
+ "describe": {
+ "columns": [
+ {
+ "ordinal": 0,
+ "name": "package",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 1,
+ "name": "interface",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 2,
+ "name": "key",
+ "type_info": "Bytea"
+ },
+ {
+ "ordinal": 3,
+ "name": "tor_key?",
+ "type_info": "Bytea"
+ }
+ ],
+ "parameters": {
+ "Left": [
+ "Text"
+ ]
+ },
+ "nullable": [
+ false,
+ false,
+ false,
+ false
+ ]
+ },
+ "hash": "e95322a8e2ae3b93f1e974b24c0b81803f1e9ec9e8ebbf15cafddfc1c5a028ed"
+}
diff --git a/backend/.sqlx/query-eb750adaa305bdbf3c5b70aaf59139c7b7569602adb58f2d6b3a94da4f167b0a.json b/backend/.sqlx/query-eb750adaa305bdbf3c5b70aaf59139c7b7569602adb58f2d6b3a94da4f167b0a.json
new file mode 100644
index 000000000..fb8a7c1e5
--- /dev/null
+++ b/backend/.sqlx/query-eb750adaa305bdbf3c5b70aaf59139c7b7569602adb58f2d6b3a94da4f167b0a.json
@@ -0,0 +1,14 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "DELETE FROM notifications WHERE id < $1",
+ "describe": {
+ "columns": [],
+ "parameters": {
+ "Left": [
+ "Int4"
+ ]
+ },
+ "nullable": []
+ },
+ "hash": "eb750adaa305bdbf3c5b70aaf59139c7b7569602adb58f2d6b3a94da4f167b0a"
+}
diff --git a/backend/.sqlx/query-ecc765d8205c0876956f95f76944ac6a5f34dd820c4073b7728c7067aab9fded.json b/backend/.sqlx/query-ecc765d8205c0876956f95f76944ac6a5f34dd820c4073b7728c7067aab9fded.json
new file mode 100644
index 000000000..27c9752b2
--- /dev/null
+++ b/backend/.sqlx/query-ecc765d8205c0876956f95f76944ac6a5f34dd820c4073b7728c7067aab9fded.json
@@ -0,0 +1,25 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "INSERT INTO cifs_shares (hostname, path, username, password) VALUES ($1, $2, $3, $4) RETURNING id",
+ "describe": {
+ "columns": [
+ {
+ "ordinal": 0,
+ "name": "id",
+ "type_info": "Int4"
+ }
+ ],
+ "parameters": {
+ "Left": [
+ "Text",
+ "Text",
+ "Text",
+ "Text"
+ ]
+ },
+ "nullable": [
+ false
+ ]
+ },
+ "hash": "ecc765d8205c0876956f95f76944ac6a5f34dd820c4073b7728c7067aab9fded"
+}
diff --git a/backend/.sqlx/query-f6d1c5ef0f9d9577bea8382318967b9deb46da75788c7fe6082b43821c22d556.json b/backend/.sqlx/query-f6d1c5ef0f9d9577bea8382318967b9deb46da75788c7fe6082b43821c22d556.json
new file mode 100644
index 000000000..6ed9898f6
--- /dev/null
+++ b/backend/.sqlx/query-f6d1c5ef0f9d9577bea8382318967b9deb46da75788c7fe6082b43821c22d556.json
@@ -0,0 +1,16 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "INSERT INTO ssh_keys (fingerprint, openssh_pubkey, created_at) VALUES ($1, $2, $3)",
+ "describe": {
+ "columns": [],
+ "parameters": {
+ "Left": [
+ "Text",
+ "Text",
+ "Text"
+ ]
+ },
+ "nullable": []
+ },
+ "hash": "f6d1c5ef0f9d9577bea8382318967b9deb46da75788c7fe6082b43821c22d556"
+}
diff --git a/backend/.sqlx/query-f7d2dae84613bcef330f7403352cc96547f3f6dbec11bf2eadfaf53ad8ab51b5.json b/backend/.sqlx/query-f7d2dae84613bcef330f7403352cc96547f3f6dbec11bf2eadfaf53ad8ab51b5.json
new file mode 100644
index 000000000..f48ccb074
--- /dev/null
+++ b/backend/.sqlx/query-f7d2dae84613bcef330f7403352cc96547f3f6dbec11bf2eadfaf53ad8ab51b5.json
@@ -0,0 +1,20 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "SELECT network_key FROM account WHERE id = 0",
+ "describe": {
+ "columns": [
+ {
+ "ordinal": 0,
+ "name": "network_key",
+ "type_info": "Bytea"
+ }
+ ],
+ "parameters": {
+ "Left": []
+ },
+ "nullable": [
+ false
+ ]
+ },
+ "hash": "f7d2dae84613bcef330f7403352cc96547f3f6dbec11bf2eadfaf53ad8ab51b5"
+}
diff --git a/backend/.sqlx/query-fe6e4f09f3028e5b6b6259e86cbad285680ce157aae9d7837ac020c8b2945e7f.json b/backend/.sqlx/query-fe6e4f09f3028e5b6b6259e86cbad285680ce157aae9d7837ac020c8b2945e7f.json
new file mode 100644
index 000000000..6ef1d5023
--- /dev/null
+++ b/backend/.sqlx/query-fe6e4f09f3028e5b6b6259e86cbad285680ce157aae9d7837ac020c8b2945e7f.json
@@ -0,0 +1,62 @@
+{
+ "db_name": "PostgreSQL",
+ "query": "SELECT * FROM account WHERE id = 0",
+ "describe": {
+ "columns": [
+ {
+ "ordinal": 0,
+ "name": "id",
+ "type_info": "Int4"
+ },
+ {
+ "ordinal": 1,
+ "name": "password",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 2,
+ "name": "tor_key",
+ "type_info": "Bytea"
+ },
+ {
+ "ordinal": 3,
+ "name": "server_id",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 4,
+ "name": "hostname",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 5,
+ "name": "network_key",
+ "type_info": "Bytea"
+ },
+ {
+ "ordinal": 6,
+ "name": "root_ca_key_pem",
+ "type_info": "Text"
+ },
+ {
+ "ordinal": 7,
+ "name": "root_ca_cert_pem",
+ "type_info": "Text"
+ }
+ ],
+ "parameters": {
+ "Left": []
+ },
+ "nullable": [
+ false,
+ false,
+ true,
+ true,
+ true,
+ false,
+ false,
+ false
+ ]
+ },
+ "hash": "fe6e4f09f3028e5b6b6259e86cbad285680ce157aae9d7837ac020c8b2945e7f"
+}
diff --git a/backend/Cargo.lock b/backend/Cargo.lock
index 53f5a6db0..0429bf077 100644
--- a/backend/Cargo.lock
+++ b/backend/Cargo.lock
@@ -34,7 +34,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8"
dependencies = [
"cfg-if 1.0.0",
- "cipher",
+ "cipher 0.3.0",
"cpufeatures",
"ctr",
"opaque-debug",
@@ -65,9 +65,9 @@ dependencies = [
[[package]]
name = "aho-corasick"
-version = "1.1.1"
+version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ea5d730647d4fadd988536d06fecce94b7b4f2a7efdae548f1cf4b63205518ab"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
dependencies = [
"memchr",
]
@@ -146,15 +146,15 @@ dependencies = [
[[package]]
name = "ast_node"
-version = "0.9.4"
+version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c704e2f6ee1a98223f5a7629a6ef0f3decb3b552ed282889dc957edff98ce1e6"
+checksum = "c09c69dffe06d222d072c878c3afe86eee2179806f20503faec97250268b4c24"
dependencies = [
"pmutil",
- "proc-macro2 1.0.67",
- "quote 1.0.33",
+ "proc-macro2",
+ "quote",
"swc_macros_common",
- "syn 1.0.109",
+ "syn 2.0.38",
]
[[package]]
@@ -170,9 +170,9 @@ dependencies = [
[[package]]
name = "async-compression"
-version = "0.3.15"
+version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "942c7cd7ae39e91bde4820d74132e9862e62c2f386c3aa90ccf55949f5bad63a"
+checksum = "f658e2baef915ba0f26f1f7c42bfb8e12f532a01f449a090ded75ae7a07e9ba2"
dependencies = [
"brotli",
"flate2",
@@ -199,27 +199,27 @@ version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
dependencies = [
- "proc-macro2 1.0.67",
- "quote 1.0.33",
- "syn 2.0.18",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
]
[[package]]
name = "async-trait"
-version = "0.1.69"
+version = "0.1.74"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b2d0f03b3640e3a630367e40c468cb7f309529c708ed1d88597047b0e7c6ef7"
+checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9"
dependencies = [
- "proc-macro2 1.0.67",
- "quote 1.0.33",
- "syn 2.0.18",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
]
[[package]]
name = "atoi"
-version = "1.0.0"
+version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d7c57d12312ff59c811c0643f4d80830505833c9ffaebd193d819392b265be8e"
+checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528"
dependencies = [
"num-traits",
]
@@ -250,6 +250,51 @@ dependencies = [
"libc",
]
+[[package]]
+name = "axum"
+version = "0.6.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf"
+dependencies = [
+ "async-trait",
+ "axum-core",
+ "bitflags 1.3.2",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "hyper",
+ "itoa",
+ "matchit",
+ "memchr",
+ "mime",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustversion",
+ "serde",
+ "sync_wrapper",
+ "tower",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "axum-core"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "mime",
+ "rustversion",
+ "tower-layer",
+ "tower-service",
+]
+
[[package]]
name = "backtrace"
version = "0.3.69"
@@ -267,9 +312,9 @@ dependencies = [
[[package]]
name = "base16ct"
-version = "0.1.1"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce"
+checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
[[package]]
name = "base32"
@@ -349,8 +394,8 @@ dependencies = [
"lazycell",
"log",
"peeking_take_while",
- "proc-macro2 1.0.67",
- "quote 1.0.33",
+ "proc-macro2",
+ "quote",
"regex",
"rustc-hash",
"shlex",
@@ -380,9 +425,12 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
-version = "2.4.0"
+version = "2.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
+checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+dependencies = [
+ "serde",
+]
[[package]]
name = "bitmaps"
@@ -440,9 +488,9 @@ checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae"
[[package]]
name = "brotli"
-version = "3.3.4"
+version = "3.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68"
+checksum = "516074a47ef4bce09577a3b379392300159ce5b1ba2e501ff1c819950066100f"
dependencies = [
"alloc-no-stdlib",
"alloc-stdlib",
@@ -451,9 +499,9 @@ dependencies = [
[[package]]
name = "brotli-decompressor"
-version = "2.3.4"
+version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744"
+checksum = "da74e2b81409b1b743f8f0c62cc6254afefb8b8e50bbfe3735550f7aeefa3448"
dependencies = [
"alloc-no-stdlib",
"alloc-stdlib",
@@ -467,9 +515,9 @@ checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
[[package]]
name = "byteorder"
-version = "1.4.3"
+version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
[[package]]
name = "bytes"
@@ -567,6 +615,16 @@ dependencies = [
"generic-array",
]
+[[package]]
+name = "cipher"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
+dependencies = [
+ "crypto-common",
+ "inout",
+]
+
[[package]]
name = "clang-sys"
version = "1.6.1"
@@ -666,12 +724,69 @@ dependencies = [
"windows-sys 0.45.0",
]
+[[package]]
+name = "console-api"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd326812b3fd01da5bb1af7d340d0d555fd3d4b641e7f1dfcf5962a902952787"
+dependencies = [
+ "futures-core",
+ "prost",
+ "prost-types",
+ "tonic",
+ "tracing-core",
+]
+
+[[package]]
+name = "console-subscriber"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7481d4c57092cd1c19dd541b92bdce883de840df30aa5d03fd48a3935c01842e"
+dependencies = [
+ "console-api",
+ "crossbeam-channel",
+ "crossbeam-utils",
+ "futures-task",
+ "hdrhistogram",
+ "humantime 2.1.0",
+ "prost-types",
+ "serde",
+ "serde_json",
+ "thread_local",
+ "tokio",
+ "tokio-stream",
+ "tonic",
+ "tracing",
+ "tracing-core",
+ "tracing-subscriber",
+]
+
[[package]]
name = "const-oid"
version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f"
+[[package]]
+name = "const_format"
+version = "0.2.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3a214c7af3d04997541b18d432afaff4c455e79e2029079647e72fc2bd27673"
+dependencies = [
+ "const_format_proc_macros",
+]
+
+[[package]]
+name = "const_format_proc_macros"
+version = "0.2.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7f6ff08fd20f4f299298a28e2dfa8a8ba1036e6cd2460ac1de7b425d76f2500"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
+]
+
[[package]]
name = "constant_time_eq"
version = "0.3.0"
@@ -684,6 +799,15 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
+[[package]]
+name = "convert_case"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca"
+dependencies = [
+ "unicode-segmentation",
+]
+
[[package]]
name = "cookie"
version = "0.16.2"
@@ -695,13 +819,34 @@ dependencies = [
"version_check",
]
+[[package]]
+name = "cookie"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7efb37c3e1ccb1ff97164ad95ac1606e8ccd35b3fa0a7d99a304c7f4a428cc24"
+dependencies = [
+ "percent-encoding",
+ "time",
+ "version_check",
+]
+
+[[package]]
+name = "cookie"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3cd91cf61412820176e137621345ee43b3f4423e589e7ae4e50d601d93e35ef8"
+dependencies = [
+ "time",
+ "version_check",
+]
+
[[package]]
name = "cookie_store"
version = "0.16.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d606d0fba62e13cf04db20536c05cb7f13673c161cb47a47a82b9b9e7d3f1daa"
dependencies = [
- "cookie",
+ "cookie 0.16.2",
"idna 0.2.3",
"log",
"publicsuffix",
@@ -714,11 +859,11 @@ dependencies = [
[[package]]
name = "cookie_store"
-version = "0.19.1"
+version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d5a18f35792056f8c7c2de9c002e7e4fe44c7b5f66e7d99f46468dbb730a7ea7"
+checksum = "387461abbc748185c3a6e1673d826918b450b87ff22639429c694619a83b6cf6"
dependencies = [
- "cookie",
+ "cookie 0.17.0",
"idna 0.3.0",
"log",
"publicsuffix",
@@ -778,6 +923,16 @@ dependencies = [
"cfg-if 1.0.0",
]
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-utils",
+]
+
[[package]]
name = "crossbeam-queue"
version = "0.3.8"
@@ -805,9 +960,9 @@ checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
[[package]]
name = "crypto-bigint"
-version = "0.4.9"
+version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef"
+checksum = "740fe28e594155f10cfc383984cbefd529d7396050557148f79cb0f621204124"
dependencies = [
"generic-array",
"rand_core 0.6.4",
@@ -837,9 +992,9 @@ dependencies = [
[[package]]
name = "csv"
-version = "1.2.2"
+version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "626ae34994d3d8d668f4269922248239db4ae42d538b14c398b74a52208e8086"
+checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe"
dependencies = [
"csv-core",
"itoa",
@@ -849,9 +1004,9 @@ dependencies = [
[[package]]
name = "csv-core"
-version = "0.1.10"
+version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90"
+checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70"
dependencies = [
"memchr",
]
@@ -862,7 +1017,7 @@ version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea"
dependencies = [
- "cipher",
+ "cipher 0.3.0",
]
[[package]]
@@ -884,6 +1039,34 @@ dependencies = [
"zeroize",
]
+[[package]]
+name = "curve25519-dalek"
+version = "4.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e89b8c6a2e4b1f45971ad09761aafb85514a84744b67a95e32c3cc1352d1f65c"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "curve25519-dalek-derive",
+ "digest 0.10.7",
+ "fiat-crypto",
+ "platforms",
+ "rustc_version 0.4.0",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "curve25519-dalek-derive"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83fdaf97f4804dcebfa5862639bc9ce4121e82140bec2a987ac5140294865b5b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
[[package]]
name = "darling"
version = "0.20.3"
@@ -902,10 +1085,10 @@ checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621"
dependencies = [
"fnv",
"ident_case",
- "proc-macro2 1.0.67",
- "quote 1.0.33",
+ "proc-macro2",
+ "quote",
"strsim 0.10.0",
- "syn 2.0.18",
+ "syn 2.0.38",
]
[[package]]
@@ -915,8 +1098,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5"
dependencies = [
"darling_core",
- "quote 1.0.33",
- "syn 2.0.18",
+ "quote",
+ "syn 2.0.38",
]
[[package]]
@@ -926,10 +1109,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
dependencies = [
"cfg-if 1.0.0",
- "hashbrown 0.14.0",
+ "hashbrown 0.14.1",
"lock_api",
"once_cell",
- "parking_lot_core 0.9.8",
+ "parking_lot_core",
]
[[package]]
@@ -961,8 +1144,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c65c2ffdafc1564565200967edc4851c7b55422d3913466688907efd05ea26f"
dependencies = [
"deno-proc-macro-rules-macros",
- "proc-macro2 1.0.67",
- "syn 2.0.18",
+ "proc-macro2",
+ "syn 2.0.38",
]
[[package]]
@@ -972,16 +1155,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3047b312b7451e3190865713a4dd6e1f821aed614ada219766ebc3024a690435"
dependencies = [
"once_cell",
- "proc-macro2 1.0.67",
- "quote 1.0.33",
- "syn 2.0.18",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
]
[[package]]
name = "deno_ast"
-version = "0.27.2"
+version = "0.29.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a39dc5554b1c835c62914b545f8b378563a997521e39a8f03450b37b216143ef"
+checksum = "8a8adb6aeb787db71d015d8e9f63f6e004eeb09c86babb4ded00878be18619b1"
dependencies = [
"anyhow",
"base64 0.13.1",
@@ -1015,25 +1198,26 @@ dependencies = [
[[package]]
name = "deno_core"
-version = "0.195.0"
+version = "0.222.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "408e433386de30dd501cf82d26ca1fb4cd84b055536f8f6f9c78c3380649d94b"
+checksum = "b13c81b9ea8462680e7b77088a44fc36390bab3dbfa5a205a285e11b64e0919c"
dependencies = [
"anyhow",
"bytes",
"deno_ops",
+ "deno_unsync",
"futures",
- "indexmap 1.9.3",
+ "indexmap 2.0.2",
"libc",
"log",
"once_cell",
- "parking_lot 0.12.1",
+ "parking_lot",
"pin-project",
"serde",
"serde_json",
"serde_v8",
"smallvec",
- "sourcemap",
+ "sourcemap 7.0.0",
"tokio",
"url",
"v8",
@@ -1052,31 +1236,38 @@ dependencies = [
[[package]]
name = "deno_ops"
-version = "0.73.0"
+version = "0.98.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c6d06feb9b26ccd2997f35610517d5a8f1dd423e21364509523f72474601f87f"
+checksum = "bf89da1a3e50ff7c89956495b53d9bcad29e1f1b3f3d2bc54cad7155f55419c4"
dependencies = [
"deno-proc-macro-rules",
"lazy-regex",
"once_cell",
"pmutil",
"proc-macro-crate",
- "proc-macro2 1.0.67",
- "quote 1.0.33",
+ "proc-macro2",
+ "quote",
"regex",
"strum",
"strum_macros",
- "syn 1.0.109",
- "syn 2.0.18",
+ "syn 2.0.38",
"thiserror",
- "v8",
+]
+
+[[package]]
+name = "deno_unsync"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8a8f3722afd50e566ecfc783cc8a3a046bc4dd5eb45007431dfb2776aeb8993"
+dependencies = [
+ "tokio",
]
[[package]]
name = "der"
-version = "0.6.1"
+version = "0.7.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de"
+checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c"
dependencies = [
"const-oid",
"pem-rfc7468",
@@ -1085,10 +1276,11 @@ dependencies = [
[[package]]
name = "deranged"
-version = "0.3.8"
+version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946"
+checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3"
dependencies = [
+ "powerfmt",
"serde",
]
@@ -1098,9 +1290,9 @@ version = "0.99.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
dependencies = [
- "convert_case",
- "proc-macro2 1.0.67",
- "quote 1.0.33",
+ "convert_case 0.4.0",
+ "proc-macro2",
+ "quote",
"rustc_version 0.4.0",
"syn 1.0.109",
]
@@ -1132,15 +1324,6 @@ dependencies = [
"subtle",
]
-[[package]]
-name = "dirs"
-version = "4.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
-dependencies = [
- "dirs-sys",
-]
-
[[package]]
name = "dirs-next"
version = "2.0.0"
@@ -1151,17 +1334,6 @@ dependencies = [
"dirs-sys-next",
]
-[[package]]
-name = "dirs-sys"
-version = "0.3.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
-dependencies = [
- "libc",
- "redox_users",
- "winapi",
-]
-
[[package]]
name = "dirs-sys-next"
version = "0.1.2"
@@ -1187,9 +1359,9 @@ checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b"
[[package]]
name = "dprint-swc-ext"
-version = "0.10.0"
+version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd4dda8a1b920e8be367aeaad035753d21bb69b3c50515afb41ab1eefbb886b5"
+checksum = "6a0a2492465344a58a37ae119de59e81fe5a2885f2711c7b5048ef0dfa14ce42"
dependencies = [
"bumpalo",
"num-bigint",
@@ -1201,6 +1373,15 @@ dependencies = [
"text_lines",
]
+[[package]]
+name = "drain"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f1a0abf3fcefad9b4dd0e414207a7408e12b68414a01e6bb19b897d5bd7632d"
+dependencies = [
+ "tokio",
+]
+
[[package]]
name = "dyn-clone"
version = "1.0.14"
@@ -1209,26 +1390,16 @@ checksum = "23d2f3407d9a573d666de4b5bdf10569d73ca9478087346697dcbae6244bfbcd"
[[package]]
name = "ecdsa"
-version = "0.14.8"
+version = "0.16.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c"
-dependencies = [
- "der",
- "elliptic-curve",
- "rfc6979",
- "signature 1.6.4",
-]
-
-[[package]]
-name = "ecdsa"
-version = "0.15.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "12844141594ad74185a926d030f3b605f6a903b4e3fec351f3ea338ac5b7637e"
+checksum = "a4b1e0c257a9e9f25f90ff76d7a68360ed497ee519c8e428d1825ef0000799d4"
dependencies = [
"der",
+ "digest 0.10.7",
"elliptic-curve",
"rfc6979",
"signature 2.0.0",
+ "spki",
]
[[package]]
@@ -1236,10 +1407,19 @@ name = "ed25519"
version = "1.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7"
+dependencies = [
+ "signature 1.6.4",
+]
+
+[[package]]
+name = "ed25519"
+version = "2.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53"
dependencies = [
"pkcs8",
"serde",
- "signature 1.6.4",
+ "signature 2.0.0",
]
[[package]]
@@ -1248,15 +1428,29 @@ version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d"
dependencies = [
- "curve25519-dalek",
- "ed25519",
+ "curve25519-dalek 3.2.0",
+ "ed25519 1.5.3",
"rand 0.7.3",
"serde",
- "serde_bytes",
"sha2 0.9.9",
"zeroize",
]
+[[package]]
+name = "ed25519-dalek"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7277392b266383ef8396db7fdeb1e77b6c52fed775f5df15bb24f35b72156980"
+dependencies = [
+ "curve25519-dalek 4.1.1",
+ "ed25519 2.2.3",
+ "rand_core 0.6.4",
+ "serde",
+ "sha2 0.10.8",
+ "signature 2.0.0",
+ "zeroize",
+]
+
[[package]]
name = "either"
version = "1.9.0"
@@ -1268,13 +1462,12 @@ dependencies = [
[[package]]
name = "elliptic-curve"
-version = "0.12.3"
+version = "0.13.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3"
+checksum = "d97ca172ae9dc9f9b779a6e3a65d308f2af74e5b8c921299075bdb4a0370e914"
dependencies = [
"base16ct",
"crypto-bigint",
- "der",
"digest 0.10.7",
"ff",
"generic-array",
@@ -1296,7 +1489,7 @@ dependencies = [
"futures",
"helpers",
"imbl",
- "nix 0.25.1",
+ "nix 0.27.1",
"procfs",
"serde",
"serde_json",
@@ -1350,22 +1543,16 @@ dependencies = [
"cfg-if 1.0.0",
]
-[[package]]
-name = "endian-type"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d"
-
[[package]]
name = "enum-as-inner"
-version = "0.5.1"
+version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116"
+checksum = "5ffccbb6966c05b32ef8fbac435df276c4ae4d3dc55a8cd0eb9745e6c12f546a"
dependencies = [
"heck",
- "proc-macro2 1.0.67",
- "quote 1.0.33",
- "syn 1.0.109",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
]
[[package]]
@@ -1383,12 +1570,12 @@ dependencies = [
[[package]]
name = "env_logger"
-version = "0.9.3"
+version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7"
+checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
dependencies = [
- "atty",
"humantime 2.1.0",
+ "is-terminal",
"log",
"regex",
"termcolor",
@@ -1402,23 +1589,23 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
[[package]]
name = "errno"
-version = "0.3.3"
+version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd"
+checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860"
dependencies = [
- "errno-dragonfly",
"libc",
"windows-sys 0.48.0",
]
[[package]]
-name = "errno-dragonfly"
-version = "0.1.2"
+name = "etcetera"
+version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943"
dependencies = [
- "cc",
- "libc",
+ "cfg-if 1.0.0",
+ "home",
+ "windows-sys 0.48.0",
]
[[package]]
@@ -1454,14 +1641,20 @@ dependencies = [
[[package]]
name = "ff"
-version = "0.12.1"
+version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160"
+checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449"
dependencies = [
"rand_core 0.6.4",
"subtle",
]
+[[package]]
+name = "fiat-crypto"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0870c84016d4b481be5c9f323c24f65e31e901ae618f0e80f4308fb00de1d2d"
+
[[package]]
name = "filetime"
version = "0.2.22"
@@ -1488,14 +1681,25 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
[[package]]
name = "flate2"
-version = "1.0.27"
+version = "1.0.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010"
+checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
dependencies = [
"crc32fast",
"miniz_oxide",
]
+[[package]]
+name = "flume"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+ "spin 0.9.8",
+]
+
[[package]]
name = "fnv"
version = "1.0.7"
@@ -1537,14 +1741,14 @@ dependencies = [
[[package]]
name = "from_variant"
-version = "0.1.5"
+version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d449976075322384507443937df2f1d5577afbf4282f12a5a66ef29fa3e6307"
+checksum = "03ec5dc38ee19078d84a692b1c41181ff9f94331c76cee66ff0208c770b5e54f"
dependencies = [
"pmutil",
- "proc-macro2 1.0.67",
+ "proc-macro2",
"swc_macros_common",
- "syn 1.0.109",
+ "syn 2.0.38",
]
[[package]]
@@ -1607,13 +1811,13 @@ dependencies = [
[[package]]
name = "futures-intrusive"
-version = "0.4.2"
+version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a604f7a68fbf8103337523b1fadc8ade7361ee3f112f7c680ad179651616aed5"
+checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f"
dependencies = [
"futures-core",
"lock_api",
- "parking_lot 0.11.2",
+ "parking_lot",
]
[[package]]
@@ -1628,9 +1832,9 @@ version = "0.3.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
dependencies = [
- "proc-macro2 1.0.67",
- "quote 1.0.33",
- "syn 2.0.18",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
]
[[package]]
@@ -1671,6 +1875,7 @@ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
dependencies = [
"typenum",
"version_check",
+ "zeroize",
]
[[package]]
@@ -1718,8 +1923,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fe69f1cbdb6e28af2bac214e943b99ce8a0a06b447d15d3e61161b0423139f3f"
dependencies = [
"proc-macro-hack",
- "proc-macro2 1.0.67",
- "quote 1.0.33",
+ "proc-macro2",
+ "quote",
"syn 1.0.109",
]
@@ -1735,7 +1940,7 @@ version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8283e7331b8c93b9756e0cfdbcfb90312852f953c6faf9bf741e684cc3b6ad69"
dependencies = [
- "bitflags 2.4.0",
+ "bitflags 2.4.1",
"crc",
"log",
"uuid",
@@ -1743,9 +1948,9 @@ dependencies = [
[[package]]
name = "group"
-version = "0.12.1"
+version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7"
+checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
dependencies = [
"ff",
"rand_core 0.6.4",
@@ -1797,9 +2002,9 @@ dependencies = [
[[package]]
name = "hashbrown"
-version = "0.14.0"
+version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
+checksum = "7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12"
dependencies = [
"ahash 0.8.3",
"allocator-api2",
@@ -1811,7 +2016,20 @@ version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7"
dependencies = [
- "hashbrown 0.14.0",
+ "hashbrown 0.14.1",
+]
+
+[[package]]
+name = "hdrhistogram"
+version = "7.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f19b9f54f7c7f55e31401bb647626ce0cf0f67b0004982ce815b3ee72a02aa8"
+dependencies = [
+ "base64 0.13.1",
+ "byteorder",
+ "flate2",
+ "nom 7.1.3",
+ "num-traits",
]
[[package]]
@@ -1978,6 +2196,18 @@ dependencies = [
"want",
]
+[[package]]
+name = "hyper-timeout"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1"
+dependencies = [
+ "hyper",
+ "pin-project-lite",
+ "tokio",
+ "tokio-io-timeout",
+]
+
[[package]]
name = "hyper-tls"
version = "0.5.0"
@@ -1993,13 +2223,13 @@ dependencies = [
[[package]]
name = "hyper-ws-listener"
-version = "0.2.0"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b3fb761e568fdb34ff794d284bfe1769efc5d16b9d716286451ab3a70ab82bea"
+checksum = "dcbfe4981e45b0a7403a55d4af12f8d30e173e722409658c3857243990e72180"
dependencies = [
"anyhow",
- "base64 0.13.1",
- "env_logger 0.9.3",
+ "base64 0.21.4",
+ "env_logger 0.10.0",
"futures",
"hyper",
"log",
@@ -2010,16 +2240,16 @@ dependencies = [
[[package]]
name = "iana-time-zone"
-version = "0.1.57"
+version = "0.1.58"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613"
+checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20"
dependencies = [
"android_system_properties",
"core-foundation-sys",
"iana-time-zone-haiku",
"js-sys",
"wasm-bindgen",
- "windows",
+ "windows-core",
]
[[package]]
@@ -2133,8 +2363,8 @@ version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b139284b5cf57ecfa712bcc66950bb635b31aff41c188e8a4cfc758eca374a3f"
dependencies = [
- "proc-macro2 1.0.67",
- "quote 1.0.33",
+ "proc-macro2",
+ "quote",
]
[[package]]
@@ -2156,12 +2386,13 @@ dependencies = [
[[package]]
name = "indexmap"
-version = "2.0.1"
+version = "2.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad227c3af19d4914570ad36d30409928b75967c298feb9ea1969db3a610bb14e"
+checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897"
dependencies = [
"equivalent",
- "hashbrown 0.14.0",
+ "hashbrown 0.14.1",
+ "serde",
]
[[package]]
@@ -2178,6 +2409,15 @@ dependencies = [
"unicode-width",
]
+[[package]]
+name = "inout"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
+dependencies = [
+ "generic-array",
+]
+
[[package]]
name = "instant"
version = "0.1.12"
@@ -2219,15 +2459,15 @@ dependencies = [
[[package]]
name = "is-macro"
-version = "0.2.2"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a7d079e129b77477a49c5c4f1cfe9ce6c2c909ef52520693e8e811a714c7b20"
+checksum = "f4467ed1321b310c2625c5aa6c1b1ffc5de4d9e42668cf697a08fb033ee8265e"
dependencies = [
"Inflector",
"pmutil",
- "proc-macro2 1.0.67",
- "quote 1.0.33",
- "syn 1.0.109",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
]
[[package]]
@@ -2237,7 +2477,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
dependencies = [
"hermit-abi 0.3.3",
- "rustix 0.38.14",
+ "rustix 0.38.19",
"windows-sys 0.48.0",
]
@@ -2324,9 +2564,9 @@ dependencies = [
[[package]]
name = "josekit"
-version = "0.8.3"
+version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33a96c4f2128a6f44ecf7c36df2b03dddf5a07b060a4d5ebc0a81e9821f7c60e"
+checksum = "5754487a088f527b1407df470db8e654e4064dccbbe1fe850e0773721e9962b7"
dependencies = [
"anyhow",
"base64 0.21.4",
@@ -2359,7 +2599,7 @@ dependencies = [
"deno_core",
"embassy_container_init",
"helpers",
- "itertools 0.10.5",
+ "itertools 0.11.0",
"lazy_static",
"models",
"pin-project",
@@ -2430,7 +2670,7 @@ dependencies = [
"string_cache",
"term",
"tiny-keccak",
- "unicode-xid 0.2.4",
+ "unicode-xid",
]
[[package]]
@@ -2444,9 +2684,9 @@ dependencies = [
[[package]]
name = "lazy-regex"
-version = "2.5.0"
+version = "3.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff63c423c68ea6814b7da9e88ce585f793c87ddd9e78f646970891769c8235d4"
+checksum = "e723bd417b2df60a0f6a2b6825f297ea04b245d4ba52b5a22cb679bdf58b05fa"
dependencies = [
"lazy-regex-proc_macros",
"once_cell",
@@ -2455,14 +2695,14 @@ dependencies = [
[[package]]
name = "lazy-regex-proc_macros"
-version = "2.4.1"
+version = "3.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8edfc11b8f56ce85e207e62ea21557cfa09bb24a8f6b04ae181b086ff8611c22"
+checksum = "0f0a1d9139f0ee2e862e08a9c5d0ba0470f2aa21cd1e1aa1b1562f83116c725f"
dependencies = [
- "proc-macro2 1.0.67",
- "quote 1.0.33",
+ "proc-macro2",
+ "quote",
"regex",
- "syn 1.0.109",
+ "syn 2.0.38",
]
[[package]]
@@ -2481,7 +2721,7 @@ version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
dependencies = [
- "spin",
+ "spin 0.5.2",
]
[[package]]
@@ -2490,84 +2730,11 @@ version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
-[[package]]
-name = "lexical"
-version = "6.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c7aefb36fd43fef7003334742cbf77b243fcd36418a1d1bdd480d613a67968f6"
-dependencies = [
- "lexical-core",
-]
-
-[[package]]
-name = "lexical-core"
-version = "0.8.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2cde5de06e8d4c2faabc400238f9ae1c74d5412d03a7bd067645ccbc47070e46"
-dependencies = [
- "lexical-parse-float",
- "lexical-parse-integer",
- "lexical-util",
- "lexical-write-float",
- "lexical-write-integer",
-]
-
-[[package]]
-name = "lexical-parse-float"
-version = "0.8.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f"
-dependencies = [
- "lexical-parse-integer",
- "lexical-util",
- "static_assertions",
-]
-
-[[package]]
-name = "lexical-parse-integer"
-version = "0.8.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d0994485ed0c312f6d965766754ea177d07f9c00c9b82a5ee62ed5b47945ee9"
-dependencies = [
- "lexical-util",
- "static_assertions",
-]
-
-[[package]]
-name = "lexical-util"
-version = "0.8.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5255b9ff16ff898710eb9eb63cb39248ea8a5bb036bea8085b1a767ff6c4e3fc"
-dependencies = [
- "static_assertions",
-]
-
-[[package]]
-name = "lexical-write-float"
-version = "0.8.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "accabaa1c4581f05a3923d1b4cfd124c329352288b7b9da09e766b0668116862"
-dependencies = [
- "lexical-util",
- "lexical-write-integer",
- "static_assertions",
-]
-
-[[package]]
-name = "lexical-write-integer"
-version = "0.8.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e1b6f3d1f4422866b68192d62f77bc5c700bee84f3069f2469d7bc8c77852446"
-dependencies = [
- "lexical-util",
- "static_assertions",
-]
-
[[package]]
name = "libc"
-version = "0.2.148"
+version = "0.2.149"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9cdc71e17332e86d2e1d38c1f99edcb6288ee11b815fb1a4b049eaa2114d369b"
+checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b"
[[package]]
name = "libloading"
@@ -2581,9 +2748,20 @@ dependencies = [
[[package]]
name = "libm"
-version = "0.2.7"
+version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4"
+checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058"
+
+[[package]]
+name = "libsqlite3-sys"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "afc22eff61b133b115c6e8c74e818c628d6d5e7a502afea6f64dee076dd94326"
+dependencies = [
+ "cc",
+ "pkg-config",
+ "vcpkg",
+]
[[package]]
name = "linux-raw-sys"
@@ -2593,15 +2771,15 @@ checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
[[package]]
name = "linux-raw-sys"
-version = "0.4.7"
+version = "0.4.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a9bad9f94746442c783ca431b22403b519cd7fbeed0533fdd6328b2f2212128"
+checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f"
[[package]]
name = "lock_api"
-version = "0.4.10"
+version = "0.4.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
+checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
dependencies = [
"autocfg",
"scopeguard",
@@ -2628,6 +2806,12 @@ version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
+[[package]]
+name = "matchit"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94"
+
[[package]]
name = "mbrman"
version = "0.5.2"
@@ -2641,17 +2825,6 @@ dependencies = [
"thiserror",
]
-[[package]]
-name = "md-5"
-version = "0.9.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b5a279bb9607f9f53c22d496eade00d138d1bdcccd07d74650387cf94942a15"
-dependencies = [
- "block-buffer 0.9.0",
- "digest 0.9.0",
- "opaque-debug",
-]
-
[[package]]
name = "md-5"
version = "0.10.6"
@@ -2664,9 +2837,9 @@ dependencies = [
[[package]]
name = "memchr"
-version = "2.6.3"
+version = "2.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c"
+checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
[[package]]
name = "memoffset"
@@ -2724,7 +2897,7 @@ version = "0.1.0"
dependencies = [
"base64 0.21.4",
"color-eyre",
- "ed25519-dalek",
+ "ed25519-dalek 2.0.0",
"emver",
"ipnet",
"lazy_static",
@@ -2780,15 +2953,6 @@ dependencies = [
"unicase",
]
-[[package]]
-name = "nibble_vec"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43"
-dependencies = [
- "smallvec",
-]
-
[[package]]
name = "nix"
version = "0.24.3"
@@ -2801,20 +2965,6 @@ dependencies = [
"memoffset 0.6.5",
]
-[[package]]
-name = "nix"
-version = "0.25.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4"
-dependencies = [
- "autocfg",
- "bitflags 1.3.2",
- "cfg-if 1.0.0",
- "libc",
- "memoffset 0.6.5",
- "pin-utils",
-]
-
[[package]]
name = "nix"
version = "0.26.4"
@@ -2828,6 +2978,17 @@ dependencies = [
"pin-utils",
]
+[[package]]
+name = "nix"
+version = "0.27.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053"
+dependencies = [
+ "bitflags 2.4.1",
+ "cfg-if 1.0.0",
+ "libc",
+]
+
[[package]]
name = "nom"
version = "5.1.3"
@@ -2946,9 +3107,9 @@ dependencies = [
[[package]]
name = "num-traits"
-version = "0.2.16"
+version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
+checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
dependencies = [
"autocfg",
"libm",
@@ -2966,23 +3127,23 @@ dependencies = [
[[package]]
name = "num_enum"
-version = "0.5.11"
+version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9"
+checksum = "70bf6736f74634d299d00086f02986875b3c2d924781a6a2cb6c201e73da0ceb"
dependencies = [
"num_enum_derive",
]
[[package]]
name = "num_enum_derive"
-version = "0.5.11"
+version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799"
+checksum = "56ea360eafe1022f7cc56cd7b869ed57330fb2453d0c7831d99b74c65d2f5597"
dependencies = [
"proc-macro-crate",
- "proc-macro2 1.0.67",
- "quote 1.0.33",
- "syn 1.0.109",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
]
[[package]]
@@ -3014,14 +3175,14 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
[[package]]
name = "openssh-keys"
-version = "0.5.0"
+version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7249a699cdeea261ac73f1bf9350777cb867324f44373aafb5a287365bf1771"
+checksum = "c75a0ec2d1b302412fb503224289325fcc0e44600176864804c7211b055cfd58"
dependencies = [
- "base64 0.13.1",
+ "base64 0.21.4",
"byteorder",
- "md-5 0.9.1",
- "sha2 0.9.9",
+ "md-5",
+ "sha2 0.10.8",
"thiserror",
]
@@ -3031,7 +3192,7 @@ version = "0.10.57"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bac25ee399abb46215765b1cb35bc0212377e58a061560d8b29b024fd0430e7c"
dependencies = [
- "bitflags 2.4.0",
+ "bitflags 2.4.1",
"cfg-if 1.0.0",
"foreign-types",
"libc",
@@ -3046,9 +3207,9 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
dependencies = [
- "proc-macro2 1.0.67",
- "quote 1.0.33",
- "syn 2.0.18",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
]
[[package]]
@@ -3081,9 +3242,9 @@ dependencies = [
[[package]]
name = "os_str_bytes"
-version = "6.5.1"
+version = "6.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4d5d9eb14b174ee9aa2ef96dc2b94637a2d4b6e7cb873c7e171f0c20c6cf3eac"
+checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1"
[[package]]
name = "overload"
@@ -3099,22 +3260,11 @@ checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f"
[[package]]
name = "p256"
-version = "0.11.1"
+version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594"
+checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b"
dependencies = [
- "ecdsa 0.14.8",
- "elliptic-curve",
- "sha2 0.10.8",
-]
-
-[[package]]
-name = "p256"
-version = "0.12.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49c124b3cbce43bcbac68c58ec181d98ed6cc7e6d0aa7c3ba97b2563410b0e55"
-dependencies = [
- "ecdsa 0.15.1",
+ "ecdsa",
"elliptic-curve",
"primeorder",
"sha2 0.10.8",
@@ -3122,26 +3272,16 @@ dependencies = [
[[package]]
name = "p384"
-version = "0.11.2"
+version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dfc8c5bf642dde52bb9e87c0ecd8ca5a76faac2eeed98dedb7c717997e1080aa"
+checksum = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209"
dependencies = [
- "ecdsa 0.14.8",
+ "ecdsa",
"elliptic-curve",
+ "primeorder",
"sha2 0.10.8",
]
-[[package]]
-name = "parking_lot"
-version = "0.11.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
-dependencies = [
- "instant",
- "lock_api",
- "parking_lot_core 0.8.6",
-]
-
[[package]]
name = "parking_lot"
version = "0.12.1"
@@ -3149,47 +3289,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
dependencies = [
"lock_api",
- "parking_lot_core 0.9.8",
+ "parking_lot_core",
]
[[package]]
name = "parking_lot_core"
-version = "0.8.6"
+version = "0.9.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc"
-dependencies = [
- "cfg-if 1.0.0",
- "instant",
- "libc",
- "redox_syscall 0.2.16",
- "smallvec",
- "winapi",
-]
-
-[[package]]
-name = "parking_lot_core"
-version = "0.9.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
+checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
dependencies = [
"cfg-if 1.0.0",
"libc",
- "redox_syscall 0.3.5",
+ "redox_syscall 0.4.1",
"smallvec",
"windows-targets 0.48.5",
]
-[[package]]
-name = "password-hash"
-version = "0.4.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700"
-dependencies = [
- "base64ct",
- "rand_core 0.6.4",
- "subtle",
-]
-
[[package]]
name = "paste"
version = "1.0.14"
@@ -3223,7 +3338,7 @@ name = "patch-db-macro"
version = "0.1.0"
dependencies = [
"patch-db-macro-internals",
- "proc-macro2 1.0.67",
+ "proc-macro2",
"syn 1.0.109",
]
@@ -3232,8 +3347,8 @@ name = "patch-db-macro-internals"
version = "0.1.0"
dependencies = [
"heck",
- "proc-macro2 1.0.67",
- "quote 1.0.33",
+ "proc-macro2",
+ "quote",
"syn 1.0.109",
]
@@ -3245,14 +3360,12 @@ checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
[[package]]
name = "pbkdf2"
-version = "0.11.0"
+version = "0.12.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917"
+checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2"
dependencies = [
"digest 0.10.7",
"hmac 0.12.1",
- "password-hash",
- "sha2 0.10.8",
]
[[package]]
@@ -3263,9 +3376,9 @@ checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
[[package]]
name = "pem-rfc7468"
-version = "0.6.0"
+version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "24d159833a9105500e0398934e205e0773f0b27529557134ecfc51c27646adac"
+checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412"
dependencies = [
"base64ct",
]
@@ -3283,7 +3396,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9"
dependencies = [
"fixedbitset",
- "indexmap 2.0.1",
+ "indexmap 2.0.2",
]
[[package]]
@@ -3316,8 +3429,8 @@ dependencies = [
"phf_generator",
"phf_shared",
"proc-macro-hack",
- "proc-macro2 1.0.67",
- "quote 1.0.33",
+ "proc-macro2",
+ "quote",
"syn 1.0.109",
]
@@ -3345,9 +3458,9 @@ version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
dependencies = [
- "proc-macro2 1.0.67",
- "quote 1.0.33",
- "syn 2.0.18",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
]
[[package]]
@@ -3364,21 +3477,20 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
name = "pkcs1"
-version = "0.4.1"
+version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eff33bdbdfc54cc98a2eca766ebdec3e1b8fb7387523d5c9c9a2891da856f719"
+checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f"
dependencies = [
"der",
"pkcs8",
"spki",
- "zeroize",
]
[[package]]
name = "pkcs8"
-version = "0.9.0"
+version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba"
+checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
dependencies = [
"der",
"spki",
@@ -3391,14 +3503,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
[[package]]
-name = "pmutil"
-version = "0.5.3"
+name = "platforms"
+version = "3.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3894e5d549cccbe44afecf72922f277f603cd4bb0219c8342631ef18fffbe004"
+checksum = "4503fa043bf02cee09a9582e9554b4c6403b2ef55e4612e96561d294419429f8"
+
+[[package]]
+name = "pmutil"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52a40bc70c2c58040d2d8b167ba9a5ff59fc9dab7ad44771cfde3dcfde7a09c6"
dependencies = [
- "proc-macro2 1.0.67",
- "quote 1.0.33",
- "syn 1.0.109",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
]
[[package]]
@@ -3407,6 +3525,12 @@ version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "31114a898e107c51bb1609ffaf55a0e011cf6a4d7f1170d0015a165082c0338b"
+[[package]]
+name = "powerfmt"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+
[[package]]
name = "ppv-lite86"
version = "0.2.17"
@@ -3435,9 +3559,9 @@ dependencies = [
[[package]]
name = "primeorder"
-version = "0.12.1"
+version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b54f7131b3dba65a2f414cf5bd25b66d4682e4608610668eae785750ba4c5b2"
+checksum = "3c2fcef82c0ec6eefcc179b978446c399b3cdf73c392c35604e399eee6df1ee3"
dependencies = [
"elliptic-curve",
]
@@ -3449,7 +3573,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
dependencies = [
"once_cell",
- "toml_edit",
+ "toml_edit 0.19.15",
]
[[package]]
@@ -3460,27 +3584,18 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
[[package]]
name = "proc-macro2"
-version = "0.4.30"
+version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
-dependencies = [
- "unicode-xid 0.1.0",
-]
-
-[[package]]
-name = "proc-macro2"
-version = "1.0.67"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328"
+checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
dependencies = [
"unicode-ident",
]
[[package]]
name = "procfs"
-version = "0.14.2"
+version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b1de8dacb0873f77e6aefc6d71e044761fcc68060290f5b1089fcdf84626bb69"
+checksum = "943ca7f9f29bab5844ecd8fdb3992c5969b6622bb9609b9502fef9b4310e3f1f"
dependencies = [
"bitflags 1.3.2",
"byteorder",
@@ -3488,24 +3603,24 @@ dependencies = [
"flate2",
"hex",
"lazy_static",
- "rustix 0.36.15",
+ "rustix 0.36.16",
]
[[package]]
name = "proptest"
-version = "1.2.0"
+version = "1.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4e35c06b98bf36aba164cc17cb25f7e232f5c4aeea73baa14b8a9f0d92dbfa65"
+checksum = "7c003ac8c77cb07bb74f5f198bce836a689bcd5a42574612bf14d17bfd08c20e"
dependencies = [
"bit-set",
- "bitflags 1.3.2",
- "byteorder",
+ "bit-vec",
+ "bitflags 2.4.1",
"lazy_static",
"num-traits",
"rand 0.8.5",
"rand_chacha 0.3.1",
"rand_xorshift",
- "regex-syntax 0.6.29",
+ "regex-syntax 0.7.5",
"rusty-fork",
"tempfile",
"unarray",
@@ -3513,13 +3628,45 @@ dependencies = [
[[package]]
name = "proptest-derive"
-version = "0.3.0"
+version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "90b46295382dc76166cb7cf2bb4a97952464e4b7ed5a43e6cd34e1fec3349ddc"
+checksum = "9cf16337405ca084e9c78985114633b6827711d22b9e6ef6c6c0d665eb3f0b6e"
dependencies = [
- "proc-macro2 0.4.30",
- "quote 0.6.13",
- "syn 0.15.44",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "prost"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4fdd22f3b9c31b53c060df4a0613a1c7f062d4115a2b984dd15b1858f7e340d"
+dependencies = [
+ "bytes",
+ "prost-derive",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "265baba7fabd416cf5078179f7d2cbeca4ce7a9041111900675ea7c4cb8a4c32"
+dependencies = [
+ "anyhow",
+ "itertools 0.11.0",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "prost-types"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e081b29f63d83a4bc75cfc9f3fe424f9156cf92d8a4f0c9407cce9a1b67327cf"
+dependencies = [
+ "prost",
]
[[package]]
@@ -3553,22 +3700,13 @@ version = "1.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
-[[package]]
-name = "quote"
-version = "0.6.13"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
-dependencies = [
- "proc-macro2 0.4.30",
-]
-
[[package]]
name = "quote"
version = "1.0.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
dependencies = [
- "proc-macro2 1.0.67",
+ "proc-macro2",
]
[[package]]
@@ -3577,16 +3715,6 @@ version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
-[[package]]
-name = "radix_trie"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd"
-dependencies = [
- "endian-type",
- "nibble_vec",
-]
-
[[package]]
name = "rand"
version = "0.7.3"
@@ -3700,6 +3828,15 @@ dependencies = [
"bitflags 1.3.2",
]
+[[package]]
+name = "redox_syscall"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
[[package]]
name = "redox_users"
version = "0.4.3"
@@ -3713,14 +3850,14 @@ dependencies = [
[[package]]
name = "regex"
-version = "1.9.5"
+version = "1.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47"
+checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
dependencies = [
"aho-corasick",
"memchr",
- "regex-automata 0.3.8",
- "regex-syntax 0.7.5",
+ "regex-automata 0.4.3",
+ "regex-syntax 0.8.2",
]
[[package]]
@@ -3734,13 +3871,13 @@ dependencies = [
[[package]]
name = "regex-automata"
-version = "0.3.8"
+version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795"
+checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
dependencies = [
"aho-corasick",
"memchr",
- "regex-syntax 0.7.5",
+ "regex-syntax 0.8.2",
]
[[package]]
@@ -3756,14 +3893,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
[[package]]
-name = "reqwest"
-version = "0.11.20"
+name = "regex-syntax"
+version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "reqwest"
+version = "0.11.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b"
dependencies = [
"base64 0.21.4",
"bytes",
- "cookie",
+ "cookie 0.16.2",
"cookie_store 0.16.2",
"encoding_rs",
"futures-core",
@@ -3784,6 +3927,7 @@ dependencies = [
"serde",
"serde_json",
"serde_urlencoded",
+ "system-configuration",
"tokio",
"tokio-native-tls",
"tokio-socks",
@@ -3799,26 +3943,24 @@ dependencies = [
[[package]]
name = "reqwest_cookie_store"
-version = "0.5.0"
+version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "06b407c05de7a0f7e4cc2a56af5e9bd6468e509124e81078ce1f8bc2ed3536bf"
+checksum = "ba529055ea150e42e4eb9c11dcd380a41025ad4d594b0cb4904ef28b037e1061"
dependencies = [
"bytes",
- "cookie",
- "cookie_store 0.19.1",
+ "cookie_store 0.20.0",
"reqwest",
"url",
]
[[package]]
name = "rfc6979"
-version = "0.3.1"
+version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb"
+checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2"
dependencies = [
- "crypto-bigint",
"hmac 0.12.1",
- "zeroize",
+ "subtle",
]
[[package]]
@@ -3830,7 +3972,7 @@ dependencies = [
"cc",
"libc",
"once_cell",
- "spin",
+ "spin 0.5.2",
"untrusted",
"web-sys",
"winapi",
@@ -3875,7 +4017,7 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8e4b9cb00baf2d61bcd35e98d67dcb760382a3b4540df7e63b38d053c8a7b8b"
dependencies = [
- "proc-macro2 1.0.67",
+ "proc-macro2",
"rpc-toolkit-macro-internals",
"syn 1.0.109",
]
@@ -3886,18 +4028,19 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d3e2ce21b936feaecdab9c9a8e75b9dca64374ccc11951a58045ad6559b75f42"
dependencies = [
- "proc-macro2 1.0.67",
- "quote 1.0.33",
+ "proc-macro2",
+ "quote",
"syn 1.0.109",
]
[[package]]
name = "rsa"
-version = "0.7.2"
+version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "094052d5470cbcef561cb848a7209968c9f12dfa6d668f4bca048ac5de51099c"
+checksum = "6ab43bb47d23c1a631b4b680199a45255dce26fa9ab2fa902581f624ff13e6a8"
dependencies = [
"byteorder",
+ "const-oid",
"digest 0.10.7",
"num-bigint-dig",
"num-integer",
@@ -3906,8 +4049,9 @@ dependencies = [
"pkcs1",
"pkcs8",
"rand_core 0.6.4",
- "signature 1.6.4",
- "smallvec",
+ "sha2 0.10.8",
+ "signature 2.0.0",
+ "spki",
"subtle",
"zeroize",
]
@@ -3924,14 +4068,13 @@ dependencies = [
[[package]]
name = "rust-argon2"
-version = "1.0.1"
+version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a5885493fdf0be6cdff808d1533ce878d21cfa49c7086fa00c66355cd9141bfc"
+checksum = "1e71971821b3ae0e769e4a4328dbcb517607b434db7697e9aba17203ec14e46a"
dependencies = [
"base64 0.21.4",
"blake2b_simd",
"constant_time_eq",
- "crossbeam-utils",
]
[[package]]
@@ -3961,14 +4104,14 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
dependencies = [
- "semver 1.0.19",
+ "semver 1.0.20",
]
[[package]]
name = "rustix"
-version = "0.36.15"
+version = "0.36.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c37f1bd5ef1b5422177b7646cba67430579cfe2ace80f284fee876bca52ad941"
+checksum = "6da3636faa25820d8648e0e31c5d519bbb01f72fdf57131f0f5f7da5fed36eab"
dependencies = [
"bitflags 1.3.2",
"errno",
@@ -3980,27 +4123,27 @@ dependencies = [
[[package]]
name = "rustix"
-version = "0.38.14"
+version = "0.38.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "747c788e9ce8e92b12cd485c49ddf90723550b654b32508f979b71a7b1ecda4f"
+checksum = "745ecfa778e66b2b63c88a61cb36e0eea109e803b0b86bf9879fbc77c70e86ed"
dependencies = [
- "bitflags 2.4.0",
+ "bitflags 2.4.1",
"errno",
"libc",
- "linux-raw-sys 0.4.7",
+ "linux-raw-sys 0.4.10",
"windows-sys 0.48.0",
]
[[package]]
name = "rustls"
-version = "0.20.9"
+version = "0.21.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99"
+checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8"
dependencies = [
"log",
"ring",
+ "rustls-webpki",
"sct",
- "webpki",
]
[[package]]
@@ -4012,6 +4155,16 @@ dependencies = [
"base64 0.21.4",
]
+[[package]]
+name = "rustls-webpki"
+version = "0.101.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c7d5dece342910d9ba34d259310cae3e0154b873b35408b787b59bce53d34fe"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
[[package]]
name = "rustversion"
version = "1.0.14"
@@ -4069,9 +4222,9 @@ dependencies = [
[[package]]
name = "sec1"
-version = "0.3.0"
+version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928"
+checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc"
dependencies = [
"base16ct",
"der",
@@ -4115,9 +4268,9 @@ dependencies = [
[[package]]
name = "semver"
-version = "1.0.19"
+version = "1.0.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad977052201c6de01a8ef2aa3378c4bd23217a056337d1d6da40468d267a4fb0"
+checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090"
[[package]]
name = "semver-parser"
@@ -4127,9 +4280,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
[[package]]
name = "serde"
-version = "1.0.164"
+version = "1.0.189"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d"
+checksum = "8e422a44e74ad4001bdc8eede9a4570ab52f71190e9c076d14369f38b9200537"
dependencies = [
"serde_derive",
]
@@ -4145,9 +4298,9 @@ dependencies = [
[[package]]
name = "serde_bytes"
-version = "0.11.10"
+version = "0.11.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f3c5113243e4a3a1c96587342d067f3e6b0f50790b6cf40d2868eb647a3eef0e"
+checksum = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff"
dependencies = [
"serde",
]
@@ -4172,27 +4325,36 @@ dependencies = [
[[package]]
name = "serde_derive"
-version = "1.0.164"
+version = "1.0.189"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68"
+checksum = "1e48d1f918009ce3145511378cf68d613e3b3d9137d67272562080d68a2b32d5"
dependencies = [
- "proc-macro2 1.0.67",
- "quote 1.0.33",
- "syn 2.0.18",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
]
[[package]]
name = "serde_json"
-version = "1.0.99"
+version = "1.0.107"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "46266871c240a00b8f503b877622fe33430b3c7d963bdc0f2adc511e54a1eae3"
+checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65"
dependencies = [
- "indexmap 2.0.1",
+ "indexmap 2.0.2",
"itoa",
"ryu",
"serde",
]
+[[package]]
+name = "serde_spanned"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186"
+dependencies = [
+ "serde",
+]
+
[[package]]
name = "serde_urlencoded"
version = "0.7.1"
@@ -4207,9 +4369,9 @@ dependencies = [
[[package]]
name = "serde_v8"
-version = "0.106.0"
+version = "0.131.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1506733ba5b864018c44320fa3bb11dbb4bf01b62dd09eda007be73034371c51"
+checksum = "38cafa16d0a4288d75925351bb54d06d2e830118ad3fad393947bb11f91b18f3"
dependencies = [
"bytes",
"derive_more",
@@ -4223,14 +4385,15 @@ dependencies = [
[[package]]
name = "serde_with"
-version = "2.3.3"
+version = "3.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe"
+checksum = "64cd236ccc1b7a29e7e2739f27c0b2dd199804abc4290e32f59f3b68d6405c23"
dependencies = [
- "base64 0.13.1",
+ "base64 0.21.4",
"chrono",
"hex",
"indexmap 1.9.3",
+ "indexmap 2.0.2",
"serde",
"serde_json",
"serde_with_macros",
@@ -4239,14 +4402,14 @@ dependencies = [
[[package]]
name = "serde_with_macros"
-version = "2.3.3"
+version = "3.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f"
+checksum = "93634eb5f75a2323b16de4748022ac4297f9e76b6dced2be287a099f41b5e788"
dependencies = [
"darling",
- "proc-macro2 1.0.67",
- "quote 1.0.33",
- "syn 2.0.18",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
]
[[package]]
@@ -4255,7 +4418,7 @@ version = "0.9.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a49e178e4452f45cb61d0cd8cebc1b0fafd3e41929e996cef79aa3aca91f574"
dependencies = [
- "indexmap 2.0.1",
+ "indexmap 2.0.2",
"itoa",
"ryu",
"serde",
@@ -4322,9 +4485,9 @@ dependencies = [
[[package]]
name = "sharded-slab"
-version = "0.1.6"
+version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1b21f559e07218024e7e9f90f96f601825397de0e25420135f7f952453fed0b"
+checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
dependencies = [
"lazy_static",
]
@@ -4349,10 +4512,6 @@ name = "signature"
version = "1.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c"
-dependencies = [
- "digest 0.10.7",
- "rand_core 0.6.4",
-]
[[package]]
name = "signature"
@@ -4443,6 +4602,22 @@ dependencies = [
"url",
]
+[[package]]
+name = "sourcemap"
+version = "7.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbecc42a2b6131acc3bf9a25c9fe4161dba438eb52131bba83c5d781b5b70be3"
+dependencies = [
+ "data-encoding",
+ "debugid",
+ "if_chain",
+ "rustc_version 0.2.3",
+ "serde",
+ "serde_json",
+ "unicode-id",
+ "url",
+]
+
[[package]]
name = "spin"
version = "0.5.2"
@@ -4450,10 +4625,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
[[package]]
-name = "spki"
-version = "0.6.0"
+name = "spin"
+version = "0.9.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+dependencies = [
+ "lock_api",
+]
+
+[[package]]
+name = "spki"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a"
dependencies = [
"base64ct",
"der",
@@ -4472,106 +4656,248 @@ dependencies = [
[[package]]
name = "sqlx"
-version = "0.6.3"
+version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8de3b03a925878ed54a954f621e64bf55a3c1bd29652d0d1a17830405350188"
+checksum = "0e50c216e3624ec8e7ecd14c6a6a6370aad6ee5d8cfc3ab30b5162eeeef2ed33"
dependencies = [
"sqlx-core",
"sqlx-macros",
+ "sqlx-mysql",
+ "sqlx-postgres",
+ "sqlx-sqlite",
]
[[package]]
name = "sqlx-core"
-version = "0.6.3"
+version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa8241483a83a3f33aa5fff7e7d9def398ff9990b2752b6c6112b83c6d246029"
+checksum = "8d6753e460c998bbd4cd8c6f0ed9a64346fcca0723d6e75e52fdc351c5d2169d"
dependencies = [
- "ahash 0.7.6",
+ "ahash 0.8.3",
"atoi",
- "base64 0.13.1",
- "bitflags 1.3.2",
"byteorder",
"bytes",
"chrono",
"crc",
"crossbeam-queue",
- "dirs",
"dotenvy",
"either",
"event-listener",
"futures-channel",
"futures-core",
"futures-intrusive",
+ "futures-io",
"futures-util",
"hashlink",
"hex",
- "hkdf",
- "hmac 0.12.1",
- "indexmap 1.9.3",
- "itoa",
- "libc",
+ "indexmap 2.0.2",
"log",
- "md-5 0.10.6",
"memchr",
"once_cell",
"paste",
"percent-encoding",
- "rand 0.8.5",
"rustls",
"rustls-pemfile",
"serde",
"serde_json",
- "sha1",
"sha2 0.10.8",
"smallvec",
"sqlformat",
- "sqlx-rt",
- "stringprep",
"thiserror",
+ "tokio",
"tokio-stream",
+ "tracing",
"url",
"webpki-roots",
- "whoami",
]
[[package]]
name = "sqlx-macros"
-version = "0.6.3"
+version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9966e64ae989e7e575b19d7265cb79d7fc3cbbdf179835cb0d716f294c2049c9"
+checksum = "9a793bb3ba331ec8359c1853bd39eed32cdd7baaf22c35ccf5c92a7e8d1189ec"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "sqlx-core",
+ "sqlx-macros-core",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "sqlx-macros-core"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a4ee1e104e00dedb6aa5ffdd1343107b0a4702e862a84320ee7cc74782d96fc"
dependencies = [
"dotenvy",
"either",
"heck",
"hex",
"once_cell",
- "proc-macro2 1.0.67",
- "quote 1.0.33",
+ "proc-macro2",
+ "quote",
"serde",
"serde_json",
"sha2 0.10.8",
"sqlx-core",
- "sqlx-rt",
+ "sqlx-mysql",
+ "sqlx-postgres",
+ "sqlx-sqlite",
"syn 1.0.109",
+ "tempfile",
+ "tokio",
"url",
]
[[package]]
-name = "sqlx-rt"
-version = "0.6.3"
+name = "sqlx-mysql"
+version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "804d3f245f894e61b1e6263c84b23ca675d96753b5abfd5cc8597d86806e8024"
+checksum = "864b869fdf56263f4c95c45483191ea0af340f9f3e3e7b4d57a61c7c87a970db"
dependencies = [
+ "atoi",
+ "base64 0.21.4",
+ "bitflags 2.4.1",
+ "byteorder",
+ "bytes",
+ "chrono",
+ "crc",
+ "digest 0.10.7",
+ "dotenvy",
+ "either",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-util",
+ "generic-array",
+ "hex",
+ "hkdf",
+ "hmac 0.12.1",
+ "itoa",
+ "log",
+ "md-5",
+ "memchr",
"once_cell",
- "tokio",
- "tokio-rustls",
+ "percent-encoding",
+ "rand 0.8.5",
+ "rsa",
+ "serde",
+ "sha1",
+ "sha2 0.10.8",
+ "smallvec",
+ "sqlx-core",
+ "stringprep",
+ "thiserror",
+ "tracing",
+ "whoami",
+]
+
+[[package]]
+name = "sqlx-postgres"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb7ae0e6a97fb3ba33b23ac2671a5ce6e3cabe003f451abd5a56e7951d975624"
+dependencies = [
+ "atoi",
+ "base64 0.21.4",
+ "bitflags 2.4.1",
+ "byteorder",
+ "chrono",
+ "crc",
+ "dotenvy",
+ "etcetera",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-util",
+ "hex",
+ "hkdf",
+ "hmac 0.12.1",
+ "home",
+ "itoa",
+ "log",
+ "md-5",
+ "memchr",
+ "once_cell",
+ "rand 0.8.5",
+ "serde",
+ "serde_json",
+ "sha1",
+ "sha2 0.10.8",
+ "smallvec",
+ "sqlx-core",
+ "stringprep",
+ "thiserror",
+ "tracing",
+ "whoami",
+]
+
+[[package]]
+name = "sqlx-sqlite"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d59dc83cf45d89c555a577694534fcd1b55c545a816c816ce51f20bbe56a4f3f"
+dependencies = [
+ "atoi",
+ "chrono",
+ "flume",
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-intrusive",
+ "futures-util",
+ "libsqlite3-sys",
+ "log",
+ "percent-encoding",
+ "serde",
+ "sqlx-core",
+ "tracing",
+ "url",
+]
+
+[[package]]
+name = "sscanf"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c713ebd15ce561dd4a13ed62bc2a0368e16806fc30dcaf66ecf1256b2a3fdde6"
+dependencies = [
+ "const_format",
+ "lazy_static",
+ "regex",
+ "sscanf_macro",
+]
+
+[[package]]
+name = "sscanf_macro"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84955aa74a157e5834d58a07be11af7f0ab923f0194a0bb2ea6b3db8b5d1611d"
+dependencies = [
+ "convert_case 0.6.0",
+ "proc-macro2",
+ "quote",
+ "regex-syntax 0.6.29",
+ "strsim 0.10.0",
+ "syn 2.0.38",
+ "unicode-width",
+]
+
+[[package]]
+name = "ssh-cipher"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "caac132742f0d33c3af65bfcde7f6aa8f62f0e991d80db99149eb9d44708784f"
+dependencies = [
+ "cipher 0.4.4",
+ "ssh-encoding",
]
[[package]]
name = "ssh-encoding"
-version = "0.1.0"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "19cfdc32e0199062113edf41f344fbf784b8205a94600233c84eb838f45191e1"
+checksum = "eb9242b9ef4108a78e8cd1a2c98e193ef372437f8c22be363075233321dd4a15"
dependencies = [
"base64ct",
"pem-rfc7468",
@@ -4580,19 +4906,21 @@ dependencies = [
[[package]]
name = "ssh-key"
-version = "0.5.1"
+version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "288d8f5562af5a3be4bda308dd374b2c807b940ac370b5efa1c99311da91d9a1"
+checksum = "2180b3bc4955efd5661a97658d3cf4c8107e0d132f619195afe9486c13cca313"
dependencies = [
- "ed25519-dalek",
- "p256 0.11.1",
+ "ed25519-dalek 2.0.0",
+ "p256",
"p384",
"rand_core 0.6.4",
"rsa",
"sec1",
"sha2 0.10.8",
- "signature 1.6.4",
+ "signature 2.0.0",
+ "ssh-cipher",
"ssh-encoding",
+ "subtle",
"zeroize",
]
@@ -4617,7 +4945,7 @@ dependencies = [
[[package]]
name = "start-os"
-version = "0.3.4-rev.4"
+version = "0.3.5"
dependencies = [
"aes",
"async-compression",
@@ -4625,7 +4953,7 @@ dependencies = [
"async-trait",
"avahi-sys",
"base32",
- "base64 0.13.1",
+ "base64 0.21.4",
"base64ct",
"basic-cookies",
"bimap",
@@ -4635,14 +4963,14 @@ dependencies = [
"clap 3.2.25",
"color-eyre",
"console",
- "cookie",
- "cookie_store 0.19.1",
+ "console-subscriber",
+ "cookie 0.18.0",
+ "cookie_store 0.20.0",
"current_platform",
"digest 0.10.7",
- "digest 0.9.0",
"divrem",
- "ed25519",
- "ed25519-dalek",
+ "ed25519 2.2.3",
+ "ed25519-dalek 2.0.0",
"embassy_container_init",
"emver",
"fd-lock-rs",
@@ -4659,12 +4987,12 @@ dependencies = [
"imbl",
"imbl-value",
"include_dir",
- "indexmap 1.9.3",
+ "indexmap 2.0.2",
"indicatif",
"ipnet",
"iprange",
"isocountry",
- "itertools 0.10.5",
+ "itertools 0.11.0",
"jaq-core",
"jaq-std",
"josekit",
@@ -4676,13 +5004,13 @@ dependencies = [
"mbrman",
"models",
"new_mime_guess",
- "nix 0.25.1",
+ "nix 0.27.1",
"nom 7.1.3",
"num",
"num_enum",
"openssh-keys",
"openssl",
- "p256 0.12.0",
+ "p256",
"patch-db",
"pbkdf2",
"pin-project",
@@ -4690,7 +5018,6 @@ dependencies = [
"prettytable-rs",
"proptest",
"proptest-derive",
- "rand 0.7.3",
"rand 0.8.5",
"regex",
"reqwest",
@@ -4704,9 +5031,9 @@ dependencies = [
"serde_with",
"serde_yaml",
"sha2 0.10.8",
- "sha2 0.9.9",
"simple-logging",
"sqlx",
+ "sscanf",
"ssh-key",
"stderrlog",
"tar",
@@ -4718,11 +5045,12 @@ dependencies = [
"tokio-tar",
"tokio-tungstenite",
"tokio-util",
- "toml",
+ "toml 0.8.2",
"torut",
"tracing",
"tracing-error",
"tracing-futures",
+ "tracing-journald",
"tracing-subscriber",
"trust-dns-server",
"typed-builder",
@@ -4759,7 +5087,7 @@ checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b"
dependencies = [
"new_debug_unreachable",
"once_cell",
- "parking_lot 0.12.1",
+ "parking_lot",
"phf_shared",
"precomputed-hash",
"serde",
@@ -4773,21 +5101,21 @@ checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988"
dependencies = [
"phf_generator",
"phf_shared",
- "proc-macro2 1.0.67",
- "quote 1.0.33",
+ "proc-macro2",
+ "quote",
]
[[package]]
name = "string_enum"
-version = "0.4.0"
+version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0090512bdfee4b56d82480d66c0fd8a6f53f0fe0f97e075e949b252acdd482e0"
+checksum = "8fa4d4f81d7c05b9161f8de839975d3326328b8ba2831164b465524cc2f55252"
dependencies = [
"pmutil",
- "proc-macro2 1.0.67",
- "quote 1.0.33",
+ "proc-macro2",
+ "quote",
"swc_macros_common",
- "syn 1.0.109",
+ "syn 2.0.38",
]
[[package]]
@@ -4815,24 +5143,24 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
[[package]]
name = "strum"
-version = "0.24.1"
+version = "0.25.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f"
+checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125"
dependencies = [
"strum_macros",
]
[[package]]
name = "strum_macros"
-version = "0.24.3"
+version = "0.25.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59"
+checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0"
dependencies = [
"heck",
- "proc-macro2 1.0.67",
- "quote 1.0.33",
+ "proc-macro2",
+ "quote",
"rustversion",
- "syn 1.0.109",
+ "syn 2.0.38",
]
[[package]]
@@ -4843,9 +5171,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
[[package]]
name = "swc_atoms"
-version = "0.5.6"
+version = "0.5.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "93d0307dc4bfd107d49c7528350c372758cfca94fb503629b9a056e6a1572860"
+checksum = "9f54563d7dcba626d4acfe14ed12def7ecc28e004debe3ecd2c3ee07cc47e449"
dependencies = [
"once_cell",
"rustc-hash",
@@ -4857,11 +5185,10 @@ dependencies = [
[[package]]
name = "swc_common"
-version = "0.31.12"
+version = "0.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "19c774005489d2907fb67909cf42af926e72edee1366512777c605ba2ef19c94"
+checksum = "39cb7fcd56655c8ae7dcf2344f0be6cbff4d9c7cb401fe3ec8e56e1de8dfe582"
dependencies = [
- "ahash 0.7.6",
"ast_node",
"better_scoped_tls",
"cfg-if 1.0.0",
@@ -4873,7 +5200,7 @@ dependencies = [
"rustc-hash",
"serde",
"siphasher",
- "sourcemap",
+ "sourcemap 6.4.1",
"string_cache",
"swc_atoms",
"swc_eq_ignore_macros",
@@ -4885,9 +5212,9 @@ dependencies = [
[[package]]
name = "swc_config"
-version = "0.1.5"
+version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89c8fc2c12bb1634c7c32fc3c9b6b963ad8f034cc62c4ecddcf215dc4f6f959d"
+checksum = "9ba1c7a40d38f9dd4e9a046975d3faf95af42937b34b2b963be4d8f01239584b"
dependencies = [
"indexmap 1.9.3",
"serde",
@@ -4897,24 +5224,24 @@ dependencies = [
[[package]]
name = "swc_config_macro"
-version = "0.1.1"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7dadb9998d4f5fc36ef558ed5a092579441579ee8c6fcce84a5228cca9df4004"
+checksum = "e5b5aaca9a0082be4515f0fbbecc191bf5829cd25b5b9c0a2810f6a2bb0d6829"
dependencies = [
"pmutil",
- "proc-macro2 1.0.67",
- "quote 1.0.33",
+ "proc-macro2",
+ "quote",
"swc_macros_common",
- "syn 1.0.109",
+ "syn 2.0.38",
]
[[package]]
name = "swc_ecma_ast"
-version = "0.104.5"
+version = "0.109.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5cf9dd351d0c285dcd36535267953a18995d4dda0cbe34ac9d1df61aa415b26"
+checksum = "7bc2286cedd688a68f214faa1c19bb5cceab7c9c54d0cbe3273e4c1704e38f69"
dependencies = [
- "bitflags 2.4.0",
+ "bitflags 2.4.1",
"is-macro",
"num-bigint",
"scoped-tls",
@@ -4927,16 +5254,16 @@ dependencies = [
[[package]]
name = "swc_ecma_codegen"
-version = "0.139.17"
+version = "0.144.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c66d1ea16bb9b7ea6f87f17325742ff256fcbd65b188af57c2bf415fe4afc945"
+checksum = "8e62ba2c0ed1f119fc1a76542d007f1b2c12854d54dea15f5491363227debe11"
dependencies = [
"memchr",
"num-bigint",
"once_cell",
"rustc-hash",
"serde",
- "sourcemap",
+ "sourcemap 6.4.1",
"swc_atoms",
"swc_common",
"swc_ecma_ast",
@@ -4946,24 +5273,23 @@ dependencies = [
[[package]]
name = "swc_ecma_codegen_macros"
-version = "0.7.2"
+version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bf4ee0caee1018808d94ecd09490cb7affd3d504b19aa11c49238f5fc4b54901"
+checksum = "dcdff076dccca6cc6a0e0b2a2c8acfb066014382bc6df98ec99e755484814384"
dependencies = [
"pmutil",
- "proc-macro2 1.0.67",
- "quote 1.0.33",
+ "proc-macro2",
+ "quote",
"swc_macros_common",
- "syn 1.0.109",
+ "syn 2.0.38",
]
[[package]]
name = "swc_ecma_loader"
-version = "0.43.14"
+version = "0.44.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fe45f1e5dcc1b005544ff78253b787dea5dfd5e2f712b133964cdc3545c954a4"
+checksum = "e7d7c322462657ae27ac090a2c89f7e456c94416284a2f5ecf66c43a6a3c19d1"
dependencies = [
- "ahash 0.7.6",
"anyhow",
"pathdiff",
"serde",
@@ -4973,13 +5299,13 @@ dependencies = [
[[package]]
name = "swc_ecma_parser"
-version = "0.134.12"
+version = "0.139.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f0a3fcfe3d83dd445cbd9321882e47b467594433d9a21c4d6c37a27f534bb89e"
+checksum = "3eab46cb863bc5cd61535464e07e5b74d5f792fa26a27b9f6fd4c8daca9903b7"
dependencies = [
"either",
- "lexical",
"num-bigint",
+ "num-traits",
"serde",
"smallvec",
"smartstring",
@@ -4993,12 +5319,12 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_base"
-version = "0.127.18"
+version = "0.132.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f9c33ec5369178f3a0580ab86cfe89ffb9c3fbd122aed379cfb71d469d9d61c1"
+checksum = "01ffd4a8149052bfc1ec1832fcbe04f317846ce635a49ec438df33b06db27d26"
dependencies = [
"better_scoped_tls",
- "bitflags 2.4.0",
+ "bitflags 2.4.1",
"indexmap 1.9.3",
"once_cell",
"phf",
@@ -5016,9 +5342,9 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_classes"
-version = "0.116.18"
+version = "0.121.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6e3b0d5f362f0da97be1f1b06d7b0d8667ea70b4adeabff0dcaecb6259c09525"
+checksum = "f4b7fee0e2c6f12456d2aefb2418f2f26529b995945d493e1dce35a5a22584fc"
dependencies = [
"swc_atoms",
"swc_common",
@@ -5030,22 +5356,22 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_macros"
-version = "0.5.1"
+version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "984d5ac69b681fc5438f9abf82b0fda34fe04e119bc75f8213b7e01128c7c9a2"
+checksum = "8188eab297da773836ef5cf2af03ee5cca7a563e1be4b146f8141452c28cc690"
dependencies = [
"pmutil",
- "proc-macro2 1.0.67",
- "quote 1.0.33",
+ "proc-macro2",
+ "quote",
"swc_macros_common",
- "syn 1.0.109",
+ "syn 2.0.38",
]
[[package]]
name = "swc_ecma_transforms_proposal"
-version = "0.161.22"
+version = "0.166.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0cdce42d44ef775bc29f5ada3678a80ff72fa17a0ef705e14f63cfd0e0155e0e"
+checksum = "122fd9a69f464694edefbf9c59106b3c15e5cc8cb8575a97836e4fb79018e98f"
dependencies = [
"either",
"rustc-hash",
@@ -5063,11 +5389,10 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_react"
-version = "0.173.20"
+version = "0.178.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5fb9481ad4e2acba34c6fbb6d4ccc64efe9f1821675e883dcfa732d7220f4b1e"
+checksum = "675b5c755b0448268830e85e59429095d3423c0ce4a850b209c6f0eeab069f63"
dependencies = [
- "ahash 0.7.6",
"base64 0.13.1",
"dashmap",
"indexmap 1.9.3",
@@ -5088,9 +5413,9 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_typescript"
-version = "0.177.23"
+version = "0.182.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1fe2eea4f5b8a25c93cdaa29fb1ce4108893da88a11e61e04b7f5295b5468829"
+checksum = "4eba97b1ea71739fcf278aedad4677a3cacb52288a3f3566191b70d16a889de6"
dependencies = [
"serde",
"swc_atoms",
@@ -5104,9 +5429,9 @@ dependencies = [
[[package]]
name = "swc_ecma_utils"
-version = "0.117.13"
+version = "0.122.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad791bbfdafcebd878584021e050964c8ab68aba7eeac9d0ee4afba4c284a629"
+checksum = "11006a3398ffd4693c4d3b0a1b1a5030edbdc04228159f5301120a6178144708"
dependencies = [
"indexmap 1.9.3",
"num_cpus",
@@ -5122,9 +5447,9 @@ dependencies = [
[[package]]
name = "swc_ecma_visit"
-version = "0.90.5"
+version = "0.95.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ce3ac941ae1d6c7e683aa375fc71fbf58df58b441f614d757fbb10554936ca2"
+checksum = "0f628ec196e76e67892441e14eef2e423a738543d32bffdabfeec20c29582117"
dependencies = [
"num-bigint",
"swc_atoms",
@@ -5136,33 +5461,33 @@ dependencies = [
[[package]]
name = "swc_eq_ignore_macros"
-version = "0.1.1"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c20468634668c2bbab581947bb8c75c97158d5a6959f4ba33df20983b20b4f6"
+checksum = "05a95d367e228d52484c53336991fdcf47b6b553ef835d9159db4ba40efb0ee8"
dependencies = [
"pmutil",
- "proc-macro2 1.0.67",
- "quote 1.0.33",
- "syn 1.0.109",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
]
[[package]]
name = "swc_macros_common"
-version = "0.3.7"
+version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3e582c3e3c2269238524923781df5be49e011dbe29cf7683a2215d600a562ea6"
+checksum = "7a273205ccb09b51fabe88c49f3b34c5a4631c4c00a16ae20e03111d6a42e832"
dependencies = [
"pmutil",
- "proc-macro2 1.0.67",
- "quote 1.0.33",
- "syn 1.0.109",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
]
[[package]]
name = "swc_visit"
-version = "0.5.6"
+version = "0.5.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f412dd4fbc58f509a04e64f5c8038333142fc139e8232f01b883db0094b3b51"
+checksum = "e87c337fbb2d191bf371173dea6a957f01899adb8f189c6c31b122a6cfc98fc3"
dependencies = [
"either",
"swc_visit_macros",
@@ -5170,27 +5495,16 @@ dependencies = [
[[package]]
name = "swc_visit_macros"
-version = "0.5.7"
+version = "0.5.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4cfc226380ba54a5feed2c12f3ccd33f1ae8e959160290e5d2d9b4e918b6472a"
+checksum = "0f322730fb82f3930a450ac24de8c98523af7d34ab8cb2f46bcb405839891a99"
dependencies = [
"Inflector",
"pmutil",
- "proc-macro2 1.0.67",
- "quote 1.0.33",
+ "proc-macro2",
+ "quote",
"swc_macros_common",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "syn"
-version = "0.15.44"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5"
-dependencies = [
- "proc-macro2 0.4.30",
- "quote 0.6.13",
- "unicode-xid 0.1.0",
+ "syn 2.0.38",
]
[[package]]
@@ -5199,22 +5513,49 @@ version = "1.0.109"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
dependencies = [
- "proc-macro2 1.0.67",
- "quote 1.0.33",
+ "proc-macro2",
+ "quote",
"unicode-ident",
]
[[package]]
name = "syn"
-version = "2.0.18"
+version = "2.0.38"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e"
+checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b"
dependencies = [
- "proc-macro2 1.0.67",
- "quote 1.0.33",
+ "proc-macro2",
+ "quote",
"unicode-ident",
]
+[[package]]
+name = "sync_wrapper"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
+
+[[package]]
+name = "system-configuration"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "system-configuration-sys",
+]
+
+[[package]]
+name = "system-configuration-sys"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
[[package]]
name = "tap"
version = "1.0.1"
@@ -5241,7 +5582,7 @@ dependencies = [
"cfg-if 1.0.0",
"fastrand",
"redox_syscall 0.3.5",
- "rustix 0.38.14",
+ "rustix 0.38.19",
"windows-sys 0.48.0",
]
@@ -5291,22 +5632,22 @@ checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
[[package]]
name = "thiserror"
-version = "1.0.40"
+version = "1.0.49"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+checksum = "1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
-version = "1.0.40"
+version = "1.0.49"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+checksum = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc"
dependencies = [
- "proc-macro2 1.0.67",
- "quote 1.0.33",
- "syn 2.0.18",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
]
[[package]]
@@ -5332,12 +5673,13 @@ dependencies = [
[[package]]
name = "time"
-version = "0.3.26"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a79d09ac6b08c1ab3906a2f7cc2e81a0e27c7ae89c63812df75e52bef0751e07"
+checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5"
dependencies = [
"deranged",
"itoa",
+ "powerfmt",
"serde",
"time-core",
"time-macros",
@@ -5345,15 +5687,15 @@ dependencies = [
[[package]]
name = "time-core"
-version = "0.1.1"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
+checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
[[package]]
name = "time-macros"
-version = "0.2.12"
+version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "75c65469ed6b3a4809d987a41eb1dc918e9bc1d92211cbad7ae82931846f7451"
+checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20"
dependencies = [
"time-core",
]
@@ -5384,32 +5726,43 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "tokio"
-version = "1.32.0"
+version = "1.33.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9"
+checksum = "4f38200e3ef7995e5ef13baec2f432a6da0aa9ac495b2c0e8f3b7eec2c92d653"
dependencies = [
"backtrace",
"bytes",
"libc",
"mio",
"num_cpus",
- "parking_lot 0.12.1",
+ "parking_lot",
"pin-project-lite",
"signal-hook-registry",
"socket2 0.5.4",
"tokio-macros",
+ "tracing",
"windows-sys 0.48.0",
]
+[[package]]
+name = "tokio-io-timeout"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf"
+dependencies = [
+ "pin-project-lite",
+ "tokio",
+]
+
[[package]]
name = "tokio-macros"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
dependencies = [
- "proc-macro2 1.0.67",
- "quote 1.0.33",
- "syn 2.0.18",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
]
[[package]]
@@ -5424,13 +5777,12 @@ dependencies = [
[[package]]
name = "tokio-rustls"
-version = "0.23.4"
+version = "0.24.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
+checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
dependencies = [
"rustls",
"tokio",
- "webpki",
]
[[package]]
@@ -5473,9 +5825,9 @@ dependencies = [
[[package]]
name = "tokio-tungstenite"
-version = "0.17.2"
+version = "0.20.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f714dd15bead90401d77e04243611caec13726c2408afd5b31901dfcdcb3b181"
+checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c"
dependencies = [
"futures-util",
"log",
@@ -5501,11 +5853,26 @@ dependencies = [
[[package]]
name = "toml"
-version = "0.5.11"
+version = "0.7.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257"
dependencies = [
"serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit 0.19.15",
+]
+
+[[package]]
+name = "toml"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit 0.20.2",
]
[[package]]
@@ -5513,6 +5880,9 @@ name = "toml_datetime"
version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
+dependencies = [
+ "serde",
+]
[[package]]
name = "toml_edit"
@@ -5520,11 +5890,53 @@ version = "0.19.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
dependencies = [
- "indexmap 2.0.1",
+ "indexmap 2.0.2",
+ "serde",
+ "serde_spanned",
"toml_datetime",
"winnow",
]
+[[package]]
+name = "toml_edit"
+version = "0.20.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338"
+dependencies = [
+ "indexmap 2.0.2",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tonic"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d560933a0de61cf715926b9cac824d4c883c2c43142f787595e48280c40a1d0e"
+dependencies = [
+ "async-stream",
+ "async-trait",
+ "axum",
+ "base64 0.21.4",
+ "bytes",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-timeout",
+ "percent-encoding",
+ "pin-project",
+ "prost",
+ "tokio",
+ "tokio-stream",
+ "tower",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
[[package]]
name = "torut"
version = "0.2.1"
@@ -5534,7 +5946,7 @@ dependencies = [
"base32",
"base64 0.13.1",
"derive_more",
- "ed25519-dalek",
+ "ed25519-dalek 1.0.1",
"hex",
"hmac 0.11.0",
"rand 0.7.3",
@@ -5545,6 +5957,32 @@ dependencies = [
"tokio",
]
+[[package]]
+name = "tower"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "indexmap 1.9.3",
+ "pin-project",
+ "pin-project-lite",
+ "rand 0.8.5",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
+
[[package]]
name = "tower-service"
version = "0.3.2"
@@ -5553,11 +5991,11 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
[[package]]
name = "tracing"
-version = "0.1.37"
+version = "0.1.39"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+checksum = "ee2ef2af84856a50c1d430afce2fdded0a4ec7eda868db86409b4543df0797f9"
dependencies = [
- "cfg-if 1.0.0",
+ "log",
"pin-project-lite",
"tracing-attributes",
"tracing-core",
@@ -5565,20 +6003,20 @@ dependencies = [
[[package]]
name = "tracing-attributes"
-version = "0.1.26"
+version = "0.1.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
+checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
dependencies = [
- "proc-macro2 1.0.67",
- "quote 1.0.33",
- "syn 2.0.18",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
]
[[package]]
name = "tracing-core"
-version = "0.1.31"
+version = "0.1.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
dependencies = [
"once_cell",
"valuable",
@@ -5604,6 +6042,17 @@ dependencies = [
"tracing",
]
+[[package]]
+name = "tracing-journald"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba316a74e8fc3c3896a850dba2375928a9fa171b085ecddfc7c054d39970f3fd"
+dependencies = [
+ "libc",
+ "tracing-core",
+ "tracing-subscriber",
+]
+
[[package]]
name = "tracing-log"
version = "0.1.3"
@@ -5652,31 +6101,11 @@ dependencies = [
"stable_deref_trait",
]
-[[package]]
-name = "trust-dns-client"
-version = "0.22.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c408c32e6a9dbb38037cece35740f2cf23c875d8ca134d33631cec83f74d3fe"
-dependencies = [
- "cfg-if 1.0.0",
- "data-encoding",
- "futures-channel",
- "futures-util",
- "lazy_static",
- "radix_trie",
- "rand 0.8.5",
- "thiserror",
- "time",
- "tokio",
- "tracing",
- "trust-dns-proto",
-]
-
[[package]]
name = "trust-dns-proto"
-version = "0.22.0"
+version = "0.23.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f7f83d1e4a0e4358ac54c5c3681e5d7da5efc5a7a632c90bb6d6669ddd9bc26"
+checksum = "559ac980345f7f5020883dd3bcacf176355225e01916f8c2efecad7534f682c6"
dependencies = [
"async-trait",
"cfg-if 1.0.0",
@@ -5685,9 +6114,9 @@ dependencies = [
"futures-channel",
"futures-io",
"futures-util",
- "idna 0.2.3",
+ "idna 0.4.0",
"ipnet",
- "lazy_static",
+ "once_cell",
"rand 0.8.5",
"smallvec",
"thiserror",
@@ -5699,13 +6128,14 @@ dependencies = [
[[package]]
name = "trust-dns-server"
-version = "0.22.1"
+version = "0.23.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "99022f9befa6daec2a860be68ac28b1f0d9d7ccf441d8c5a695e35a58d88840d"
+checksum = "f4307166910ddf09378e651e9d4730c44900e9e0e1f157a6b955e48b539cd1d6"
dependencies = [
"async-trait",
"bytes",
"cfg-if 1.0.0",
+ "drain",
"enum-as-inner",
"futures-executor",
"futures-util",
@@ -5713,9 +6143,8 @@ dependencies = [
"thiserror",
"time",
"tokio",
- "toml",
+ "toml 0.7.8",
"tracing",
- "trust-dns-client",
"trust-dns-proto",
]
@@ -5727,19 +6156,19 @@ checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
[[package]]
name = "tungstenite"
-version = "0.17.3"
+version = "0.20.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e27992fd6a8c29ee7eef28fc78349aa244134e10ad447ce3b9f0ac0ed0fa4ce0"
+checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9"
dependencies = [
- "base64 0.13.1",
"byteorder",
"bytes",
+ "data-encoding",
"http",
"httparse",
"log",
"native-tls",
"rand 0.8.5",
- "sha-1",
+ "sha1",
"thiserror",
"url",
"utf-8",
@@ -5753,13 +6182,22 @@ checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a"
[[package]]
name = "typed-builder"
-version = "0.10.0"
+version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89851716b67b937e393b3daa8423e67ddfc4bbbf1654bcf05488e95e0828db0c"
+checksum = "b1c6a006a6d3d6a6f143fda41cf4d1ad35110080687628c9f2117bd3cc7924f3"
dependencies = [
- "proc-macro2 1.0.67",
- "quote 1.0.33",
- "syn 1.0.109",
+ "typed-builder-macro",
+]
+
+[[package]]
+name = "typed-builder-macro"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fa054ee5e2346187d631d2f1d1fd3b33676772d6d03a2d84e1c5213b31674ee"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
]
[[package]]
@@ -5822,12 +6260,6 @@ version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
-[[package]]
-name = "unicode-xid"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
-
[[package]]
name = "unicode-xid"
version = "0.2.4"
@@ -5878,18 +6310,18 @@ checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
[[package]]
name = "uuid"
-version = "1.4.1"
+version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d"
+checksum = "88ad59a7560b41a70d191093a945f0b87bc1deeda46fb237479708a1d6b6cdfc"
dependencies = [
"getrandom 0.2.10",
]
[[package]]
name = "v8"
-version = "0.74.3"
+version = "0.79.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2eedac634b8dd39b889c5b62349cbc55913780226239166435c5cf66771792ea"
+checksum = "b15561535230812a1db89a696f1f16a12ae6c2c370c6b2241c68d4cb33963faf"
dependencies = [
"bitflags 1.3.2",
"fslock",
@@ -5970,9 +6402,9 @@ dependencies = [
"bumpalo",
"log",
"once_cell",
- "proc-macro2 1.0.67",
- "quote 1.0.33",
- "syn 2.0.18",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
"wasm-bindgen-shared",
]
@@ -5994,7 +6426,7 @@ version = "0.2.87"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
dependencies = [
- "quote 1.0.33",
+ "quote",
"wasm-bindgen-macro-support",
]
@@ -6004,9 +6436,9 @@ version = "0.2.87"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
dependencies = [
- "proc-macro2 1.0.67",
- "quote 1.0.33",
- "syn 2.0.18",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@@ -6040,23 +6472,13 @@ dependencies = [
"wasm-bindgen",
]
-[[package]]
-name = "webpki"
-version = "0.22.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f0e74f82d49d545ad128049b7e88f6576df2da6b02e9ce565c6f533be576957e"
-dependencies = [
- "ring",
- "untrusted",
-]
-
[[package]]
name = "webpki-roots"
-version = "0.22.6"
+version = "0.24.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87"
+checksum = "b291546d5d9d1eab74f069c77749f2cb8504a12caa20f0f2de93ddbf6f411888"
dependencies = [
- "webpki",
+ "rustls-webpki",
]
[[package]]
@@ -6077,7 +6499,7 @@ dependencies = [
"either",
"home",
"once_cell",
- "rustix 0.38.14",
+ "rustix 0.38.19",
]
[[package]]
@@ -6085,10 +6507,6 @@ name = "whoami"
version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22fc3756b8a9133049b26c7f61ab35416c130e8c09b660f5b3958b446f52cc50"
-dependencies = [
- "wasm-bindgen",
- "web-sys",
-]
[[package]]
name = "winapi"
@@ -6122,10 +6540,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
-name = "windows"
-version = "0.48.0"
+name = "windows-core"
+version = "0.51.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64"
dependencies = [
"windows-targets 0.48.5",
]
@@ -6264,9 +6682,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
[[package]]
name = "winnow"
-version = "0.5.15"
+version = "0.5.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc"
+checksum = "a3b801d0e0a6726477cc207f60162da452f3a95adb368399bef20a946e06f65c"
dependencies = [
"memchr",
]
@@ -6358,7 +6776,7 @@ version = "1.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
dependencies = [
- "proc-macro2 1.0.67",
- "quote 1.0.33",
- "syn 2.0.18",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
]
diff --git a/backend/Cargo.toml b/backend/Cargo.toml
index 754e6050f..2c99a79ed 100644
--- a/backend/Cargo.toml
+++ b/backend/Cargo.toml
@@ -14,7 +14,7 @@ keywords = [
name = "start-os"
readme = "README.md"
repository = "https://github.com/Start9Labs/start-os"
-version = "0.3.4-rev.4"
+version = "0.3.5"
[lib]
name = "startos"
@@ -26,145 +26,150 @@ path = "src/main.rs"
[features]
avahi = ["avahi-sys"]
-default = ["cli", "sdk", "daemon", "js_engine"]
-dev = []
-unstable = ["patch-db/unstable"]
avahi-alias = ["avahi"]
cli = []
-sdk = []
daemon = []
+default = ["cli", "sdk", "daemon", "js_engine"]
+dev = []
podman = []
+sdk = []
+unstable = ["console-subscriber", "tokio/tracing"]
[dependencies]
aes = { version = "0.7.5", features = ["ctr"] }
-async-compression = { version = "0.3.15", features = [
+async-compression = { version = "0.4.4", features = [
"gzip",
"brotli",
"tokio",
] }
-async-stream = "0.3.3"
-async-trait = "0.1.56"
+async-stream = "0.3.5"
+async-trait = "0.1.74"
avahi-sys = { git = "https://github.com/Start9Labs/avahi-sys", version = "0.10.0", branch = "feature/dynamic-linking", features = [
"dynamic",
], optional = true }
base32 = "0.4.0"
-base64 = "0.13.0"
-base64ct = "1.5.1"
+base64 = "0.21.4"
+base64ct = "1.6.0"
basic-cookies = "0.1.4"
bimap = { version = "0.6.2", features = ["serde"] }
bytes = "1"
-chrono = { version = "0.4.19", features = ["serde"] }
-clap = "3.2.8"
-color-eyre = "0.6.1"
-cookie = "0.16.2"
-cookie_store = "0.19.0"
+chrono = { version = "0.4.31", features = ["serde"] }
+clap = "3.2.25"
+color-eyre = "0.6.2"
+console = "0.15.7"
+console-subscriber = { version = "0.2", optional = true }
+cookie = "0.18.0"
+cookie_store = "0.20.0"
current_platform = "0.2.0"
-digest = "0.10.3"
-digest-old = { package = "digest", version = "0.9.0" }
+digest = "0.10.7"
divrem = "1.0.0"
-ed25519 = { version = "1.5.2", features = ["pkcs8", "pem", "alloc"] }
-ed25519-dalek = { version = "1.0.1", features = ["serde"] }
+ed25519 = { version = "2.2.3", features = ["pkcs8", "pem", "alloc"] }
+ed25519-dalek = { version = "2.0.0", features = [
+ "serde",
+ "hazmat",
+ "zeroize",
+ "rand_core",
+ "digest",
+] }
+embassy_container_init = { path = "../libs/embassy_container_init" }
emver = { version = "0.1.7", git = "https://github.com/Start9Labs/emver-rs.git", features = [
"serde",
] }
fd-lock-rs = "0.1.4"
-futures = "0.3.21"
+futures = "0.3.28"
git-version = "0.3.5"
-gpt = "3.0.0"
+gpt = "3.1.0"
helpers = { path = "../libs/helpers" }
-embassy_container_init = { path = "../libs/embassy_container_init" }
hex = "0.4.3"
hmac = "0.12.1"
-http = "0.2.8"
-hyper = { version = "0.14.20", features = ["full"] }
-hyper-ws-listener = "0.2.0"
+http = "0.2.9"
+hyper = { version = "0.14.27", features = ["full"] }
+hyper-ws-listener = "0.3.0"
id-pool = { version = "0.2.2", features = [
"u16",
"serde",
], default-features = false }
-imbl = "2.0.0"
+imbl = "2.0.2"
imbl-value = { git = "https://github.com/Start9Labs/imbl-value.git" }
include_dir = "0.7.3"
-indexmap = { version = "1.9.1", features = ["serde"] }
-ipnet = { version = "2.7.1", features = ["serde"] }
+indexmap = { version = "2.0.2", features = ["serde"] }
+indicatif = { version = "0.17.7", features = ["tokio"] }
+ipnet = { version = "2.8.0", features = ["serde"] }
iprange = { version = "0.6.7", features = ["serde"] }
isocountry = "0.3.2"
-itertools = "0.10.3"
-jaq-core = "0.10.0"
+itertools = "0.11.0"
+jaq-core = "0.10.1"
jaq-std = "0.10.0"
-josekit = "0.8.1"
+josekit = "0.8.4"
js_engine = { path = '../libs/js_engine', optional = true }
jsonpath_lib = { git = "https://github.com/Start9Labs/jsonpath.git" }
lazy_static = "1.4.0"
-libc = "0.2.126"
-log = "0.4.17"
-mbrman = "0.5.0"
+libc = "0.2.149"
+log = "0.4.20"
+mbrman = "0.5.2"
models = { version = "*", path = "../libs/models" }
new_mime_guess = "4"
-nix = "0.25.0"
-nom = "7.1.1"
-num = "0.4.0"
-num_enum = "0.5.7"
-openssh-keys = "0.5.0"
-openssl = { version = "0.10.41", features = ["vendored"] }
+nix = { version = "0.27.1", features = ["user", "process", "signal", "fs"] }
+nom = "7.1.3"
+num = "0.4.1"
+num_enum = "0.7.0"
+openssh-keys = "0.6.2"
+openssl = { version = "0.10.57", features = ["vendored"] }
+p256 = { version = "0.13.2", features = ["pem"] }
patch-db = { version = "*", path = "../patch-db/patch-db", features = [
"trace",
] }
-p256 = { version = "0.12.0", features = ["pem"] }
-pbkdf2 = "0.11.0"
-pin-project = "1.0.11"
-pkcs8 = { version = "0.9.0", features = ["std"] }
+pbkdf2 = "0.12.2"
+pin-project = "1.1.3"
+pkcs8 = { version = "0.10.2", features = ["std"] }
prettytable-rs = "0.10.0"
-proptest = "1.0.0"
-proptest-derive = "0.3.0"
+proptest = "1.3.1"
+proptest-derive = "0.4.0"
rand = { version = "0.8.5", features = ["std"] }
-rand-old = { package = "rand", version = "0.7.3" }
-regex = "1.6.0"
-reqwest = { version = "0.11.11", features = ["stream", "json", "socks"] }
-reqwest_cookie_store = "0.5.0"
-rpassword = "7.0.0"
+regex = "1.10.2"
+reqwest = { version = "0.11.22", features = ["stream", "json", "socks"] }
+reqwest_cookie_store = "0.6.0"
+rpassword = "7.2.0"
rpc-toolkit = "0.2.2"
-rust-argon2 = "1.0.0"
+rust-argon2 = "2.0.0"
scopeguard = "1.1" # because avahi-sys fucks your shit up
-serde = { version = "1.0.139", features = ["derive", "rc"] }
-serde_cbor = { package = "ciborium", version = "0.2.0" }
-serde_json = "1.0.93"
-serde_toml = { package = "toml", version = "0.5.9" }
-serde_with = { version = "2.0.1", features = ["macros", "json"] }
-serde_yaml = "0.9.11"
+serde = { version = "1.0", features = ["derive", "rc"] }
+serde_cbor = { package = "ciborium", version = "0.2.1" }
+serde_json = "1.0"
+serde_toml = { package = "toml", version = "0.8.2" }
+serde_with = { version = "3.4.0", features = ["macros", "json"] }
+serde_yaml = "0.9.25"
sha2 = "0.10.2"
-sha2-old = { package = "sha2", version = "0.9.9" }
simple-logging = "2.0.2"
-sqlx = { version = "0.6.0", features = [
+sqlx = { version = "0.7.2", features = [
"chrono",
- "offline",
"runtime-tokio-rustls",
"postgres",
] }
-ssh-key = { version = "0.5.1", features = ["ed25519"] }
-stderrlog = "0.5.3"
-tar = "0.4.38"
-thiserror = "1.0.31"
-tokio = { version = "1.23", features = ["full"] }
-tokio-stream = { version = "0.1.11", features = ["io-util", "sync", "net"] }
-tokio-tar = { git = "https://github.com/dr-bonez/tokio-tar.git" }
-tokio-tungstenite = { version = "0.17.1", features = ["native-tls"] }
-tokio-rustls = "0.23.4"
+sscanf = "0.4.1"
+ssh-key = { version = "0.6.2", features = ["ed25519"] }
+stderrlog = "0.5.4"
+tar = "0.4.40"
+thiserror = "1.0.49"
+tokio = { version = "1", features = ["full"] }
+tokio-rustls = "0.24.1"
tokio-socks = "0.5.1"
-tokio-util = { version = "0.7.3", features = ["io"] }
+tokio-stream = { version = "0.1.14", features = ["io-util", "sync", "net"] }
+tokio-tar = { git = "https://github.com/dr-bonez/tokio-tar.git" }
+tokio-tungstenite = { version = "0.20.1", features = ["native-tls"] }
+tokio-util = { version = "0.7.9", features = ["io"] }
torut = "0.2.1"
-tracing = "0.1.35"
+tracing = "0.1.39"
tracing-error = "0.2.0"
tracing-futures = "0.2.5"
-tracing-subscriber = { version = "0.3.14", features = ["env-filter"] }
-trust-dns-server = "0.22.0"
-typed-builder = "0.10.0"
-url = { version = "2.2.2", features = ["serde"] }
-urlencoding = "2.1.2"
-uuid = { version = "1.1.2", features = ["v4"] }
-zeroize = "1.5.7"
-indicatif = { version = "0.17.6", features = ["tokio"] }
-console = "^0.15"
+tracing-journald = "0.3.0"
+tracing-subscriber = { version = "0.3.17", features = ["env-filter"] }
+trust-dns-server = "0.23.1"
+typed-builder = "0.17.0"
+url = { version = "2.4.1", features = ["serde"] }
+urlencoding = "2.1.3"
+uuid = { version = "1.4.1", features = ["v4"] }
+zeroize = "1.6.0"
[profile.test]
opt-level = 3
diff --git a/backend/build-prod.sh b/backend/build-prod.sh
index 97ca33279..c679fdf98 100755
--- a/backend/build-prod.sh
+++ b/backend/build-prod.sh
@@ -22,49 +22,38 @@ if tty -s; then
USE_TTY="-it"
fi
-alias 'rust-gnu-builder'='docker run $USE_TTY --rm -e "OS_ARCH=$OS_ARCH" -v "$HOME/.cargo/registry":/usr/local/cargo/registry -v "$(pwd)":/home/rust/src -w /home/rust/src -P start9/rust-arm-cross:aarch64'
-alias 'rust-musl-builder'='docker run $USE_TTY --rm -e "OS_ARCH=$OS_ARCH" -v "$HOME/.cargo/registry":/root/.cargo/registry -v "$(pwd)":/home/rust/src -P messense/rust-musl-cross:$ARCH-musl'
-
cd ..
FLAGS=""
+RUSTFLAGS=""
if [[ "$ENVIRONMENT" =~ (^|-)podman($|-) ]]; then
FLAGS="podman,$FLAGS"
fi
if [[ "$ENVIRONMENT" =~ (^|-)unstable($|-) ]]; then
FLAGS="unstable,$FLAGS"
+ RUSTFLAGS="$RUSTFLAGS --cfg tokio_unstable"
fi
if [[ "$ENVIRONMENT" =~ (^|-)dev($|-) ]]; then
FLAGS="dev,$FLAGS"
fi
+alias 'rust-gnu-builder'='docker run $USE_TTY --rm -e "OS_ARCH=$OS_ARCH" -e "RUSTFLAGS=$RUSTFLAGS" -v "$HOME/.cargo/registry":/usr/local/cargo/registry -v "$(pwd)":/home/rust/src -w /home/rust/src -P start9/rust-arm-cross:aarch64'
+alias 'rust-musl-builder'='docker run $USE_TTY --rm -e "OS_ARCH=$OS_ARCH" -v "$HOME/.cargo/registry":/root/.cargo/registry -v "$(pwd)":/home/rust/src -P messense/rust-musl-cross:$ARCH-musl'
+
set +e
fail=
-if [[ "$FLAGS" = "" ]]; then
- rust-gnu-builder sh -c "(cd backend && cargo build --release --locked --features avahi-alias, --target=$ARCH-unknown-linux-gnu)"
- if test $? -ne 0; then
- fail=true
- fi
- for ARCH in x86_64 aarch64
- do
- rust-musl-builder sh -c "(cd libs && cargo build --release --locked --bin embassy_container_init )"
- if test $? -ne 0; then
- fail=true
- fi
- done
-else
- echo "FLAGS=$FLAGS"
- rust-gnu-builder sh -c "(cd backend && cargo build --release --features avahi-alias,$FLAGS --locked --target=$ARCH-unknown-linux-gnu)"
- if test $? -ne 0; then
- fail=true
- fi
- for ARCH in x86_64 aarch64
- do
- rust-musl-builder sh -c "(cd libs && cargo build --release --locked --bin embassy_container_init)"
- if test $? -ne 0; then
- fail=true
- fi
- done
+echo "FLAGS=\"$FLAGS\""
+echo "RUSTFLAGS=\"$RUSTFLAGS\""
+rust-gnu-builder sh -c "(cd backend && cargo build --release --features avahi-alias,$FLAGS --locked --target=$ARCH-unknown-linux-gnu)"
+if test $? -ne 0; then
+ fail=true
fi
+for ARCH in x86_64 aarch64
+do
+ rust-musl-builder sh -c "(cd libs && cargo build --release --locked --bin embassy_container_init)"
+ if test $? -ne 0; then
+ fail=true
+ fi
+done
set -e
cd backend
diff --git a/backend/sqlx-data.json b/backend/sqlx-data.json
deleted file mode 100644
index 84afcfdb6..000000000
--- a/backend/sqlx-data.json
+++ /dev/null
@@ -1,744 +0,0 @@
-{
- "db": "PostgreSQL",
- "1ce5254f27de971fd87f5ab66d300f2b22433c86617a0dbf796bf2170186dd2e": {
- "describe": {
- "columns": [],
- "nullable": [],
- "parameters": {
- "Left": [
- "Text",
- "Text",
- "Bytea"
- ]
- }
- },
- "query": "INSERT INTO network_keys (package, interface, key) VALUES ($1, $2, $3) ON CONFLICT (package, interface) DO NOTHING"
- },
- "21471490cdc3adb206274cc68e1ea745ffa5da4479478c1fd2158a45324b1930": {
- "describe": {
- "columns": [],
- "nullable": [],
- "parameters": {
- "Left": [
- "Text"
- ]
- }
- },
- "query": "DELETE FROM ssh_keys WHERE fingerprint = $1"
- },
- "28ea34bbde836e0618c5fc9bb7c36e463c20c841a7d6a0eb15be0f24f4a928ec": {
- "describe": {
- "columns": [
- {
- "name": "hostname",
- "ordinal": 0,
- "type_info": "Text"
- },
- {
- "name": "path",
- "ordinal": 1,
- "type_info": "Text"
- },
- {
- "name": "username",
- "ordinal": 2,
- "type_info": "Text"
- },
- {
- "name": "password",
- "ordinal": 3,
- "type_info": "Text"
- }
- ],
- "nullable": [
- false,
- false,
- false,
- true
- ],
- "parameters": {
- "Left": [
- "Int4"
- ]
- }
- },
- "query": "SELECT hostname, path, username, password FROM cifs_shares WHERE id = $1"
- },
- "4099028a5c0de578255bf54a67cef6cb0f1e9a4e158260700f1639dd4b438997": {
- "describe": {
- "columns": [
- {
- "name": "fingerprint",
- "ordinal": 0,
- "type_info": "Text"
- },
- {
- "name": "openssh_pubkey",
- "ordinal": 1,
- "type_info": "Text"
- },
- {
- "name": "created_at",
- "ordinal": 2,
- "type_info": "Text"
- }
- ],
- "nullable": [
- false,
- false,
- false
- ],
- "parameters": {
- "Left": [
- "Text"
- ]
- }
- },
- "query": "SELECT * FROM ssh_keys WHERE fingerprint = $1"
- },
- "4691e3a2ce80b59009ac17124f54f925f61dc5ea371903e62cdffa5d7b67ca96": {
- "describe": {
- "columns": [
- {
- "name": "id",
- "ordinal": 0,
- "type_info": "Text"
- },
- {
- "name": "logged_in",
- "ordinal": 1,
- "type_info": "Timestamp"
- },
- {
- "name": "logged_out",
- "ordinal": 2,
- "type_info": "Timestamp"
- },
- {
- "name": "last_active",
- "ordinal": 3,
- "type_info": "Timestamp"
- },
- {
- "name": "user_agent",
- "ordinal": 4,
- "type_info": "Text"
- },
- {
- "name": "metadata",
- "ordinal": 5,
- "type_info": "Text"
- }
- ],
- "nullable": [
- false,
- false,
- true,
- false,
- true,
- false
- ],
- "parameters": {
- "Left": []
- }
- },
- "query": "SELECT * FROM session WHERE logged_out IS NULL OR logged_out > CURRENT_TIMESTAMP"
- },
- "4bcfbefb1eb3181343871a1cd7fc3afb81c2be5c681cfa8b4be0ce70610e9c3a": {
- "describe": {
- "columns": [],
- "nullable": [],
- "parameters": {
- "Left": [
- "Text"
- ]
- }
- },
- "query": "UPDATE session SET logged_out = CURRENT_TIMESTAMP WHERE id = $1"
- },
- "629be61c3c341c131ddbbff0293a83dbc6afd07cae69d246987f62cf0cc35c2a": {
- "describe": {
- "columns": [
- {
- "name": "password",
- "ordinal": 0,
- "type_info": "Text"
- }
- ],
- "nullable": [
- false
- ],
- "parameters": {
- "Left": []
- }
- },
- "query": "SELECT password FROM account"
- },
- "687688055e63d27123cdc89a5bbbd8361776290a9411d527eaf1fdb40bef399d": {
- "describe": {
- "columns": [
- {
- "name": "key",
- "ordinal": 0,
- "type_info": "Bytea"
- }
- ],
- "nullable": [
- false
- ],
- "parameters": {
- "Left": [
- "Text",
- "Text"
- ]
- }
- },
- "query": "SELECT key FROM tor WHERE package = $1 AND interface = $2"
- },
- "6d35ccf780fb2bb62586dd1d3df9c1550a41ee580dad3f49d35cb843ebef10ca": {
- "describe": {
- "columns": [],
- "nullable": [],
- "parameters": {
- "Left": [
- "Text"
- ]
- }
- },
- "query": "UPDATE session SET last_active = CURRENT_TIMESTAMP WHERE id = $1 AND logged_out IS NULL OR logged_out > CURRENT_TIMESTAMP"
- },
- "770c1017734720453dc87b58c385b987c5af5807151ff71a59000014586752e0": {
- "describe": {
- "columns": [
- {
- "name": "key",
- "ordinal": 0,
- "type_info": "Bytea"
- }
- ],
- "nullable": [
- false
- ],
- "parameters": {
- "Left": [
- "Text",
- "Text",
- "Bytea"
- ]
- }
- },
- "query": "INSERT INTO network_keys (package, interface, key) VALUES ($1, $2, $3) ON CONFLICT (package, interface) DO UPDATE SET package = EXCLUDED.package RETURNING key"
- },
- "7b64f032d507e8ffe37c41f4c7ad514a66c421a11ab04c26d89a7aa8f6b67210": {
- "describe": {
- "columns": [
- {
- "name": "id",
- "ordinal": 0,
- "type_info": "Int4"
- },
- {
- "name": "package_id",
- "ordinal": 1,
- "type_info": "Text"
- },
- {
- "name": "created_at",
- "ordinal": 2,
- "type_info": "Timestamp"
- },
- {
- "name": "code",
- "ordinal": 3,
- "type_info": "Int4"
- },
- {
- "name": "level",
- "ordinal": 4,
- "type_info": "Text"
- },
- {
- "name": "title",
- "ordinal": 5,
- "type_info": "Text"
- },
- {
- "name": "message",
- "ordinal": 6,
- "type_info": "Text"
- },
- {
- "name": "data",
- "ordinal": 7,
- "type_info": "Text"
- }
- ],
- "nullable": [
- false,
- true,
- false,
- false,
- false,
- false,
- false,
- true
- ],
- "parameters": {
- "Left": [
- "Int4",
- "Int8"
- ]
- }
- },
- "query": "SELECT id, package_id, created_at, code, level, title, message, data FROM notifications WHERE id < $1 ORDER BY id DESC LIMIT $2"
- },
- "7c7a3549c997eb75bf964ea65fbb98a73045adf618696cd838d79203ef5383fb": {
- "describe": {
- "columns": [],
- "nullable": [],
- "parameters": {
- "Left": [
- "Text",
- "Text",
- "Text",
- "Bytea",
- "Text",
- "Text"
- ]
- }
- },
- "query": "\n INSERT INTO account (\n id,\n server_id,\n hostname,\n password,\n network_key,\n root_ca_key_pem,\n root_ca_cert_pem\n ) VALUES (\n 0, $1, $2, $3, $4, $5, $6\n ) ON CONFLICT (id) DO UPDATE SET\n server_id = EXCLUDED.server_id,\n hostname = EXCLUDED.hostname,\n password = EXCLUDED.password,\n network_key = EXCLUDED.network_key,\n root_ca_key_pem = EXCLUDED.root_ca_key_pem,\n root_ca_cert_pem = EXCLUDED.root_ca_cert_pem\n "
- },
- "7e0649d839927e57fa03ee51a2c9f96a8bdb0fc97ee8a3c6df1069e1e2b98576": {
- "describe": {
- "columns": [],
- "nullable": [],
- "parameters": {
- "Left": [
- "Text"
- ]
- }
- },
- "query": "DELETE FROM tor WHERE package = $1"
- },
- "8951b9126fbf60dbb5997241e11e3526b70bccf3e407327917294a993bc17ed5": {
- "describe": {
- "columns": [],
- "nullable": [],
- "parameters": {
- "Left": [
- "Text",
- "Text",
- "Bytea"
- ]
- }
- },
- "query": "INSERT INTO tor (package, interface, key) VALUES ($1, $2, $3) ON CONFLICT (package, interface) DO NOTHING"
- },
- "94d471bb374b4965c6cbedf8c17bbf6bea226d38efaf6559923c79a36d5ca08c": {
- "describe": {
- "columns": [
- {
- "name": "id",
- "ordinal": 0,
- "type_info": "Int4"
- },
- {
- "name": "package_id",
- "ordinal": 1,
- "type_info": "Text"
- },
- {
- "name": "created_at",
- "ordinal": 2,
- "type_info": "Timestamp"
- },
- {
- "name": "code",
- "ordinal": 3,
- "type_info": "Int4"
- },
- {
- "name": "level",
- "ordinal": 4,
- "type_info": "Text"
- },
- {
- "name": "title",
- "ordinal": 5,
- "type_info": "Text"
- },
- {
- "name": "message",
- "ordinal": 6,
- "type_info": "Text"
- },
- {
- "name": "data",
- "ordinal": 7,
- "type_info": "Text"
- }
- ],
- "nullable": [
- false,
- true,
- false,
- false,
- false,
- false,
- false,
- true
- ],
- "parameters": {
- "Left": [
- "Int8"
- ]
- }
- },
- "query": "SELECT id, package_id, created_at, code, level, title, message, data FROM notifications ORDER BY id DESC LIMIT $1"
- },
- "95c4ab4c645f3302568c6ff13d85ab58252362694cf0f56999bf60194d20583a": {
- "describe": {
- "columns": [
- {
- "name": "id",
- "ordinal": 0,
- "type_info": "Int4"
- },
- {
- "name": "hostname",
- "ordinal": 1,
- "type_info": "Text"
- },
- {
- "name": "path",
- "ordinal": 2,
- "type_info": "Text"
- },
- {
- "name": "username",
- "ordinal": 3,
- "type_info": "Text"
- },
- {
- "name": "password",
- "ordinal": 4,
- "type_info": "Text"
- }
- ],
- "nullable": [
- false,
- false,
- false,
- false,
- true
- ],
- "parameters": {
- "Left": []
- }
- },
- "query": "SELECT id, hostname, path, username, password FROM cifs_shares"
- },
- "a60d6e66719325b08dc4ecfacaf337527233c84eee758ac9be967906e5841d27": {
- "describe": {
- "columns": [],
- "nullable": [],
- "parameters": {
- "Left": [
- "Int4"
- ]
- }
- },
- "query": "DELETE FROM cifs_shares WHERE id = $1"
- },
- "a6b0c8909a3a5d6d9156aebfb359424e6b5a1d1402e028219e21726f1ebd282e": {
- "describe": {
- "columns": [
- {
- "name": "fingerprint",
- "ordinal": 0,
- "type_info": "Text"
- },
- {
- "name": "openssh_pubkey",
- "ordinal": 1,
- "type_info": "Text"
- },
- {
- "name": "created_at",
- "ordinal": 2,
- "type_info": "Text"
- }
- ],
- "nullable": [
- false,
- false,
- false
- ],
- "parameters": {
- "Left": []
- }
- },
- "query": "SELECT fingerprint, openssh_pubkey, created_at FROM ssh_keys"
- },
- "b1147beaaabbed89f2ab8c1e13ec4393a9a8fde2833cf096af766a979d94dee6": {
- "describe": {
- "columns": [],
- "nullable": [],
- "parameters": {
- "Left": [
- "Text",
- "Text",
- "Text",
- "Text",
- "Int4"
- ]
- }
- },
- "query": "UPDATE cifs_shares SET hostname = $1, path = $2, username = $3, password = $4 WHERE id = $5"
- },
- "d5117054072476377f3c4f040ea429d4c9b2cf534e76f35c80a2bf60e8599cca": {
- "describe": {
- "columns": [
- {
- "name": "openssh_pubkey",
- "ordinal": 0,
- "type_info": "Text"
- }
- ],
- "nullable": [
- false
- ],
- "parameters": {
- "Left": []
- }
- },
- "query": "SELECT openssh_pubkey FROM ssh_keys"
- },
- "da71f94b29798d1738d2b10b9a721ea72db8cfb362e7181c8226d9297507c62b": {
- "describe": {
- "columns": [],
- "nullable": [],
- "parameters": {
- "Left": [
- "Text",
- "Int4",
- "Text",
- "Text",
- "Text",
- "Text"
- ]
- }
- },
- "query": "INSERT INTO notifications (package_id, code, level, title, message, data) VALUES ($1, $2, $3, $4, $5, $6)"
- },
- "e185203cf84e43b801dfb23b4159e34aeaef1154dcd3d6811ab504915497ccf7": {
- "describe": {
- "columns": [],
- "nullable": [],
- "parameters": {
- "Left": [
- "Int4"
- ]
- }
- },
- "query": "DELETE FROM notifications WHERE id = $1"
- },
- "e545696735f202f9d13cf22a561f3ff3f9aed7f90027a9ba97634bcb47d772f0": {
- "describe": {
- "columns": [
- {
- "name": "tor_key",
- "ordinal": 0,
- "type_info": "Bytea"
- }
- ],
- "nullable": [
- true
- ],
- "parameters": {
- "Left": []
- }
- },
- "query": "SELECT tor_key FROM account WHERE id = 0"
- },
- "e5843c5b0e7819b29aa1abf2266799bd4f82e761837b526a0972c3d4439a264d": {
- "describe": {
- "columns": [],
- "nullable": [],
- "parameters": {
- "Left": [
- "Text",
- "Text",
- "Text"
- ]
- }
- },
- "query": "INSERT INTO session (id, user_agent, metadata) VALUES ($1, $2, $3)"
- },
- "e95322a8e2ae3b93f1e974b24c0b81803f1e9ec9e8ebbf15cafddfc1c5a028ed": {
- "describe": {
- "columns": [
- {
- "name": "package",
- "ordinal": 0,
- "type_info": "Text"
- },
- {
- "name": "interface",
- "ordinal": 1,
- "type_info": "Text"
- },
- {
- "name": "key",
- "ordinal": 2,
- "type_info": "Bytea"
- },
- {
- "name": "tor_key?",
- "ordinal": 3,
- "type_info": "Bytea"
- }
- ],
- "nullable": [
- false,
- false,
- false,
- false
- ],
- "parameters": {
- "Left": [
- "Text"
- ]
- }
- },
- "query": "\n SELECT\n network_keys.package,\n network_keys.interface,\n network_keys.key,\n tor.key AS \"tor_key?\"\n FROM\n network_keys\n LEFT JOIN\n tor\n ON\n network_keys.package = tor.package\n AND\n network_keys.interface = tor.interface\n WHERE\n network_keys.package = $1\n "
- },
- "eb750adaa305bdbf3c5b70aaf59139c7b7569602adb58f2d6b3a94da4f167b0a": {
- "describe": {
- "columns": [],
- "nullable": [],
- "parameters": {
- "Left": [
- "Int4"
- ]
- }
- },
- "query": "DELETE FROM notifications WHERE id < $1"
- },
- "ecc765d8205c0876956f95f76944ac6a5f34dd820c4073b7728c7067aab9fded": {
- "describe": {
- "columns": [
- {
- "name": "id",
- "ordinal": 0,
- "type_info": "Int4"
- }
- ],
- "nullable": [
- false
- ],
- "parameters": {
- "Left": [
- "Text",
- "Text",
- "Text",
- "Text"
- ]
- }
- },
- "query": "INSERT INTO cifs_shares (hostname, path, username, password) VALUES ($1, $2, $3, $4) RETURNING id"
- },
- "f6d1c5ef0f9d9577bea8382318967b9deb46da75788c7fe6082b43821c22d556": {
- "describe": {
- "columns": [],
- "nullable": [],
- "parameters": {
- "Left": [
- "Text",
- "Text",
- "Text"
- ]
- }
- },
- "query": "INSERT INTO ssh_keys (fingerprint, openssh_pubkey, created_at) VALUES ($1, $2, $3)"
- },
- "f7d2dae84613bcef330f7403352cc96547f3f6dbec11bf2eadfaf53ad8ab51b5": {
- "describe": {
- "columns": [
- {
- "name": "network_key",
- "ordinal": 0,
- "type_info": "Bytea"
- }
- ],
- "nullable": [
- false
- ],
- "parameters": {
- "Left": []
- }
- },
- "query": "SELECT network_key FROM account WHERE id = 0"
- },
- "fe6e4f09f3028e5b6b6259e86cbad285680ce157aae9d7837ac020c8b2945e7f": {
- "describe": {
- "columns": [
- {
- "name": "id",
- "ordinal": 0,
- "type_info": "Int4"
- },
- {
- "name": "password",
- "ordinal": 1,
- "type_info": "Text"
- },
- {
- "name": "tor_key",
- "ordinal": 2,
- "type_info": "Bytea"
- },
- {
- "name": "server_id",
- "ordinal": 3,
- "type_info": "Text"
- },
- {
- "name": "hostname",
- "ordinal": 4,
- "type_info": "Text"
- },
- {
- "name": "network_key",
- "ordinal": 5,
- "type_info": "Bytea"
- },
- {
- "name": "root_ca_key_pem",
- "ordinal": 6,
- "type_info": "Text"
- },
- {
- "name": "root_ca_cert_pem",
- "ordinal": 7,
- "type_info": "Text"
- }
- ],
- "nullable": [
- false,
- false,
- true,
- true,
- true,
- false,
- false,
- false
- ],
- "parameters": {
- "Left": []
- }
- },
- "query": "SELECT * FROM account WHERE id = 0"
- }
-}
\ No newline at end of file
diff --git a/backend/src/account.rs b/backend/src/account.rs
index daae7bee7..1f8d86e91 100644
--- a/backend/src/account.rs
+++ b/backend/src/account.rs
@@ -1,5 +1,5 @@
-use ed25519_dalek::{ExpandedSecretKey, SecretKey};
-use models::ResultExt;
+use digest::Digest;
+use ed25519_dalek::SecretKey;
use openssl::pkey::{PKey, Private};
use openssl::x509::X509;
use sqlx::PgExecutor;
@@ -7,7 +7,8 @@ use sqlx::PgExecutor;
use crate::hostname::{generate_hostname, generate_id, Hostname};
use crate::net::keys::Key;
use crate::net::ssl::{generate_key, make_root_cert};
-use crate::Error;
+use crate::prelude::*;
+use crate::util::crypto::ed25519_expand_key;
fn hash_password(password: &str) -> Result {
argon2::hash_encoded(
@@ -51,13 +52,23 @@ impl AccountInfo {
let server_id = r.server_id.unwrap_or_else(generate_id);
let hostname = r.hostname.map(Hostname).unwrap_or_else(generate_hostname);
let password = r.password;
- let network_key = SecretKey::from_bytes(&r.network_key)?;
+ let network_key = SecretKey::try_from(r.network_key).map_err(|e| {
+ Error::new(
+ eyre!("expected vec of len 32, got len {}", e.len()),
+ ErrorKind::ParseDbField,
+ )
+ })?;
let tor_key = if let Some(k) = &r.tor_key {
- ExpandedSecretKey::from_bytes(k)?
+ <[u8; 64]>::try_from(&k[..]).map_err(|_| {
+ Error::new(
+ eyre!("expected vec of len 64, got len {}", k.len()),
+ ErrorKind::ParseDbField,
+ )
+ })?
} else {
- ExpandedSecretKey::from(&network_key)
+ ed25519_expand_key(&network_key)
};
- let key = Key::from_pair(None, network_key.to_bytes(), tor_key.to_bytes());
+ let key = Key::from_pair(None, network_key, tor_key);
let root_ca_key = PKey::private_key_from_pem(r.root_ca_key_pem.as_bytes())?;
let root_ca_cert = X509::from_pem(r.root_ca_cert_pem.as_bytes())?;
diff --git a/backend/src/action.rs b/backend/src/action.rs
index 07fe1759b..3223aaa86 100644
--- a/backend/src/action.rs
+++ b/backend/src/action.rs
@@ -134,7 +134,7 @@ pub async fn action(
let manifest = ctx
.db
.peek()
- .await?
+ .await
.as_package_data()
.as_idx(&pkg_id)
.or_not_found(&pkg_id)?
diff --git a/backend/src/auth.rs b/backend/src/auth.rs
index 132c80ef8..823480fd3 100644
--- a/backend/src/auth.rs
+++ b/backend/src/auth.rs
@@ -160,7 +160,7 @@ pub async fn login(
) -> Result<(), Error> {
let password = password.unwrap_or_default().decrypt(&ctx)?;
let mut handle = ctx.secret_store.acquire().await?;
- check_password_against_db(&mut handle, &password).await?;
+ check_password_against_db(handle.as_mut(), &password).await?;
let hash_token = HashSessionToken::new();
let user_agent = req.headers.get("user-agent").and_then(|h| h.to_str().ok());
@@ -172,7 +172,7 @@ pub async fn login(
user_agent,
metadata,
)
- .execute(&mut handle)
+ .execute(handle.as_mut())
.await?;
res.headers.insert(
"set-cookie",
@@ -263,7 +263,7 @@ pub async fn list(
sessions: sqlx::query!(
"SELECT * FROM session WHERE logged_out IS NULL OR logged_out > CURRENT_TIMESTAMP"
)
- .fetch_all(&mut ctx.secret_store.acquire().await?)
+ .fetch_all(ctx.secret_store.acquire().await?.as_mut())
.await?
.into_iter()
.map(|row| {
diff --git a/backend/src/backup/backup_bulk.rs b/backend/src/backup/backup_bulk.rs
index 5bab4bb78..21eedbaf2 100644
--- a/backend/src/backup/backup_bulk.rs
+++ b/backend/src/backup/backup_bulk.rs
@@ -56,16 +56,16 @@ pub async fn backup_all(
package_ids: Option>,
#[arg] password: crate::auth::PasswordType,
) -> Result<(), Error> {
- let db = ctx.db.peek().await?;
+ let db = ctx.db.peek().await;
let old_password_decrypted = old_password
.as_ref()
.unwrap_or(&password)
.clone()
.decrypt(&ctx)?;
let password = password.decrypt(&ctx)?;
- check_password_against_db(&mut ctx.secret_store.acquire().await?, &password).await?;
+ check_password_against_db(ctx.secret_store.acquire().await?.as_mut(), &password).await?;
let fs = target_id
- .load(&mut ctx.secret_store.acquire().await?)
+ .load(ctx.secret_store.acquire().await?.as_mut())
.await?;
let mut backup_guard = BackupMountGuard::mount(
TmpMountGuard::mount(&fs, ReadWrite).await?,
@@ -265,7 +265,7 @@ async fn perform_backup(
}
}
- let ui = ctx.db.peek().await?.into_ui().de()?;
+ let ui = ctx.db.peek().await.into_ui().de()?;
let mut os_backup_file = AtomicFile::new(
backup_guard.lock().await.as_ref().join("os-backup.cbor"),
diff --git a/backend/src/backup/mod.rs b/backend/src/backup/mod.rs
index 670c01c29..2f3f9bd8f 100644
--- a/backend/src/backup/mod.rs
+++ b/backend/src/backup/mod.rs
@@ -134,7 +134,7 @@ impl BackupActions {
let marketplace_url = ctx
.db
.peek()
- .await?
+ .await
.as_package_data()
.as_idx(&pkg_id)
.or_not_found(pkg_id)?
diff --git a/backend/src/backup/restore.rs b/backend/src/backup/restore.rs
index ac8d07f48..46d0b9036 100644
--- a/backend/src/backup/restore.rs
+++ b/backend/src/backup/restore.rs
@@ -52,7 +52,7 @@ pub async fn restore_packages_rpc(
#[arg] password: String,
) -> Result<(), Error> {
let fs = target_id
- .load(&mut ctx.secret_store.acquire().await?)
+ .load(ctx.secret_store.acquire().await?.as_mut())
.await?;
let backup_guard =
BackupMountGuard::mount(TmpMountGuard::mount(&fs, ReadWrite).await?, &password).await?;
@@ -310,7 +310,7 @@ async fn assure_restoring(
let mut insert_packages = BTreeMap::new();
for id in ids {
- let peek = ctx.db.peek().await?;
+ let peek = ctx.db.peek().await;
let model = peek.as_package_data().as_idx(&id);
@@ -402,7 +402,7 @@ async fn restore_package<'a>(
iface.to_string(),
k,
)
- .execute(&mut secrets_tx).await?;
+ .execute(secrets_tx.as_mut()).await?;
}
// DEPRECATED
for (iface, key) in metadata.tor_keys {
@@ -413,7 +413,7 @@ async fn restore_package<'a>(
iface.to_string(),
k,
)
- .execute(&mut secrets_tx).await?;
+ .execute(secrets_tx.as_mut()).await?;
}
secrets_tx.commit().await?;
drop(secrets);
diff --git a/backend/src/backup/target/mod.rs b/backend/src/backup/target/mod.rs
index 80c4a59c6..93e56c2d3 100644
--- a/backend/src/backup/target/mod.rs
+++ b/backend/src/backup/target/mod.rs
@@ -142,7 +142,7 @@ pub async fn list(
let mut sql_handle = ctx.secret_store.acquire().await?;
let (disks_res, cifs) = tokio::try_join!(
crate::disk::util::list(&ctx.os_partitions),
- cifs::list(&mut sql_handle),
+ cifs::list(sql_handle.as_mut()),
)?;
Ok(disks_res
.into_iter()
@@ -233,7 +233,7 @@ pub async fn info(
let guard = BackupMountGuard::mount(
TmpMountGuard::mount(
&target_id
- .load(&mut ctx.secret_store.acquire().await?)
+ .load(ctx.secret_store.acquire().await?.as_mut())
.await?,
ReadWrite,
)
@@ -271,7 +271,7 @@ pub async fn mount(
TmpMountGuard::mount(
&target_id
.clone()
- .load(&mut ctx.secret_store.acquire().await?)
+ .load(ctx.secret_store.acquire().await?.as_mut())
.await?,
ReadWrite,
)
diff --git a/backend/src/bins/mod.rs b/backend/src/bins/mod.rs
index 76329e094..e131d22c4 100644
--- a/backend/src/bins/mod.rs
+++ b/backend/src/bins/mod.rs
@@ -5,6 +5,8 @@ pub mod avahi_alias;
pub mod deprecated;
#[cfg(feature = "cli")]
pub mod start_cli;
+#[cfg(feature = "js_engine")]
+pub mod start_deno;
#[cfg(feature = "daemon")]
pub mod start_init;
#[cfg(feature = "sdk")]
@@ -16,6 +18,8 @@ fn select_executable(name: &str) -> Option {
match name {
#[cfg(feature = "avahi-alias")]
"avahi-alias" => Some(avahi_alias::main),
+ #[cfg(feature = "js_engine")]
+ "start-deno" => Some(start_deno::main),
#[cfg(feature = "cli")]
"start-cli" => Some(start_cli::main),
#[cfg(feature = "sdk")]
diff --git a/backend/src/bins/start_deno.rs b/backend/src/bins/start_deno.rs
new file mode 100644
index 000000000..1a68decfc
--- /dev/null
+++ b/backend/src/bins/start_deno.rs
@@ -0,0 +1,145 @@
+use clap::Arg;
+use rpc_toolkit::command;
+use rpc_toolkit::run_cli;
+use rpc_toolkit::yajrc::RpcError;
+use serde_json::Value;
+
+use crate::context::CliContext;
+use crate::procedure::js_scripts::ExecuteArgs;
+use crate::s9pk::manifest::PackageId;
+use crate::util::logger::EmbassyLogger;
+use crate::util::serde::{display_serializable, parse_stdin_deserializable};
+use crate::version::{Current, VersionT};
+use crate::Error;
+
+lazy_static::lazy_static! {
+ static ref VERSION_STRING: String = Current::new().semver().to_string();
+}
+
+#[command(subcommands(execute, sandbox))]
+fn deno_api() -> Result<(), Error> {
+ Ok(())
+}
+
+#[command(cli_only, display(display_serializable))]
+async fn execute(
+ #[arg(stdin, parse(parse_stdin_deserializable))] arg: ExecuteArgs,
+) -> Result, Error> {
+ let ExecuteArgs {
+ procedure,
+ directory,
+ pkg_id,
+ pkg_version,
+ name,
+ volumes,
+ input,
+ } = arg;
+ PackageLogger::init(&pkg_id);
+ procedure
+ .execute_impl(&directory, &pkg_id, &pkg_version, name, &volumes, input)
+ .await
+}
+#[command(cli_only, display(display_serializable))]
+async fn sandbox(
+ #[arg(stdin, parse(parse_stdin_deserializable))] arg: ExecuteArgs,
+) -> Result, Error> {
+ let ExecuteArgs {
+ procedure,
+ directory,
+ pkg_id,
+ pkg_version,
+ name,
+ volumes,
+ input,
+ } = arg;
+ PackageLogger::init(&pkg_id);
+ procedure
+ .sandboxed_impl(&directory, &pkg_id, &pkg_version, &volumes, input, name)
+ .await
+}
+
+use tracing::Subscriber;
+use tracing_subscriber::util::SubscriberInitExt;
+
+#[derive(Clone)]
+struct PackageLogger {}
+
+impl PackageLogger {
+ fn base_subscriber(id: &PackageId) -> impl Subscriber {
+ use tracing_error::ErrorLayer;
+ use tracing_subscriber::prelude::*;
+ use tracing_subscriber::{fmt, EnvFilter};
+
+ let filter_layer = EnvFilter::builder()
+ .with_default_directive(
+ format!("{}=info", std::module_path!().split("::").next().unwrap())
+ .parse()
+ .unwrap(),
+ )
+ .from_env_lossy();
+ let fmt_layer = fmt::layer().with_writer(std::io::stderr).with_target(true);
+ let journald_layer = tracing_journald::layer()
+ .unwrap()
+ .with_syslog_identifier(format!("{id}.embassy"));
+
+ let sub = tracing_subscriber::registry()
+ .with(filter_layer)
+ .with(fmt_layer)
+ .with(journald_layer)
+ .with(ErrorLayer::default());
+
+ sub
+ }
+ pub fn init(id: &PackageId) -> Self {
+ Self::base_subscriber(id).init();
+ color_eyre::install().unwrap_or_else(|_| tracing::warn!("tracing too many times"));
+
+ Self {}
+ }
+}
+
+fn inner_main() -> Result<(), Error> {
+ run_cli!({
+ command: deno_api,
+ app: app => app
+ .name("StartOS Deno Executor")
+ .version(&**VERSION_STRING)
+ .arg(
+ clap::Arg::with_name("config")
+ .short('c')
+ .long("config")
+ .takes_value(true),
+ ),
+ context: matches => {
+ CliContext::init(matches)?
+ },
+ exit: |e: RpcError| {
+ match e.data {
+ Some(Value::String(s)) => eprintln!("{}: {}", e.message, s),
+ Some(Value::Object(o)) => if let Some(Value::String(s)) = o.get("details") {
+ eprintln!("{}: {}", e.message, s);
+ if let Some(Value::String(s)) = o.get("debug") {
+ tracing::debug!("{}", s)
+ }
+ }
+ Some(a) => eprintln!("{}: {}", e.message, a),
+ None => eprintln!("{}", e.message),
+ }
+
+ std::process::exit(e.code);
+ }
+ });
+ Ok(())
+}
+
+pub fn main() {
+ match inner_main() {
+ Ok(_) => (),
+ Err(e) => {
+ eprintln!("{}", e.source);
+ tracing::debug!("{:?}", e.source);
+ drop(e.source);
+ std::process::exit(e.kind as i32)
+ }
+ }
+}
diff --git a/backend/src/bins/start_init.rs b/backend/src/bins/start_init.rs
index 5fdf10c3b..a2b16cf78 100644
--- a/backend/src/bins/start_init.rs
+++ b/backend/src/bins/start_init.rs
@@ -11,6 +11,7 @@ use crate::context::{DiagnosticContext, InstallContext, SetupContext};
use crate::disk::fsck::RepairStrategy;
use crate::disk::main::DEFAULT_PASSWORD;
use crate::disk::REPAIR_DISK_PATH;
+use crate::firmware::update_firmware;
use crate::init::STANDBY_MODE_PATH;
use crate::net::web_server::WebServer;
use crate::shutdown::Shutdown;
@@ -19,7 +20,14 @@ use crate::util::Invoke;
use crate::{Error, ErrorKind, ResultExt, OS_ARCH};
#[instrument(skip_all)]
-async fn setup_or_init(cfg_path: Option) -> Result<(), Error> {
+async fn setup_or_init(cfg_path: Option) -> Result, Error> {
+ if update_firmware().await?.0 {
+ return Ok(Some(Shutdown {
+ export_args: None,
+ restart: true,
+ }));
+ }
+
Command::new("ln")
.arg("-sf")
.arg("/usr/lib/embassy/scripts/fake-apt")
@@ -146,7 +154,7 @@ async fn setup_or_init(cfg_path: Option) -> Result<(), Error> {
crate::init::init(&cfg).await?;
}
- Ok(())
+ Ok(None)
}
async fn run_script_if_exists>(path: P) {
@@ -180,46 +188,47 @@ async fn inner_main(cfg_path: Option) -> Result, Error
run_script_if_exists("/media/embassy/config/preinit.sh").await;
- let res = if let Err(e) = setup_or_init(cfg_path.clone()).await {
- async move {
- tracing::error!("{}", e.source);
- tracing::debug!("{}", e.source);
- crate::sound::BEETHOVEN.play().await?;
+ let res = match setup_or_init(cfg_path.clone()).await {
+ Err(e) => {
+ async move {
+ tracing::error!("{}", e.source);
+ tracing::debug!("{}", e.source);
+ crate::sound::BEETHOVEN.play().await?;
- let ctx = DiagnosticContext::init(
- cfg_path,
- if tokio::fs::metadata("/media/embassy/config/disk.guid")
- .await
- .is_ok()
- {
- Some(Arc::new(
- tokio::fs::read_to_string("/media/embassy/config/disk.guid") // unique identifier for volume group - keeps track of the disk that goes with your embassy
- .await?
- .trim()
- .to_owned(),
- ))
- } else {
- None
- },
- e,
- )
- .await?;
+ let ctx = DiagnosticContext::init(
+ cfg_path,
+ if tokio::fs::metadata("/media/embassy/config/disk.guid")
+ .await
+ .is_ok()
+ {
+ Some(Arc::new(
+ tokio::fs::read_to_string("/media/embassy/config/disk.guid") // unique identifier for volume group - keeps track of the disk that goes with your embassy
+ .await?
+ .trim()
+ .to_owned(),
+ ))
+ } else {
+ None
+ },
+ e,
+ )
+ .await?;
- let server = WebServer::diagnostic(
- SocketAddr::new(Ipv6Addr::UNSPECIFIED.into(), 80),
- ctx.clone(),
- )
- .await?;
+ let server = WebServer::diagnostic(
+ SocketAddr::new(Ipv6Addr::UNSPECIFIED.into(), 80),
+ ctx.clone(),
+ )
+ .await?;
- let shutdown = ctx.shutdown.subscribe().recv().await.unwrap();
+ let shutdown = ctx.shutdown.subscribe().recv().await.unwrap();
- server.shutdown().await;
+ server.shutdown().await;
- Ok(shutdown)
+ Ok(shutdown)
+ }
+ .await
}
- .await
- } else {
- Ok(None)
+ Ok(s) => Ok(s),
};
run_script_if_exists("/media/embassy/config/postinit.sh").await;
diff --git a/backend/src/bins/startd.rs b/backend/src/bins/startd.rs
index e6c272803..a773dd99a 100644
--- a/backend/src/bins/startd.rs
+++ b/backend/src/bins/startd.rs
@@ -16,7 +16,7 @@ use crate::{Error, ErrorKind, ResultExt};
#[instrument(skip_all)]
async fn inner_main(cfg_path: Option) -> Result, Error> {
- let (rpc_ctx, server, shutdown) = {
+ let (rpc_ctx, server, shutdown) = async {
let rpc_ctx = RpcContext::init(
cfg_path,
Arc::new(
@@ -91,8 +91,9 @@ async fn inner_main(cfg_path: Option) -> Result, Error
sig_handler.abort();
- (rpc_ctx, server, shutdown)
- };
+ Ok::<_, Error>((rpc_ctx, server, shutdown))
+ }
+ .await?;
server.shutdown().await;
rpc_ctx.shutdown().await?;
diff --git a/backend/src/config/mod.rs b/backend/src/config/mod.rs
index 2d3a30fd7..8224860a5 100644
--- a/backend/src/config/mod.rs
+++ b/backend/src/config/mod.rs
@@ -14,9 +14,9 @@ use rpc_toolkit::command;
use tracing::instrument;
use crate::context::RpcContext;
-use crate::db::model::CurrentDependencies;
+
use crate::prelude::*;
-use crate::s9pk::manifest::{Manifest, PackageId};
+use crate::s9pk::manifest::{PackageId};
use crate::util::display_none;
use crate::util::serde::{display_serializable, parse_stdin_deserializable, IoFormat};
use crate::Error;
@@ -167,7 +167,7 @@ pub async fn get(
#[arg(long = "format")]
format: Option,
) -> Result {
- let db = ctx.db.peek().await?;
+ let db = ctx.db.peek().await;
let manifest = db
.as_package_data()
.as_idx(&id)
@@ -256,7 +256,7 @@ pub async fn configure(
id: &PackageId,
configure_context: ConfigureContext,
) -> Result, Error> {
- let db = ctx.db.peek().await?;
+ let db = ctx.db.peek().await;
let package = db
.as_package_data()
.as_idx(id)
diff --git a/backend/src/config/spec.rs b/backend/src/config/spec.rs
index b11cefaf2..35512d47a 100644
--- a/backend/src/config/spec.rs
+++ b/backend/src/config/spec.rs
@@ -1696,7 +1696,6 @@ impl TorAddressPointer {
.db
.peek()
.await
- .map_err(|e| ConfigurationError::SystemError(e))?
.as_package_data()
.as_idx(&self.package_id)
.and_then(|pde| pde.as_installed())
@@ -1739,7 +1738,6 @@ impl LanAddressPointer {
.db
.peek()
.await
- .map_err(|e| ConfigurationError::SystemError(e))?
.as_package_data()
.as_idx(&self.package_id)
.and_then(|pde| pde.as_installed())
@@ -1775,11 +1773,7 @@ impl ConfigPointer {
Ok(self.select(&Value::Object(cfg.clone())))
} else {
let id = &self.package_id;
- let db = ctx
- .db
- .peek()
- .await
- .map_err(|e| ConfigurationError::SystemError(e))?;
+ let db = ctx.db.peek().await;
let manifest = db.as_package_data().as_idx(id).map(|pde| pde.as_manifest());
let cfg_actions = manifest.and_then(|m| m.as_config().transpose_ref());
if let (Some(manifest), Some(cfg_actions)) = (manifest, cfg_actions) {
@@ -1900,10 +1894,11 @@ impl TorKeyPointer {
));
}
let key = Key::for_interface(
- &mut secrets
+ secrets
.acquire()
.await
- .map_err(|e| ConfigurationError::SystemError(e.into()))?,
+ .map_err(|e| ConfigurationError::SystemError(e.into()))?
+ .as_mut(),
Some((self.package_id.clone(), self.interface.clone())),
)
.await
diff --git a/backend/src/context/cli.rs b/backend/src/context/cli.rs
index 25adecdde..020b73459 100644
--- a/backend/src/context/cli.rs
+++ b/backend/src/context/cli.rs
@@ -6,8 +6,7 @@ use std::sync::Arc;
use clap::ArgMatches;
use color_eyre::eyre::eyre;
-use cookie::Cookie;
-use cookie_store::CookieStore;
+use cookie_store::{CookieStore, RawCookie};
use josekit::jwk::Jwk;
use reqwest::Proxy;
use reqwest_cookie_store::CookieStoreMutex;
@@ -111,7 +110,10 @@ impl CliContext {
};
if let Ok(local) = std::fs::read_to_string(LOCAL_AUTH_COOKIE_PATH) {
store
- .insert_raw(&Cookie::new("local", local), &"http://localhost".parse()?)
+ .insert_raw(
+ &RawCookie::new("local", local),
+ &"http://localhost".parse()?,
+ )
.with_kind(crate::ErrorKind::Network)?;
}
store
diff --git a/backend/src/context/rpc.rs b/backend/src/context/rpc.rs
index f01ec2ce7..abb122d6e 100644
--- a/backend/src/context/rpc.rs
+++ b/backend/src/context/rpc.rs
@@ -22,6 +22,7 @@ use crate::account::AccountInfo;
use crate::core::rpc_continuations::{RequestGuid, RestHandler, RpcContinuation};
use crate::db::model::{CurrentDependents, Database, PackageDataEntryMatchModelRef};
use crate::db::prelude::PatchDbExt;
+use crate::dependencies::compute_dependency_config_errs;
use crate::disk::OsPartitionInfo;
use crate::init::init_postgres;
use crate::install::cleanup::{cleanup_failed, uninstall};
@@ -155,8 +156,7 @@ impl RpcContext {
.unwrap_or(SocketAddr::from(([127, 0, 0, 1], 9051))),
tor_proxy,
base.dns_bind
- .as_ref()
- .map(|v| v.as_slice())
+ .as_deref()
.unwrap_or(&[SocketAddr::from(([127, 0, 0, 1], 53))]),
SslManager::new(&account)?,
&account.hostname,
@@ -217,11 +217,8 @@ impl RpcContext {
});
let res = Self(seed.clone());
- res.cleanup().await?;
+ res.cleanup_and_initialize().await?;
tracing::info!("Cleaned up transient states");
- let peeked = res.db.peek().await?;
- res.managers.init(res.clone(), peeked).await?;
- tracing::info!("Initialized Package Managers");
Ok(res)
}
@@ -236,7 +233,7 @@ impl RpcContext {
}
#[instrument(skip(self))]
- pub async fn cleanup(&self) -> Result<(), Error> {
+ pub async fn cleanup_and_initialize(&self) -> Result<(), Error> {
self.db
.mutate(|f| {
let mut current_dependents = f
@@ -278,9 +275,10 @@ impl RpcContext {
Ok(())
})
.await?;
- let peek = self.db.peek().await?;
+
+ let peek = self.db.peek().await;
+
for (package_id, package) in peek.as_package_data().as_entries()?.into_iter() {
- let package = package.clone();
let action = match package.as_match() {
PackageDataEntryMatchModelRef::Installing(_)
| PackageDataEntryMatchModelRef::Restoring(_)
@@ -288,7 +286,12 @@ impl RpcContext {
cleanup_failed(self, &package_id).await
}
PackageDataEntryMatchModelRef::Removing(_) => {
- uninstall(self, &mut self.secret_store.acquire().await?, &package_id).await
+ uninstall(
+ self,
+ self.secret_store.acquire().await?.as_mut(),
+ &package_id,
+ )
+ .await
}
PackageDataEntryMatchModelRef::Installed(m) => {
let version = m.as_manifest().as_version().clone().de()?;
@@ -298,7 +301,7 @@ impl RpcContext {
&self.datadir,
&package_id,
&version,
- &volume_id,
+ volume_id,
))
.with_kind(ErrorKind::Filesystem)?;
if tokio::fs::metadata(&tmp_path).await.is_ok() {
@@ -314,7 +317,8 @@ impl RpcContext {
tracing::debug!("{:?}", e);
}
}
- self.db
+ let peek = self
+ .db
.mutate(|v| {
for (_, pde) in v.as_package_data_mut().as_entries_mut()? {
let status = pde
@@ -329,9 +333,49 @@ impl RpcContext {
MainStatus::Stopped
})?;
}
+ Ok(v.clone())
+ })
+ .await?;
+ self.managers.init(self.clone(), peek.clone()).await?;
+ tracing::info!("Initialized Package Managers");
+
+ let mut all_dependency_config_errs = BTreeMap::new();
+ for (package_id, package) in peek.as_package_data().as_entries()?.into_iter() {
+ let package = package.clone();
+ if let Some(current_dependencies) = package
+ .as_installed()
+ .and_then(|x| x.as_current_dependencies().de().ok())
+ {
+ let manifest = package.as_manifest().de()?;
+ all_dependency_config_errs.insert(
+ package_id.clone(),
+ compute_dependency_config_errs(
+ self,
+ &peek,
+ &manifest,
+ ¤t_dependencies,
+ &Default::default(),
+ )
+ .await?,
+ );
+ }
+ }
+ self.db
+ .mutate(|v| {
+ for (package_id, errs) in all_dependency_config_errs {
+ if let Some(config_errors) = v
+ .as_package_data_mut()
+ .as_idx_mut(&package_id)
+ .and_then(|pde| pde.as_installed_mut())
+ .map(|i| i.as_status_mut().as_dependency_config_errors_mut())
+ {
+ config_errors.ser(&errs)?;
+ }
+ }
Ok(())
})
.await?;
+
Ok(())
}
@@ -389,7 +433,7 @@ impl RpcContext {
}
impl AsRef for RpcContext {
fn as_ref(&self) -> &Jwk {
- &*CURRENT_SECRET
+ &CURRENT_SECRET
}
}
impl Context for RpcContext {}
@@ -403,7 +447,7 @@ impl Deref for RpcContext {
tracing_error::SpanTrace::capture()
);
}
- &*self.0
+ &self.0
}
}
impl Drop for RpcContext {
diff --git a/backend/src/context/sdk.rs b/backend/src/context/sdk.rs
index 87adaee1f..7ba7a6bfa 100644
--- a/backend/src/context/sdk.rs
+++ b/backend/src/context/sdk.rs
@@ -7,8 +7,8 @@ use rpc_toolkit::Context;
use serde::Deserialize;
use tracing::instrument;
+use crate::prelude::*;
use crate::util::config::{load_config_from_paths, local_config_path};
-use crate::{Error, ResultExt};
#[derive(Debug, Default, Deserialize)]
#[serde(rename_all = "kebab-case")]
@@ -50,21 +50,21 @@ impl SdkContext {
}
/// BLOCKING
#[instrument(skip_all)]
- pub fn developer_key(&self) -> Result {
+ pub fn developer_key(&self) -> Result {
if !self.developer_key_path.exists() {
- return Err(Error::new(eyre!("Developer Key does not exist! Please run `embassy-sdk init` before running this command."), crate::ErrorKind::Uninitialized));
+ return Err(Error::new(eyre!("Developer Key does not exist! Please run `start-sdk init` before running this command."), crate::ErrorKind::Uninitialized));
}
let pair = ::from_pkcs8_pem(
&std::fs::read_to_string(&self.developer_key_path)?,
)
.with_kind(crate::ErrorKind::Pem)?;
- let secret = ed25519_dalek::SecretKey::from_bytes(&pair.secret_key[..])?;
- let public = if let Some(public) = pair.public_key {
- ed25519_dalek::PublicKey::from_bytes(&public[..])?
- } else {
- (&secret).into()
- };
- Ok(ed25519_dalek::Keypair { secret, public })
+ let secret = ed25519_dalek::SecretKey::try_from(&pair.secret_key[..]).map_err(|_| {
+ Error::new(
+ eyre!("pkcs8 key is of incorrect length"),
+ ErrorKind::OpenSsl,
+ )
+ })?;
+ Ok(secret.into())
}
}
impl std::ops::Deref for SdkContext {
diff --git a/backend/src/control.rs b/backend/src/control.rs
index a84fe7283..58e39ac14 100644
--- a/backend/src/control.rs
+++ b/backend/src/control.rs
@@ -12,7 +12,7 @@ use crate::Error;
#[command(display(display_none), metadata(sync_db = true))]
#[instrument(skip_all)]
pub async fn start(#[context] ctx: RpcContext, #[arg] id: PackageId) -> Result<(), Error> {
- let peek = ctx.db.peek().await?;
+ let peek = ctx.db.peek().await;
let version = peek
.as_package_data()
.as_idx(&id)
@@ -27,14 +27,15 @@ pub async fn start(#[context] ctx: RpcContext, #[arg] id: PackageId) -> Result<(
.get(&(id, version))
.await
.ok_or_else(|| Error::new(eyre!("Manager not found"), crate::ErrorKind::InvalidRequest))?
- .start();
+ .start()
+ .await;
Ok(())
}
#[command(display(display_none), metadata(sync_db = true))]
pub async fn stop(#[context] ctx: RpcContext, #[arg] id: PackageId) -> Result {
- let peek = ctx.db.peek().await?;
+ let peek = ctx.db.peek().await;
let version = peek
.as_package_data()
.as_idx(&id)
@@ -62,14 +63,15 @@ pub async fn stop(#[context] ctx: RpcContext, #[arg] id: PackageId) -> Result Result<(), Error> {
- let peek = ctx.db.peek().await?;
+ let peek = ctx.db.peek().await;
let version = peek
.as_package_data()
.as_idx(&id)
@@ -83,7 +85,8 @@ pub async fn restart(#[context] ctx: RpcContext, #[arg] id: PackageId) -> Result
.get(&(id, version))
.await
.ok_or_else(|| Error::new(eyre!("Manager not found"), crate::ErrorKind::InvalidRequest))?
- .restart();
+ .restart()
+ .await;
Ok(())
}
diff --git a/backend/src/db/mod.rs b/backend/src/db/mod.rs
index 61f434493..03ad94338 100644
--- a/backend/src/db/mod.rs
+++ b/backend/src/db/mod.rs
@@ -37,7 +37,7 @@ async fn ws_handler<
session: Option<(HasValidSession, HashSessionToken)>,
ws_fut: WSFut,
) -> Result<(), Error> {
- let (dump, sub) = ctx.db.dump_and_sub().await?;
+ let (dump, sub) = ctx.db.dump_and_sub().await;
let mut stream = ws_fut
.await
.with_kind(ErrorKind::Network)?
@@ -82,6 +82,8 @@ async fn deal_with_messages(
mut sub: patch_db::Subscriber,
mut stream: WebSocketStream,
) -> Result<(), Error> {
+ let mut timer = tokio::time::interval(tokio::time::Duration::from_secs(5));
+
loop {
futures::select! {
_ = (&mut kill).fuse() => {
@@ -112,6 +114,13 @@ async fn deal_with_messages(
_ => (),
}
}
+ // This is trying to give a health checks to the home to keep the ui alive.
+ _ = timer.tick().fuse() => {
+ stream
+ .send(Message::Ping(vec![]))
+ .await
+ .with_kind(crate::ErrorKind::Network)?;
+ }
}
}
}
@@ -165,7 +174,7 @@ pub async fn subscribe(ctx: RpcContext, req: Request) -> Result Result<(), RpcError> {
Ok(())
}
@@ -177,20 +186,6 @@ pub enum RevisionsRes {
Dump(Dump),
}
-#[command(display(display_serializable))]
-pub async fn revisions(
- #[context] ctx: RpcContext,
- #[arg] since: u64,
- #[allow(unused_variables)]
- #[arg(long = "format")]
- format: Option,
-) -> Result {
- Ok(match ctx.db.sync(since).await? {
- Ok(revs) => RevisionsRes::Revisions(revs),
- Err(dump) => RevisionsRes::Dump(dump),
- })
-}
-
#[instrument(skip_all)]
async fn cli_dump(
ctx: CliContext,
@@ -198,7 +193,7 @@ async fn cli_dump(
path: Option,
) -> Result {
let dump = if let Some(path) = path {
- PatchDb::open(path).await?.dump().await?
+ PatchDb::open(path).await?.dump().await
} else {
rpc_toolkit::command_helpers::call_remote(
ctx,
@@ -226,7 +221,7 @@ pub async fn dump(
#[arg]
path: Option,
) -> Result {
- Ok(ctx.db.dump().await?)
+ Ok(ctx.db.dump().await)
}
fn apply_expr(input: jaq_core::Val, expr: &str) -> Result {
diff --git a/backend/src/db/model.rs b/backend/src/db/model.rs
index 5630884cf..3ff55a522 100644
--- a/backend/src/db/model.rs
+++ b/backend/src/db/model.rs
@@ -47,7 +47,7 @@ impl Database {
last_wifi_region: None,
eos_version_compat: Current::new().compat().clone(),
lan_address,
- tor_address: format!("http://{}", account.key.tor_address())
+ tor_address: format!("https://{}", account.key.tor_address())
.parse()
.unwrap(),
ip_info: BTreeMap::new(),
@@ -426,7 +426,7 @@ pub struct InstalledPackageInfo {
pub marketplace_url: Option,
#[serde(default)]
#[serde(with = "crate::util::serde::ed25519_pubkey")]
- pub developer_key: ed25519_dalek::PublicKey,
+ pub developer_key: ed25519_dalek::VerifyingKey,
pub manifest: Manifest,
pub last_backup: Option>,
pub dependency_info: BTreeMap,
@@ -483,6 +483,7 @@ pub struct StaticDependencyInfo {
#[serde(rename_all = "kebab-case")]
#[model = "Model"]
pub struct CurrentDependencyInfo {
+ #[serde(default)]
pub pointers: BTreeSet,
pub health_checks: BTreeSet,
}
diff --git a/backend/src/db/prelude.rs b/backend/src/db/prelude.rs
index 4fce5fbcb..922a47500 100644
--- a/backend/src/db/prelude.rs
+++ b/backend/src/db/prelude.rs
@@ -28,7 +28,7 @@ where
#[async_trait::async_trait]
pub trait PatchDbExt {
- async fn peek(&self) -> Result;
+ async fn peek(&self) -> DatabaseModel;
async fn mutate(
&self,
f: impl FnOnce(&mut DatabaseModel) -> Result + UnwindSafe + Send,
@@ -40,8 +40,8 @@ pub trait PatchDbExt {
}
#[async_trait::async_trait]
impl PatchDbExt for PatchDb {
- async fn peek(&self) -> Result {
- Ok(DatabaseModel::from(self.dump().await?.value))
+ async fn peek(&self) -> DatabaseModel {
+ DatabaseModel::from(self.dump().await.value)
}
async fn mutate(
&self,
diff --git a/backend/src/dependencies.rs b/backend/src/dependencies.rs
index 299518057..dfddecd93 100644
--- a/backend/src/dependencies.rs
+++ b/backend/src/dependencies.rs
@@ -170,7 +170,7 @@ pub async fn configure_logic(
ctx: RpcContext,
(pkg_id, dependency_id): (PackageId, PackageId),
) -> Result {
- let db = ctx.db.peek().await?;
+ let db = ctx.db.peek().await;
let pkg = db
.as_package_data()
.as_idx(&pkg_id)
diff --git a/backend/src/developer/mod.rs b/backend/src/developer/mod.rs
index 23d714875..8722a4a11 100644
--- a/backend/src/developer/mod.rs
+++ b/backend/src/developer/mod.rs
@@ -3,7 +3,8 @@ use std::io::Write;
use std::path::Path;
use ed25519::pkcs8::EncodePrivateKey;
-use ed25519_dalek::Keypair;
+use ed25519::PublicKeyBytes;
+use ed25519_dalek::{SigningKey, VerifyingKey};
use rpc_toolkit::command;
use tracing::instrument;
@@ -21,11 +22,11 @@ pub fn init(#[context] ctx: SdkContext) -> Result<(), Error> {
.with_ctx(|_| (crate::ErrorKind::Filesystem, parent.display().to_string()))?;
}
tracing::info!("Generating new developer key...");
- let keypair = Keypair::generate(&mut rand_old::thread_rng());
+ let secret = SigningKey::generate(&mut rand::thread_rng());
tracing::info!("Writing key to {}", ctx.developer_key_path.display());
let keypair_bytes = ed25519::KeypairBytes {
- secret_key: keypair.secret.to_bytes(),
- public_key: Some(keypair.public.to_bytes()),
+ secret_key: secret.to_bytes(),
+ public_key: Some(PublicKeyBytes(VerifyingKey::from(&secret).to_bytes())),
};
let mut dev_key_file = File::create(&ctx.developer_key_path)?;
dev_key_file.write_all(
diff --git a/backend/src/diagnostic.rs b/backend/src/diagnostic.rs
index 1d4c3bcf5..aad95a5e5 100644
--- a/backend/src/diagnostic.rs
+++ b/backend/src/diagnostic.rs
@@ -9,7 +9,6 @@ use crate::disk::repair;
use crate::init::SYSTEM_REBUILD_PATH;
use crate::logs::{fetch_logs, LogResponse, LogSource};
use crate::shutdown::Shutdown;
-use crate::system::SYSTEMD_UNIT;
use crate::util::display_none;
use crate::Error;
@@ -29,7 +28,7 @@ pub async fn logs(
#[arg] cursor: Option,
#[arg] before: bool,
) -> Result {
- Ok(fetch_logs(LogSource::Service(SYSTEMD_UNIT), limit, cursor, before).await?)
+ Ok(fetch_logs(LogSource::System, limit, cursor, before).await?)
}
#[command(display(display_none))]
@@ -42,8 +41,10 @@ pub fn exit(#[context] ctx: DiagnosticContext) -> Result<(), Error> {
pub fn restart(#[context] ctx: DiagnosticContext) -> Result<(), Error> {
ctx.shutdown
.send(Some(Shutdown {
- datadir: ctx.datadir.clone(),
- disk_guid: ctx.disk_guid.clone(),
+ export_args: ctx
+ .disk_guid
+ .clone()
+ .map(|guid| (guid, ctx.datadir.clone())),
restart: true,
}))
.expect("receiver dropped");
diff --git a/backend/src/disk/main.rs b/backend/src/disk/main.rs
index 48b392236..74f6db73c 100644
--- a/backend/src/disk/main.rs
+++ b/backend/src/disk/main.rs
@@ -126,6 +126,7 @@ pub async fn create_fs>(
Command::new("cryptsetup")
.arg("-q")
.arg("luksOpen")
+ .arg("--allow-discards")
.arg(format!("--key-file={}", PASSWORD_PATH))
.arg(format!("--keyfile-size={}", password.len()))
.arg(&blockdev_path)
diff --git a/backend/src/firmware.rs b/backend/src/firmware.rs
new file mode 100644
index 000000000..3ffb603fe
--- /dev/null
+++ b/backend/src/firmware.rs
@@ -0,0 +1,82 @@
+use std::path::Path;
+use std::process::Stdio;
+
+use async_compression::tokio::bufread::GzipDecoder;
+use tokio::fs::File;
+use tokio::io::{AsyncRead, AsyncWriteExt, BufReader};
+use tokio::process::Command;
+
+use crate::disk::fsck::RequiresReboot;
+use crate::prelude::*;
+use crate::util::Invoke;
+
+pub async fn update_firmware() -> Result {
+ let product_name = String::from_utf8(
+ Command::new("dmidecode")
+ .arg("-s")
+ .arg("system-product-name")
+ .invoke(ErrorKind::Firmware)
+ .await?,
+ )?
+ .trim()
+ .to_owned();
+ if product_name.is_empty() {
+ return Ok(RequiresReboot(false));
+ }
+ let firmware_dir = Path::new("/usr/lib/embassy/firmware").join(&product_name);
+ if tokio::fs::metadata(&firmware_dir).await.is_ok() {
+ let current_firmware = String::from_utf8(
+ Command::new("dmidecode")
+ .arg("-s")
+ .arg("bios-version")
+ .invoke(ErrorKind::Firmware)
+ .await?,
+ )?
+ .trim()
+ .to_owned();
+ if tokio::fs::metadata(firmware_dir.join(format!("{current_firmware}.rom.gz")))
+ .await
+ .is_err()
+ && tokio::fs::metadata(firmware_dir.join(format!("{current_firmware}.rom")))
+ .await
+ .is_err()
+ {
+ let mut firmware_read_dir = tokio::fs::read_dir(&firmware_dir).await?;
+ while let Some(entry) = firmware_read_dir.next_entry().await? {
+ let filename = entry.file_name().to_string_lossy().into_owned();
+ let rdr: Option> = if filename.ends_with(".rom.gz") {
+ Some(Box::new(GzipDecoder::new(BufReader::new(
+ File::open(entry.path()).await?,
+ ))))
+ } else if filename.ends_with(".rom") {
+ Some(Box::new(File::open(entry.path()).await?))
+ } else {
+ None
+ };
+ if let Some(mut rdr) = rdr {
+ let mut flashrom = Command::new("flashrom")
+ .arg("-p")
+ .arg("internal")
+ .arg("-w-")
+ .stdin(Stdio::piped())
+ .spawn()?;
+ let mut rom_dest = flashrom.stdin.take().or_not_found("stdin")?;
+ tokio::io::copy(&mut rdr, &mut rom_dest).await?;
+ rom_dest.flush().await?;
+ rom_dest.shutdown().await?;
+ drop(rom_dest);
+ let o = flashrom.wait_with_output().await?;
+ if !o.status.success() {
+ return Err(Error::new(
+ eyre!("{}", std::str::from_utf8(&o.stderr)?),
+ ErrorKind::Firmware,
+ ));
+ } else {
+ return Ok(RequiresReboot(true));
+ }
+ }
+ }
+ }
+ }
+ Ok(RequiresReboot(false))
+}
diff --git a/backend/src/init.rs b/backend/src/init.rs
index 8a5ae2484..b98a23921 100644
--- a/backend/src/init.rs
+++ b/backend/src/init.rs
@@ -20,6 +20,9 @@ use crate::middleware::auth::LOCAL_AUTH_COOKIE_PATH;
use crate::prelude::*;
use crate::sound::BEP;
use crate::system::time;
+use crate::util::cpupower::{
+ current_governor, get_available_governors, set_governor, GOVERNOR_PERFORMANCE,
+};
use crate::util::docker::{create_bridge_network, CONTAINER_DATADIR, CONTAINER_TOOL};
use crate::util::Invoke;
use crate::{Error, ARCH};
@@ -200,13 +203,8 @@ pub async fn init(cfg: &RpcContextConfig) -> Result {
let account = AccountInfo::load(&secret_store).await?;
let db = cfg.db(&account).await?;
- db.mutate(|d| {
- let model = d.de()?;
- d.ser(&model)
- })
- .await?;
tracing::info!("Opened PatchDB");
- let peek = db.peek().await?;
+ let peek = db.peek().await;
let mut server_info = peek.as_server_info().de()?;
// write to ca cert store
@@ -268,6 +266,11 @@ pub async fn init(cfg: &RpcContextConfig) -> Result {
if tokio::fs::metadata(&tmp_dir).await.is_err() {
tokio::fs::create_dir_all(&tmp_dir).await?;
}
+ let tmp_var = cfg.datadir().join(format!("package-data/tmp/var"));
+ if tokio::fs::metadata(&tmp_var).await.is_ok() {
+ tokio::fs::remove_dir_all(&tmp_var).await?;
+ }
+ crate::disk::mount::util::bind(&tmp_var, "/var/tmp", false).await?;
let tmp_docker = cfg
.datadir()
.join(format!("package-data/tmp/{CONTAINER_TOOL}"));
@@ -341,6 +344,23 @@ pub async fn init(cfg: &RpcContextConfig) -> Result {
.await?;
tracing::info!("Enabled Docker QEMU Emulation");
+ if current_governor()
+ .await?
+ .map(|g| &g != &GOVERNOR_PERFORMANCE)
+ .unwrap_or(false)
+ {
+ tracing::info!("Setting CPU Governor to \"{}\"", GOVERNOR_PERFORMANCE);
+ if get_available_governors()
+ .await?
+ .contains(&GOVERNOR_PERFORMANCE)
+ {
+ set_governor(&GOVERNOR_PERFORMANCE).await?;
+ tracing::info!("Set CPU Governor");
+ } else {
+ tracing::warn!("CPU Governor \"{}\" Not Available", GOVERNOR_PERFORMANCE)
+ }
+ }
+
let mut warn_time_not_synced = true;
for _ in 0..60 {
if check_time_is_synchronized().await? {
@@ -375,6 +395,12 @@ pub async fn init(cfg: &RpcContextConfig) -> Result {
crate::version::init(&db, &secret_store).await?;
+ db.mutate(|d| {
+ let model = d.de()?;
+ d.ser(&model)
+ })
+ .await?;
+
if should_rebuild {
match tokio::fs::remove_file(SYSTEM_REBUILD_PATH).await {
Ok(()) => Ok(()),
diff --git a/backend/src/install/cleanup.rs b/backend/src/install/cleanup.rs
index e47b7ca6b..9d87f63e9 100644
--- a/backend/src/install/cleanup.rs
+++ b/backend/src/install/cleanup.rs
@@ -62,7 +62,7 @@ pub async fn cleanup_failed(ctx: &RpcContext, id: &PackageId) -> Result<(), Erro
if let Some(version) = match ctx
.db
.peek()
- .await?
+ .await
.as_package_data()
.as_idx(id)
.or_not_found(id)?
@@ -141,7 +141,7 @@ pub async fn uninstall(ctx: &RpcContext, secrets: &mut Ex, id: &PackageId) -
where
for<'a> &'a mut Ex: Executor<'a, Database = Postgres>,
{
- let db = ctx.db.peek().await?;
+ let db = ctx.db.peek().await;
let entry = db
.as_package_data()
.as_idx(id)
diff --git a/backend/src/install/mod.rs b/backend/src/install/mod.rs
index a85c7c823..20f57764f 100644
--- a/backend/src/install/mod.rs
+++ b/backend/src/install/mod.rs
@@ -22,7 +22,7 @@ use serde_json::{json, Value};
use tokio::fs::{File, OpenOptions};
use tokio::io::{AsyncRead, AsyncSeek, AsyncSeekExt, AsyncWriteExt};
use tokio::process::Command;
-use tokio::sync::{oneshot, Mutex};
+use tokio::sync::oneshot;
use tokio_stream::wrappers::ReadDirStream;
use tracing::instrument;
@@ -64,7 +64,7 @@ pub const PKG_WASM_DIR: &str = "package-data/wasm";
#[command(display(display_serializable))]
pub async fn list(#[context] ctx: RpcContext) -> Result {
- Ok(ctx.db.peek().await?.as_package_data().as_entries()?
+ Ok(ctx.db.peek().await.as_package_data().as_entries()?
.iter()
.filter_map(|(id, pde)| {
let status = match pde.as_match() {
@@ -626,9 +626,10 @@ pub async fn uninstall(
let return_id = id.clone();
tokio::spawn(async move {
- if let Err(e) =
- async { cleanup::uninstall(&ctx, &mut ctx.secret_store.acquire().await?, &id).await }
- .await
+ if let Err(e) = async {
+ cleanup::uninstall(&ctx, ctx.secret_store.acquire().await?.as_mut(), &id).await
+ }
+ .await
{
let err_str = format!("Uninstall of {} Failed: {}", id, e);
tracing::error!("{}", err_str);
@@ -666,23 +667,11 @@ pub async fn download_install_s9pk(
) -> Result<(), Error> {
let pkg_id = &temp_manifest.id;
let version = &temp_manifest.version;
- let previous_state: Arc>> = Default::default();
- let db = ctx.db.peek().await?;
- let after_previous_state = previous_state.clone();
+ let db = ctx.db.peek().await;
if let Result::<(), Error>::Err(e) = {
let ctx = ctx.clone();
async move {
- if db
- .as_package_data()
- .as_idx(&pkg_id)
- .or_not_found(&pkg_id)?
- .as_installed()
- .is_some()
- {
- *previous_state.lock().await =
- crate::control::stop(ctx.clone(), pkg_id.clone()).await.ok();
- }
// // Build set of existing manifests
let mut manifests = Vec::new();
for (_id, pkg) in db.as_package_data().as_entries()? {
@@ -699,7 +688,7 @@ pub async fn download_install_s9pk(
for (p, lan) in cfg {
if p.0 == 80 && lan.ssl || p.0 == 443 && !lan.ssl {
return Err(Error::new(
- eyre!("SSL Conflict with embassyOS"),
+ eyre!("SSL Conflict with StartOS"),
ErrorKind::LanPortConflict,
));
}
@@ -779,15 +768,6 @@ pub async fn download_install_s9pk(
tracing::debug!("{:?}", e);
}
- let previous_state = after_previous_state.lock().await;
- if previous_state
- .as_ref()
- .map(|x| x.running())
- .unwrap_or(false)
- {
- crate::control::start(ctx.clone(), pkg_id.clone()).await?;
- }
-
Err(e)
} else {
Ok::<_, Error>(())
@@ -807,7 +787,7 @@ pub async fn install_s9pk(
rdr.validated();
let developer_key = rdr.developer_key().clone();
rdr.reset().await?;
- let db = ctx.db.peek().await?;
+ let db = ctx.db.peek().await;
tracing::info!("Install {}@{}: Unpacking Manifest", pkg_id, version);
let manifest = progress
@@ -845,7 +825,12 @@ pub async fn install_s9pk(
.await
.with_kind(crate::ErrorKind::Deserialization)?,
)),
- Err(e) if e.status() == Some(StatusCode::BAD_REQUEST) => Ok(None),
+ Err(e)
+ if e.status() == Some(StatusCode::BAD_REQUEST)
+ || e.status() == Some(StatusCode::NOT_FOUND) =>
+ {
+ Ok(None)
+ }
Err(e) => Err(e),
}
.with_kind(crate::ErrorKind::Registry)?
@@ -1033,6 +1018,12 @@ pub async fn install_s9pk(
)
.await?;
+ let peek = ctx.db.peek().await;
+ let prev = peek
+ .as_package_data()
+ .as_idx(pkg_id)
+ .or_not_found(pkg_id)?
+ .de()?;
let mut sql_tx = ctx.secret_store.begin().await?;
tracing::info!("Install {}@{}: Creating volumes", pkg_id, version);
@@ -1040,7 +1031,7 @@ pub async fn install_s9pk(
tracing::info!("Install {}@{}: Created volumes", pkg_id, version);
tracing::info!("Install {}@{}: Installing interfaces", pkg_id, version);
- let interface_addresses = manifest.interfaces.install(&mut sql_tx, pkg_id).await?;
+ let interface_addresses = manifest.interfaces.install(sql_tx.as_mut(), pkg_id).await?;
tracing::info!(
"Install {}@{}: Installed interfaces {:?}",
pkg_id,
@@ -1095,17 +1086,10 @@ pub async fn install_s9pk(
CurrentDependents(deps)
};
- let peek = ctx.db.peek().await?;
- let prev = peek
- .as_package_data()
- .as_idx(pkg_id)
- .or_not_found(pkg_id)?
- .de()?;
let installed = InstalledPackageInfo {
status: Status {
configured: manifest.config.is_none(),
main: MainStatus::Stopped,
- dependency_errors: Default::default(),
dependency_config_errors: compute_dependency_config_errs(
&ctx,
&peek,
@@ -1241,11 +1225,7 @@ pub async fn install_s9pk(
manager.configure(configure_context).await?;
}
- if auto_start {
- manager.start();
- }
-
- for to_configure in to_configure {
+ for to_configure in to_configure.into_iter().filter(|(dep, _)| dep != pkg_id) {
if let Err(e) = async {
ctx.managers
.get(&to_configure)
@@ -1267,6 +1247,10 @@ pub async fn install_s9pk(
}
}
+ if auto_start {
+ manager.start().await;
+ }
+
tracing::info!("Install {}@{}: Complete", pkg_id, version);
Ok(())
diff --git a/backend/src/lib.rs b/backend/src/lib.rs
index 2b4818698..986682252 100644
--- a/backend/src/lib.rs
+++ b/backend/src/lib.rs
@@ -28,6 +28,7 @@ pub mod developer;
pub mod diagnostic;
pub mod disk;
pub mod error;
+pub mod firmware;
pub mod hostname;
pub mod init;
pub mod inspect;
diff --git a/backend/src/logs.rs b/backend/src/logs.rs
index 30d73f4d7..baacb2845 100644
--- a/backend/src/logs.rs
+++ b/backend/src/logs.rs
@@ -198,7 +198,7 @@ fn deserialize_string_or_utf8_array<'de, D: serde::de::Deserializer<'de>>(
String::from_utf8(
std::iter::repeat_with(|| seq.next_element::().transpose())
.take_while(|a| a.is_some())
- .filter_map(|a| a)
+ .flatten()
.collect::, _>>()?,
)
.map_err(serde::de::Error::custom)
@@ -207,13 +207,22 @@ fn deserialize_string_or_utf8_array<'de, D: serde::de::Deserializer<'de>>(
deserializer.deserialize_any(Visitor)
}
+/// Defining how we are going to filter on a journalctl cli log.
+/// Kernal: (-k --dmesg Show kernel message log from the current boot)
+/// Unit: ( -u --unit=UNIT Show logs from the specified unit
+/// --user-unit=UNIT Show logs from the specified user unit))
+/// System: Unit is startd, but we also filter on the comm
+/// Container: Filtering containers, like podman/docker is done by filtering on the CONTAINER_NAME
#[derive(Debug)]
pub enum LogSource {
Kernel,
- Service(&'static str),
+ Unit(&'static str),
+ System,
Container(PackageId),
}
+pub const SYSTEM_UNIT: &str = "startd";
+
#[command(
custom_cli(cli_logs(async, context(CliContext))),
subcommands(self(logs_nofollow(async)), logs_follow),
@@ -323,21 +332,15 @@ pub async fn cli_logs_generic_follow(
.into())
}
};
- base_url.set_scheme(ws_scheme).or_else(|_| {
- Err(Error::new(
- eyre!("Cannot set URL scheme"),
- crate::ErrorKind::ParseUrl,
- ))
- })?;
+ base_url
+ .set_scheme(ws_scheme)
+ .map_err(|_| Error::new(eyre!("Cannot set URL scheme"), crate::ErrorKind::ParseUrl))?;
let (mut stream, _) =
// base_url is "http://127.0.0.1/", with a trailing slash, so we don't put a leading slash in this path:
tokio_tungstenite::connect_async(format!("{}ws/rpc/{}", base_url, res.guid)).await?;
while let Some(log) = stream.try_next().await? {
- match log {
- Message::Text(log) => {
- println!("{}", serde_json::from_str::(&log)?);
- }
- _ => (),
+ if let Message::Text(log) = log {
+ println!("{}", serde_json::from_str::(&log)?);
}
}
@@ -361,11 +364,22 @@ pub async fn journalctl(
LogSource::Kernel => {
cmd.arg("-k");
}
- LogSource::Service(id) => {
+ LogSource::Unit(id) => {
cmd.arg("-u");
cmd.arg(id);
}
+ LogSource::System => {
+ cmd.arg("-u");
+ cmd.arg(SYSTEM_UNIT);
+ cmd.arg(format!("_COMM={}", SYSTEM_UNIT));
+ }
LogSource::Container(id) => {
+ #[cfg(feature = "podman")]
+ cmd.arg(format!(
+ "SYSLOG_IDENTIFIER={}",
+ DockerProcedure::container_name(&id, None)
+ ));
+ #[cfg(not(feature = "podman"))]
cmd.arg(format!(
"CONTAINER_NAME={}",
DockerProcedure::container_name(&id, None)
@@ -373,7 +387,7 @@ pub async fn journalctl(
}
};
- let cursor_formatted = format!("--after-cursor={}", cursor.clone().unwrap_or(""));
+ let cursor_formatted = format!("--after-cursor={}", cursor.unwrap_or(""));
if cursor.is_some() {
cmd.arg(&cursor_formatted);
if before {
diff --git a/backend/src/manager/health.rs b/backend/src/manager/health.rs
index 17e968f21..30f18051a 100644
--- a/backend/src/manager/health.rs
+++ b/backend/src/manager/health.rs
@@ -11,7 +11,7 @@ use crate::Error;
#[instrument(skip_all)]
pub async fn check(ctx: &RpcContext, id: &PackageId) -> Result<(), Error> {
let (manifest, started) = {
- let peeked = ctx.db.peek().await?;
+ let peeked = ctx.db.peek().await;
let pde = peeked
.as_package_data()
.as_idx(id)
diff --git a/backend/src/manager/manager_container.rs b/backend/src/manager/manager_container.rs
index a4f44dbb4..32e11c2e5 100644
--- a/backend/src/manager/manager_container.rs
+++ b/backend/src/manager/manager_container.rs
@@ -53,7 +53,7 @@ impl ManageContainer {
let current_state = Arc::new(watch::channel(StartStop::Stop).0);
let desired_state = Arc::new(
watch::channel::(
- get_status(seed.ctx.db.peek().await?, &seed.manifest).into(),
+ get_status(seed.ctx.db.peek().await, &seed.manifest).into(),
)
.0,
);
@@ -103,7 +103,7 @@ impl ManageContainer {
&self,
seed: &manager_seed::ManagerSeed,
) -> Result<(), Error> {
- let current_state = get_status(seed.ctx.db.peek().await?, &seed.manifest);
+ let current_state = get_status(seed.ctx.db.peek().await, &seed.manifest);
self.override_main_status
.send_modify(|x| *x = Some(current_state));
Ok(())
diff --git a/backend/src/manager/mod.rs b/backend/src/manager/mod.rs
index 2154ccf8d..f8f9ff16d 100644
--- a/backend/src/manager/mod.rs
+++ b/backend/src/manager/mod.rs
@@ -111,7 +111,7 @@ pub struct Manager {
seed: Arc,
manage_container: Arc,
- transition: Arc>>,
+ transition: Arc>,
persistent_container: ManagerPersistentContainer,
pub gid: Arc,
@@ -140,60 +140,67 @@ impl Manager {
})
}
- pub fn start(&self) {
- self._transition_abort();
- self.manage_container.to_desired(StartStop::Start);
- }
- pub fn stop(&self) {
- self._transition_abort();
- self.manage_container.to_desired(StartStop::Stop);
- }
- pub fn restart(&self) {
+ /// awaiting this does not wait for the start to complete
+ pub async fn start(&self) {
if self._is_transition_restart() {
return;
}
- self._transition_replace(self._transition_restart());
+ self._transition_abort().await;
+ self.manage_container.to_desired(StartStop::Start);
}
+
+ /// awaiting this does not wait for the stop to complete
+ pub async fn stop(&self) {
+ self._transition_abort().await;
+ self.manage_container.to_desired(StartStop::Stop);
+ }
+ /// awaiting this does not wait for the restart to complete
+ pub async fn restart(&self) {
+ if self._is_transition_restart()
+ && *self.manage_container.desired_state().borrow() == StartStop::Stop
+ {
+ return;
+ }
+ if self.manage_container.desired_state().borrow().is_start() {
+ self._transition_replace(self._transition_restart()).await;
+ }
+ }
+ /// awaiting this does not wait for the restart to complete
pub async fn configure(
&self,
configure_context: ConfigureContext,
) -> Result, Error> {
- if self._is_transition_configure() {
- return Ok(configure_context.breakages);
+ if self._is_transition_restart() {
+ self._transition_abort().await;
+ } else if self._is_transition_backup() {
+ return Err(Error::new(
+ eyre!("Can't configure because service is backing up"),
+ ErrorKind::InvalidRequest,
+ ));
}
let context = self.seed.ctx.clone();
let id = self.seed.manifest.id.clone();
let breakages = configure(context, id, configure_context).await?;
- self._transition_replace({
- let manage_container = self.manage_container.clone();
- let state_reverter = DesiredStateReverter::new(manage_container.clone());
- let transition = self.transition.clone();
- TransitionState::Configuring(
- tokio::spawn(async move {
- manage_container.wait_for_desired(StartStop::Stop).await;
+ self.restart().await;
- state_reverter.revert().await;
- transition.send_replace(Default::default());
- })
- .into(),
- )
- });
Ok(breakages)
}
+
+ /// awaiting this does not wait for the backup to complete
pub async fn backup(&self, backup_guard: BackupGuard) -> BackupReturn {
if self._is_transition_backup() {
return BackupReturn::AlreadyRunning(PackageBackupReport {
- error: Some("Can't do backup because service is in a backing up state".to_owned()),
+ error: Some("Can't do backup because service is already backing up".to_owned()),
});
}
let (transition_state, done) = self._transition_backup(backup_guard);
- self._transition_replace(transition_state);
+ self._transition_replace(transition_state).await;
done.await
}
pub async fn exit(&self) {
- self._transition_abort();
+ self._transition_abort().await;
self.manage_container
.wait_for_desired(StartStop::Stop)
.await;
@@ -220,19 +227,14 @@ impl Manager {
.map(|x| x.rpc_client())
}
- fn _transition_abort(&self) {
- if let Some(transition) = self
- .transition
- .send_replace(Default::default())
- .join_handle()
- {
- (**transition).abort();
- }
- }
- fn _transition_replace(&self, transition_state: TransitionState) {
+ async fn _transition_abort(&self) {
self.transition
- .send_replace(Arc::new(transition_state))
- .abort();
+ .send_replace(Default::default())
+ .abort()
+ .await;
+ }
+ async fn _transition_replace(&self, transition_state: TransitionState) {
+ self.transition.send_replace(transition_state).abort().await;
}
pub(super) fn perform_restart(&self) -> impl Future> + 'static {
@@ -265,7 +267,7 @@ impl Manager {
let manage_container = self.manage_container.clone();
let seed = self.seed.clone();
async move {
- let peek = seed.ctx.db.peek().await?;
+ let peek = seed.ctx.db.peek().await;
let state_reverter = DesiredStateReverter::new(manage_container.clone());
let override_guard =
manage_container.set_override(get_status(peek, &seed.manifest).backing_up())?;
@@ -322,15 +324,11 @@ impl Manager {
}
fn _is_transition_restart(&self) -> bool {
let transition = self.transition.borrow();
- matches!(**transition, TransitionState::Restarting(_))
+ matches!(*transition, TransitionState::Restarting(_))
}
fn _is_transition_backup(&self) -> bool {
let transition = self.transition.borrow();
- matches!(**transition, TransitionState::BackingUp(_))
- }
- fn _is_transition_configure(&self) -> bool {
- let transition = self.transition.borrow();
- matches!(**transition, TransitionState::Configuring(_))
+ matches!(*transition, TransitionState::BackingUp(_))
}
}
@@ -340,7 +338,7 @@ async fn configure(
id: PackageId,
mut configure_context: ConfigureContext,
) -> Result, Error> {
- let db = ctx.db.peek().await?;
+ let db = ctx.db.peek().await;
let id = &id;
let ctx = &ctx;
let overrides = &mut configure_context.overrides;
@@ -602,7 +600,7 @@ impl Drop for DesiredStateReverter {
type BackupDoneSender = oneshot::Sender>;
fn finish_up_backup_task(
- transition: Arc>>,
+ transition: Arc>,
send: BackupDoneSender,
) -> impl FnOnce(Result, Error>) -> BoxFuture<'static, ()> {
move |result| {
@@ -761,7 +759,7 @@ async fn add_network_for_main(
for (id, interface) in &seed.manifest.interfaces.0 {
for (external, internal) in interface.lan_config.iter().flatten() {
svc.add_lan(
- &mut tx,
+ tx.as_mut(),
id.clone(),
external.0,
internal.internal,
@@ -770,13 +768,14 @@ async fn add_network_for_main(
.await?;
}
for (external, internal) in interface.tor_config.iter().flat_map(|t| &t.port_mapping) {
- svc.add_tor(&mut tx, id.clone(), external.0, internal.0)
+ svc.add_tor(tx.as_mut(), id.clone(), external.0, internal.0)
.await?;
}
}
for volume in seed.manifest.volumes.values() {
if let Volume::Certificate { interface_id } = volume {
- svc.export_cert(&mut tx, interface_id, ip.into()).await?;
+ svc.export_cert(tx.as_mut(), interface_id, ip.into())
+ .await?;
}
}
tx.commit().await?;
diff --git a/backend/src/manager/transition_state.rs b/backend/src/manager/transition_state.rs
index 6826aef09..122c0f703 100644
--- a/backend/src/manager/transition_state.rs
+++ b/backend/src/manager/transition_state.rs
@@ -5,21 +5,26 @@ use helpers::NonDetachingJoinHandle;
pub(super) enum TransitionState {
BackingUp(NonDetachingJoinHandle<()>),
Restarting(NonDetachingJoinHandle<()>),
- Configuring(NonDetachingJoinHandle<()>),
None,
}
impl TransitionState {
- pub(super) fn join_handle(&self) -> Option<&NonDetachingJoinHandle<()>> {
+ pub(super) fn take(&mut self) -> Self {
+ std::mem::take(self)
+ }
+ pub(super) fn into_join_handle(self) -> Option> {
Some(match self {
TransitionState::BackingUp(a) => a,
TransitionState::Restarting(a) => a,
- TransitionState::Configuring(a) => a,
TransitionState::None => return None,
})
}
- pub(super) fn abort(&self) {
- self.join_handle().map(|transition| transition.abort());
+ pub(super) async fn abort(&mut self) {
+ if let Some(s) = self.take().into_join_handle() {
+ if s.wait_for_abort().await.is_ok() {
+ tracing::trace!("transition completed before abort");
+ }
+ }
}
}
diff --git a/backend/src/middleware/auth.rs b/backend/src/middleware/auth.rs
index ecc07ffd6..611923ad6 100644
--- a/backend/src/middleware/auth.rs
+++ b/backend/src/middleware/auth.rs
@@ -47,7 +47,7 @@ impl HasLoggedOutSessions {
"UPDATE session SET logged_out = CURRENT_TIMESTAMP WHERE id = $1",
session
)
- .execute(&mut sqlx_conn)
+ .execute(sqlx_conn.as_mut())
.await?;
for socket in open_authed_websockets.remove(&session).unwrap_or_default() {
let _ = socket.send(());
@@ -94,7 +94,7 @@ impl HasValidSession {
pub async fn from_session(session: &HashSessionToken, ctx: &RpcContext) -> Result {
let session_hash = session.hashed();
let session = sqlx::query!("UPDATE session SET last_active = CURRENT_TIMESTAMP WHERE id = $1 AND logged_out IS NULL OR logged_out > CURRENT_TIMESTAMP", session_hash)
- .execute(&mut ctx.secret_store.acquire().await?)
+ .execute(ctx.secret_store.acquire().await?.as_mut())
.await?;
if session.rows_affected() == 0 {
return Err(Error::new(
diff --git a/backend/src/middleware/cors.rs b/backend/src/middleware/cors.rs
index 132a2385f..5f33bc08d 100644
--- a/backend/src/middleware/cors.rs
+++ b/backend/src/middleware/cors.rs
@@ -1,4 +1,6 @@
use futures::FutureExt;
+use http::HeaderValue;
+use hyper::header::HeaderMap;
use rpc_toolkit::hyper::http::Error as HttpError;
use rpc_toolkit::hyper::{Body, Method, Request, Response};
use rpc_toolkit::rpc_server_helpers::{
@@ -6,24 +8,35 @@ use rpc_toolkit::rpc_server_helpers::{
};
use rpc_toolkit::Metadata;
+fn get_cors_headers(req: &Request) -> HeaderMap {
+ let mut res = HeaderMap::new();
+ if let Some(origin) = req.headers().get("Origin") {
+ res.insert("Access-Control-Allow-Origin", origin.clone());
+ }
+ if let Some(method) = req.headers().get("Access-Control-Request-Method") {
+ res.insert("Access-Control-Allow-Methods", method.clone());
+ }
+ if let Some(headers) = req.headers().get("Access-Control-Request-Headers") {
+ res.insert("Access-Control-Allow-Headers", headers.clone());
+ }
+ res.insert(
+ "Access-Control-Allow-Credentials",
+ HeaderValue::from_static("true"),
+ );
+ res
+}
+
pub async fn cors(
req: &mut Request,
_metadata: M,
) -> Result>, HttpError> {
+ let headers = get_cors_headers(req);
if req.method() == Method::OPTIONS {
- Ok(Err(Response::builder()
- .header(
- "Access-Control-Allow-Origin",
- if let Some(origin) = req.headers().get("origin").and_then(|s| s.to_str().ok()) {
- origin
- } else {
- "*"
- },
- )
- .header("Access-Control-Allow-Methods", "*")
- .header("Access-Control-Allow-Headers", "*")
- .header("Access-Control-Allow-Credentials", "true")
- .body(Body::empty())?))
+ Ok(Err({
+ let mut res = Response::new(Body::empty());
+ res.headers_mut().extend(headers.into_iter());
+ res
+ }))
} else {
Ok(Ok(Box::new(|_, _| {
async move {
@@ -31,8 +44,7 @@ pub async fn cors(
async move {
let res: DynMiddlewareStage4 = Box::new(|res| {
async move {
- res.headers_mut()
- .insert("Access-Control-Allow-Origin", "*".parse()?);
+ res.headers_mut().extend(headers.into_iter());
Ok::<_, HttpError>(())
}
.boxed()
diff --git a/backend/src/middleware/db.rs b/backend/src/middleware/db.rs
index eeeeb299a..c3ceadda6 100644
--- a/backend/src/middleware/db.rs
+++ b/backend/src/middleware/db.rs
@@ -1,4 +1,3 @@
-use color_eyre::eyre::eyre;
use futures::future::BoxFuture;
use futures::FutureExt;
use http::HeaderValue;
@@ -11,7 +10,6 @@ use rpc_toolkit::yajrc::RpcMethod;
use rpc_toolkit::Metadata;
use crate::context::RpcContext;
-use crate::{Error, ResultExt};
pub fn db(ctx: RpcContext) -> DynMiddleware {
Box::new(
@@ -20,51 +18,21 @@ pub fn db(ctx: RpcContext) -> DynMiddleware {
-> BoxFuture>, HttpError>> {
let ctx = ctx.clone();
async move {
- let m2: DynMiddlewareStage2 = Box::new(move |req, rpc_req| {
+ let m2: DynMiddlewareStage2 = Box::new(move |_req, rpc_req| {
async move {
- let seq = req.headers.remove("x-patch-sequence");
let sync_db = metadata
.get(rpc_req.method.as_str(), "sync_db")
.unwrap_or(false);
let m3: DynMiddlewareStage3 = Box::new(move |res, _| {
async move {
- if sync_db && seq.is_some() {
- match async {
- let seq = seq
- .ok_or_else(|| {
- Error::new(
- eyre!("Missing X-Patch-Sequence"),
- crate::ErrorKind::InvalidRequest,
- )
- })?
- .to_str()
- .with_kind(crate::ErrorKind::InvalidRequest)?
- .parse()?;
- let res = ctx.db.sync(seq).await?;
- let json = match res {
- Ok(revs) => serde_json::to_vec(&revs),
- Err(dump) => serde_json::to_vec(&[dump]),
- }
- .with_kind(crate::ErrorKind::Serialization)?;
- Ok::<_, Error>(base64::encode_config(
- &json,
- base64::URL_SAFE,
- ))
- }
- .await
- {
- Ok(a) => res
- .headers
- .append("X-Patch-Updates", HeaderValue::from_str(&a)?),
- Err(e) => res.headers.append(
- "X-Patch-Error",
- HeaderValue::from_str(&base64::encode_config(
- &e.to_string(),
- base64::URL_SAFE,
- ))?,
- ),
- };
+ if sync_db {
+ res.headers.append(
+ "X-Patch-Sequence",
+ HeaderValue::from_str(
+ &ctx.db.sequence().await.to_string(),
+ )?,
+ );
}
Ok(Ok(noop4()))
}
diff --git a/backend/src/middleware/encrypt.rs b/backend/src/middleware/encrypt.rs
index 6eb8ed967..010197c49 100644
--- a/backend/src/middleware/encrypt.rs
+++ b/backend/src/middleware/encrypt.rs
@@ -13,7 +13,7 @@ pub fn pbkdf2(password: impl AsRef<[u8]>, salt: impl AsRef<[u8]>) -> CipherKey>(),
diff --git a/backend/src/net/keys.rs b/backend/src/net/keys.rs
index 12516e900..6f5f13f82 100644
--- a/backend/src/net/keys.rs
+++ b/backend/src/net/keys.rs
@@ -1,5 +1,4 @@
use color_eyre::eyre::eyre;
-use ed25519_dalek::{ExpandedSecretKey, SecretKey};
use models::{Id, InterfaceId, PackageId};
use openssl::pkey::{PKey, Private};
use openssl::sha::Sha256;
@@ -12,14 +11,15 @@ use tracing::instrument;
use zeroize::Zeroize;
use crate::net::ssl::CertPair;
-use crate::Error;
+use crate::prelude::*;
+use crate::util::crypto::ed25519_expand_key;
// TODO: delete once we may change tor addresses
#[instrument(skip(secrets))]
async fn compat(
secrets: impl PgExecutor<'_>,
interface: &Option<(PackageId, InterfaceId)>,
-) -> Result, Error> {
+) -> Result , Error> {
if let Some((package, interface)) = interface {
if let Some(r) = sqlx::query!(
"SELECT key FROM tor WHERE package = $1 AND interface = $2",
@@ -29,7 +29,12 @@ async fn compat(
.fetch_optional(secrets)
.await?
{
- Ok(Some(ExpandedSecretKey::from_bytes(&r.key)?))
+ Ok(Some(<[u8; 64]>::try_from(r.key).map_err(|e| {
+ Error::new(
+ eyre!("expected vec of len 64, got len {}", e.len()),
+ ErrorKind::ParseDbField,
+ )
+ })?))
} else {
Ok(None)
}
@@ -38,7 +43,12 @@ async fn compat(
.await?
.tor_key
{
- Ok(Some(ExpandedSecretKey::from_bytes(&key)?))
+ Ok(Some(<[u8; 64]>::try_from(key).map_err(|e| {
+ Error::new(
+ eyre!("expected vec of len 64, got len {}", e.len()),
+ ErrorKind::ParseDbField,
+ )
+ })?))
} else {
Ok(None)
}
@@ -64,10 +74,7 @@ impl Key {
.unwrap_or_else(|| "embassy".to_owned())
}
pub fn tor_key(&self) -> TorSecretKeyV3 {
- ed25519_dalek::ExpandedSecretKey::from_bytes(&self.tor_key)
- .unwrap()
- .to_bytes()
- .into()
+ self.tor_key.into()
}
pub fn tor_address(&self) -> OnionAddressV3 {
self.tor_key().public().get_onion_address()
@@ -87,7 +94,7 @@ impl Key {
pub fn openssl_key_nistp256(&self) -> PKey {
let mut buf = self.base;
loop {
- if let Ok(k) = p256::SecretKey::from_be_bytes(&buf) {
+ if let Ok(k) = p256::SecretKey::from_slice(&buf) {
return PKey::private_key_from_pkcs8(&*k.to_pkcs8_der().unwrap().as_bytes())
.unwrap();
}
@@ -111,11 +118,7 @@ impl Key {
}
}
pub fn from_bytes(interface: Option<(PackageId, InterfaceId)>, bytes: [u8; 32]) -> Self {
- Self::from_pair(
- interface,
- bytes,
- ExpandedSecretKey::from(&SecretKey::from_bytes(&bytes).unwrap()).to_bytes(),
- )
+ Self::from_pair(interface, bytes, ed25519_expand_key(&bytes))
}
pub fn new(interface: Option<(PackageId, InterfaceId)>) -> Self {
Self::from_bytes(interface, rand::random())
@@ -225,7 +228,7 @@ impl Key {
};
let mut res = Self::from_bytes(interface, actual);
if let Some(tor_key) = compat(secrets, &res.interface).await? {
- res.tor_key = tor_key.to_bytes();
+ res.tor_key = tor_key;
}
Ok(res)
}
diff --git a/backend/src/net/mod.rs b/backend/src/net/mod.rs
index caa080940..afba879f0 100644
--- a/backend/src/net/mod.rs
+++ b/backend/src/net/mod.rs
@@ -23,7 +23,7 @@ pub mod wifi;
pub const PACKAGE_CERT_PATH: &str = "/var/lib/embassy/ssl";
-#[command(subcommands(tor::tor, dhcp::dhcp))]
+#[command(subcommands(tor::tor, dhcp::dhcp, ssl::ssl))]
pub fn net() -> Result<(), Error> {
Ok(())
}
diff --git a/backend/src/net/net_controller.rs b/backend/src/net/net_controller.rs
index 8865d4dd8..39df25ee9 100644
--- a/backend/src/net/net_controller.rs
+++ b/backend/src/net/net_controller.rs
@@ -159,6 +159,7 @@ impl NetController {
let dns = self.dns.add(Some(package.clone()), ip).await?;
Ok(NetService {
+ shutdown: false,
id: package,
ip,
dns,
@@ -225,6 +226,7 @@ impl NetController {
}
pub struct NetService {
+ shutdown: bool,
id: PackageId,
ip: Ipv4Addr,
dns: Arc<()>,
@@ -372,6 +374,7 @@ impl NetService {
Ok(())
}
pub async fn remove_all(mut self) -> Result<(), Error> {
+ self.shutdown = true;
let mut errors = ErrorCollection::new();
if let Some(ctrl) = Weak::upgrade(&self.controller) {
for ((_, external), (key, rcs)) in std::mem::take(&mut self.lan) {
@@ -385,9 +388,9 @@ impl NetService {
}
std::mem::take(&mut self.dns);
errors.handle(ctrl.dns.gc(Some(self.id.clone()), self.ip).await);
- self.ip = Ipv4Addr::new(0, 0, 0, 0);
errors.into_result()
} else {
+ tracing::warn!("NetService dropped after NetController is shutdown");
Err(Error::new(
eyre!("NetController is shutdown"),
crate::ErrorKind::Network,
@@ -398,11 +401,12 @@ impl NetService {
impl Drop for NetService {
fn drop(&mut self) {
- if self.ip != Ipv4Addr::new(0, 0, 0, 0) {
+ if !self.shutdown {
tracing::debug!("Dropping NetService for {}", self.id);
let svc = std::mem::replace(
self,
NetService {
+ shutdown: true,
id: Default::default(),
ip: Ipv4Addr::new(0, 0, 0, 0),
dns: Default::default(),
diff --git a/backend/src/net/ssl.rs b/backend/src/net/ssl.rs
index af785d476..89e16b0a9 100644
--- a/backend/src/net/ssl.rs
+++ b/backend/src/net/ssl.rs
@@ -13,14 +13,15 @@ use openssl::nid::Nid;
use openssl::pkey::{PKey, Private};
use openssl::x509::{X509Builder, X509Extension, X509NameBuilder, X509};
use openssl::*;
+use rpc_toolkit::command;
use tokio::sync::{Mutex, RwLock};
use tracing::instrument;
use crate::account::AccountInfo;
+use crate::context::RpcContext;
use crate::hostname::Hostname;
use crate::net::dhcp::ips;
use crate::net::keys::{Key, KeyInfo};
-use crate::s9pk::manifest::PackageId;
use crate::{Error, ErrorKind, ResultExt};
static CERTIFICATE_VERSION: i32 = 2; // X509 version 3 is actually encoded as '2' in the cert because fuck you.
@@ -415,3 +416,16 @@ pub fn make_leaf_cert(
let cert = builder.build();
Ok(cert)
}
+
+#[command(subcommands(size))]
+pub async fn ssl() -> Result<(), Error> {
+ Ok(())
+}
+
+#[command]
+pub async fn size(#[context] ctx: RpcContext) -> Result {
+ Ok(format!(
+ "Cert Catch size: {}",
+ ctx.net_controller.ssl.cert_cache.read().await.len()
+ ))
+}
diff --git a/backend/src/net/tor.rs b/backend/src/net/tor.rs
index d1d8f0b80..9926d3c6c 100644
--- a/backend/src/net/tor.rs
+++ b/backend/src/net/tor.rs
@@ -139,7 +139,7 @@ pub async fn logs_nofollow(
_ctx: (),
(limit, cursor, before, _): (Option, Option, bool, bool),
) -> Result {
- fetch_logs(LogSource::Service(SYSTEMD_UNIT), limit, cursor, before).await
+ fetch_logs(LogSource::Unit(SYSTEMD_UNIT), limit, cursor, before).await
}
#[command(rpc_only, rename = "follow", display(display_none))]
@@ -147,7 +147,7 @@ pub async fn logs_follow(
#[context] ctx: RpcContext,
#[parent_data] (limit, _, _, _): (Option, Option, bool, bool),
) -> Result {
- follow_logs(ctx, LogSource::Service(SYSTEMD_UNIT), limit).await
+ follow_logs(ctx, LogSource::Unit(SYSTEMD_UNIT), limit).await
}
fn event_handler(_event: AsyncEvent<'static>) -> BoxFuture<'static, Result<(), ConnError>> {
@@ -305,7 +305,7 @@ async fn torctl(
.invoke(ErrorKind::Tor)
.await?;
- let logs = journalctl(LogSource::Service(SYSTEMD_UNIT), 0, None, false, true).await?;
+ let logs = journalctl(LogSource::Unit(SYSTEMD_UNIT), 0, None, false, true).await?;
let mut tcp_stream = None;
for _ in 0..60 {
diff --git a/backend/src/net/vhost.rs b/backend/src/net/vhost.rs
index e8e754baf..00ffc6c59 100644
--- a/backend/src/net/vhost.rs
+++ b/backend/src/net/vhost.rs
@@ -16,12 +16,13 @@ use tokio::sync::{Mutex, RwLock};
use tokio_rustls::rustls::server::Acceptor;
use tokio_rustls::rustls::{RootCertStore, ServerConfig};
use tokio_rustls::{LazyConfigAcceptor, TlsConnector};
+use tracing::instrument;
use crate::net::keys::Key;
use crate::net::ssl::SslManager;
use crate::net::utils::SingleAccept;
+use crate::prelude::*;
use crate::util::io::{BackTrackingReader, TimeoutStream};
-use crate::Error;
// not allowed: <=1024, >=32768, 5355, 5432, 9050, 6010, 9051, 5353
@@ -36,6 +37,7 @@ impl VHostController {
servers: Mutex::new(BTreeMap::new()),
}
}
+ #[instrument(skip_all)]
pub async fn add(
&self,
key: Key,
@@ -63,6 +65,7 @@ impl VHostController {
writable.insert(external, server);
Ok(rc?)
}
+ #[instrument(skip_all)]
pub async fn gc(&self, hostname: Option, external: u16) -> Result<(), Error> {
let mut writable = self.servers.lock().await;
if let Some(server) = writable.remove(&external) {
@@ -93,6 +96,7 @@ struct VHostServer {
_thread: NonDetachingJoinHandle<()>,
}
impl VHostServer {
+ #[instrument(skip_all)]
async fn new(port: u16, ssl: Arc) -> Result {
// check if port allowed
let listener = TcpListener::bind(SocketAddr::new(Ipv6Addr::UNSPECIFIED.into(), port))
diff --git a/backend/src/net/wifi.rs b/backend/src/net/wifi.rs
index d0d0dc6c0..8429f9205 100644
--- a/backend/src/net/wifi.rs
+++ b/backend/src/net/wifi.rs
@@ -174,7 +174,7 @@ pub async fn delete(#[context] ctx: RpcContext, #[arg] ssid: String) -> Result<(
pub struct WiFiInfo {
ssids: HashMap,
connected: Option,
- country: CountryCode,
+ country: Option,
ethernet: bool,
available_wifi: Vec,
}
@@ -216,7 +216,7 @@ fn display_wifi_info(info: WiFiInfo, matches: &ArgMatches) {
.as_ref()
.and_then(|x| info.ssids.get(x))
.map_or("[N/A]".to_owned(), |ss| format!("{}", ss.0)),
- &info.country.alpha2(),
+ info.country.as_ref().map(|c| c.alpha2()).unwrap_or("00"),
&format!("{}", info.ethernet)
]);
table_global.print_tty(false).unwrap();
@@ -517,7 +517,7 @@ impl WpaCli {
Ok(())
}
- pub async fn get_country_low(&self) -> Result {
+ pub async fn get_country_low(&self) -> Result, Error> {
let r = Command::new("iw")
.arg("reg")
.arg("get")
@@ -539,12 +539,16 @@ impl WpaCli {
ErrorKind::Wifi,
)
})?[1];
- Ok(CountryCode::for_alpha2(country).map_err(|_| {
- Error::new(
- color_eyre::eyre::eyre!("Invalid Country Code: {}", country),
- ErrorKind::Wifi,
- )
- })?)
+ if country == "00" {
+ Ok(None)
+ } else {
+ Ok(Some(CountryCode::for_alpha2(country).map_err(|_| {
+ Error::new(
+ color_eyre::eyre::eyre!("Invalid Country Code: {}", country),
+ ErrorKind::Wifi,
+ )
+ })?))
+ }
}
pub async fn remove_network_low(&mut self, id: NetworkId) -> Result<(), Error> {
let _ = Command::new("nmcli")
@@ -634,7 +638,7 @@ impl WpaCli {
Ok(())
}
pub async fn save_config(&mut self, db: PatchDb) -> Result<(), Error> {
- let new_country = Some(self.get_country_low().await?);
+ let new_country = self.get_country_low().await?;
db.mutate(|d| {
d.as_server_info_mut()
.as_last_wifi_region_mut()
diff --git a/backend/src/notifications.rs b/backend/src/notifications.rs
index afe92c571..73351471c 100644
--- a/backend/src/notifications.rs
+++ b/backend/src/notifications.rs
@@ -236,7 +236,7 @@ impl NotificationManager {
subtype: T,
debounce_interval: Option,
) -> Result<(), Error> {
- let peek = db.peek().await?;
+ let peek = db.peek().await;
if !self
.should_notify(&package_id, &level, &title, debounce_interval)
.await
diff --git a/backend/src/procedure/js_scripts.rs b/backend/src/procedure/js_scripts.rs
index 4c49e7f74..24b9eb6e9 100644
--- a/backend/src/procedure/js_scripts.rs
+++ b/backend/src/procedure/js_scripts.rs
@@ -1,24 +1,27 @@
-use std::path::{Path, PathBuf};
use std::sync::Arc;
use std::time::Duration;
+use std::{
+ path::{Path, PathBuf},
+ process::Stdio,
+};
use color_eyre::eyre::eyre;
-use color_eyre::Report;
-use embassy_container_init::{ProcessGroupId, SignalGroup, SignalGroupParams};
-use helpers::{Address, AddressSchemaLocal, AddressSchemaOnion, Callback, OsApi, UnixRpcClient};
+use embassy_container_init::ProcessGroupId;
+use helpers::UnixRpcClient;
pub use js_engine::JsError;
use js_engine::{JsExecutionEnvironment, PathForVolumeId};
-use models::{ErrorKind, InterfaceId, VolumeId};
+use models::VolumeId;
use serde::de::DeserializeOwned;
use serde::{Deserialize, Serialize};
+use tokio::process::Command;
use tracing::instrument;
use super::ProcedureName;
-use crate::context::RpcContext;
+use crate::prelude::*;
use crate::s9pk::manifest::PackageId;
-use crate::util::{GeneralGuard, Version};
+use crate::util::io::to_json_async_writer;
+use crate::util::Version;
use crate::volume::Volumes;
-use crate::Error;
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "kebab-case")]
@@ -46,56 +49,15 @@ impl PathForVolumeId for Volumes {
}
}
-struct SandboxOsApi {
- _ctx: RpcContext,
-}
-#[async_trait::async_trait]
-impl OsApi for SandboxOsApi {
- #[allow(unused_variables)]
- async fn get_service_config(
- &self,
- id: PackageId,
- path: &str,
- callback: Option,
- ) -> Result, Report> {
- Err(eyre!("Operation not permitted"))
- }
- #[allow(unused_variables)]
- async fn bind_local(
- &self,
- internal_port: u16,
- address_schema: AddressSchemaLocal,
- ) -> Result {
- Err(eyre!("Operation not permitted"))
- }
- #[allow(unused_variables)]
- async fn bind_onion(
- &self,
- internal_port: u16,
- address_schema: AddressSchemaOnion,
- ) -> Result {
- Err(eyre!("Operation not permitted"))
- }
- #[allow(unused_variables)]
- async fn unbind_local(&self, id: InterfaceId, external: u16) -> Result<(), Report> {
- Err(eyre!("Operation not permitted"))
- }
- #[allow(unused_variables)]
- async fn unbind_onion(&self, id: InterfaceId, external: u16) -> Result<(), Report> {
- Err(eyre!("Operation not permitted"))
- }
- fn set_started(&self) -> Result<(), Report> {
- Err(eyre!("Operation not permitted"))
- }
- async fn restart(&self) -> Result<(), Report> {
- Err(eyre!("Operation not permitted"))
- }
- async fn start(&self) -> Result<(), Report> {
- Err(eyre!("Operation not permitted"))
- }
- async fn stop(&self) -> Result<(), Report> {
- Err(eyre!("Operation not permitted"))
- }
+#[derive(Clone, Debug, Deserialize, Serialize)]
+pub struct ExecuteArgs {
+ pub procedure: JsProcedure,
+ pub directory: PathBuf,
+ pub pkg_id: PackageId,
+ pub pkg_version: Version,
+ pub name: ProcedureName,
+ pub volumes: Volumes,
+ pub input: Option,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
@@ -120,56 +82,54 @@ impl JsProcedure {
volumes: &Volumes,
input: Option,
timeout: Option,
- gid: ProcessGroupId,
- rpc_client: Option>,
- os: Arc,
+ _gid: ProcessGroupId,
+ _rpc_client: Option>,
) -> Result, Error> {
- let cleaner_client = rpc_client.clone();
- let cleaner = GeneralGuard::new(move || {
- tokio::spawn(async move {
- if let Some(client) = cleaner_client {
- client
- .request(SignalGroup, SignalGroupParams { gid, signal: 9 })
- .await
- .map_err(|e| {
- Error::new(eyre!("{}: {:?}", e.message, e.data), ErrorKind::Docker)
- })
- } else {
- Ok(())
- }
- })
- });
- let res = async move {
- let running_action = JsExecutionEnvironment::load_from_package(
- os,
- directory,
- pkg_id,
- pkg_version,
- Box::new(volumes.clone()),
- gid,
- rpc_client,
- )
- .await?
- .run_action(name, input, self.args.clone());
- let output: Option = match timeout {
- Some(timeout_duration) => tokio::time::timeout(timeout_duration, running_action)
- .await
- .map_err(|_| (JsError::Timeout, "Timed out. Retrying soon...".to_owned()))??,
- None => running_action.await?,
- };
- let output: O = unwrap_known_error(output)?;
- Ok(output)
+ let runner_argument = ExecuteArgs {
+ procedure: self.clone(),
+ directory: directory.clone(),
+ pkg_id: pkg_id.clone(),
+ pkg_version: pkg_version.clone(),
+ name,
+ volumes: volumes.clone(),
+ input: input.and_then(|x| serde_json::to_value(x).ok()),
+ };
+ let mut runner = Command::new("start-deno")
+ .arg("execute")
+ .stdin(Stdio::piped())
+ .stdout(Stdio::piped())
+ .stderr(Stdio::piped())
+ .kill_on_drop(true)
+ .spawn()?;
+ to_json_async_writer(
+ &mut runner.stdin.take().or_not_found("stdin")?,
+ &runner_argument,
+ )
+ .await?;
+
+ let res = if let Some(timeout) = timeout {
+ tokio::time::timeout(timeout, runner.wait_with_output())
+ .await
+ .with_kind(ErrorKind::Timeout)??
+ } else {
+ runner.wait_with_output().await?
+ };
+
+ if res.status.success() {
+ serde_json::from_str::>(std::str::from_utf8(&res.stdout)?)
+ .with_kind(ErrorKind::Deserialization)
+ } else {
+ Err(Error::new(
+ eyre!("{}", String::from_utf8(res.stderr)?),
+ ErrorKind::Javascript,
+ ))
}
- .await
- .map_err(|(error, message)| (error.as_code_num(), message));
- cleaner.drop().await.unwrap()?;
- Ok(res)
}
#[instrument(skip_all)]
pub async fn sandboxed(
&self,
- ctx: &RpcContext,
+ directory: &PathBuf,
pkg_id: &PackageId,
pkg_version: &Version,
volumes: &Volumes,
@@ -177,25 +137,97 @@ impl JsProcedure {
timeout: Option,
name: ProcedureName,
) -> Result, Error> {
- Ok(async move {
+ let runner_argument = ExecuteArgs {
+ procedure: self.clone(),
+ directory: directory.clone(),
+ pkg_id: pkg_id.clone(),
+ pkg_version: pkg_version.clone(),
+ name,
+ volumes: volumes.clone(),
+ input: input.and_then(|x| serde_json::to_value(x).ok()),
+ };
+ let mut runner = Command::new("start-deno")
+ .arg("sandbox")
+ .stdin(Stdio::piped())
+ .stdout(Stdio::piped())
+ .stderr(Stdio::piped())
+ .kill_on_drop(true)
+ .spawn()?;
+ to_json_async_writer(
+ &mut runner.stdin.take().or_not_found("stdin")?,
+ &runner_argument,
+ )
+ .await?;
+
+ let res = if let Some(timeout) = timeout {
+ tokio::time::timeout(timeout, runner.wait_with_output())
+ .await
+ .with_kind(ErrorKind::Timeout)??
+ } else {
+ runner.wait_with_output().await?
+ };
+
+ if res.status.success() {
+ serde_json::from_str::>(std::str::from_utf8(&res.stdout)?)
+ .with_kind(ErrorKind::Deserialization)
+ } else {
+ Err(Error::new(
+ eyre!("{}", String::from_utf8(res.stderr)?),
+ ErrorKind::Javascript,
+ ))
+ }
+ }
+
+ #[instrument(skip_all)]
+ pub async fn execute_impl(
+ &self,
+ directory: &PathBuf,
+ pkg_id: &PackageId,
+ pkg_version: &Version,
+ name: ProcedureName,
+ volumes: &Volumes,
+ input: Option,
+ ) -> Result, Error> {
+ let res = async move {
let running_action = JsExecutionEnvironment::load_from_package(
- Arc::new(SandboxOsApi { _ctx: ctx.clone() }),
- &ctx.datadir,
+ directory,
+ pkg_id,
+ pkg_version,
+ Box::new(volumes.clone()),
+ )
+ .await?
+ .run_action(name, input, self.args.clone());
+ let output: Option = running_action.await?;
+ let output: O = unwrap_known_error(output)?;
+ Ok(output)
+ }
+ .await
+ .map_err(|(error, message)| (error.as_code_num(), message));
+
+ Ok(res)
+ }
+
+ #[instrument(skip_all)]
+ pub async fn sandboxed_impl(
+ &self,
+ directory: &PathBuf,
+ pkg_id: &PackageId,
+ pkg_version: &Version,
+ volumes: &Volumes,
+ input: Option,
+ name: ProcedureName,
+ ) -> Result, Error> {
+ Ok(async move {
+ let running_action = JsExecutionEnvironment::load_from_package(
+ directory,
pkg_id,
pkg_version,
Box::new(volumes.clone()),
- ProcessGroupId(0),
- None,
)
.await?
.read_only_effects()
.run_action(name, input, self.args.clone());
- let output: Option = match timeout {
- Some(timeout_duration) => tokio::time::timeout(timeout_duration, running_action)
- .await
- .map_err(|_| (JsError::Timeout, "Timed out. Retrying soon...".to_owned()))??,
- None => running_action.await?,
- };
+ let output: Option = running_action.await?;
let output: O = unwrap_known_error(output)?;
Ok(output)
}
@@ -873,134 +905,40 @@ mod tests {
}
}))
.unwrap();
- let input: Option = None;
- let timeout = Some(Duration::from_secs(10));
- js_action
- .execute::(
- &path,
- &package_id,
- &package_version,
- name,
- &volumes,
- input,
- timeout,
- ProcessGroupId(0),
- None,
- Arc::new(OsApiMock::default()),
- )
- .await
- .unwrap()
- .unwrap();
- }
- #[tokio::test]
- async fn test_callback() {
- let api = Arc::new(OsApiMock::default());
- let action_api = api.clone();
- let spawned = tokio::spawn(async move {
- let mut watching = api.config_callbacks.subscribe();
- loop {
- if watching.borrow().is_empty() {
- watching.changed().await.unwrap();
- continue;
- }
- api.config_callbacks.send_modify(|x| {
- x[0].call(vec![json!("This is something across the wire!")])
- .map_err(|e| format!("Failed call"))
- .unwrap();
- });
- break;
- }
- });
- let js_action = JsProcedure { args: vec![] };
- let path: PathBuf = "test/js_action_execute/"
- .parse::()
- .unwrap()
- .canonicalize()
- .unwrap();
- let package_id = "test-package".parse().unwrap();
- let package_version: Version = "0.3.0.3".parse().unwrap();
- let name = ProcedureName::Action("test-callback".parse().unwrap());
- let volumes: Volumes = serde_json::from_value(json!({
- "main": {
- "type": "data"
- },
- "compat": {
- "type": "assets"
- },
- "filebrowser" :{
- "package-id": "filebrowser",
- "path": "data",
- "readonly": true,
- "type": "pointer",
- "volume-id": "main",
- }
- }))
+ let package_id = "test-package".parse().unwrap();
+ let package_version: Version = "0.3.0.3".parse().unwrap();
+ let name = ProcedureName::Action("test-disk-usage".parse().unwrap());
+ let volumes: Volumes = serde_json::from_value(serde_json::json!({
+ "main": {
+ "type": "data"
+ },
+ "compat": {
+ "type": "assets"
+ },
+ "filebrowser" :{
+ "package-id": "filebrowser",
+ "path": "data",
+ "readonly": true,
+ "type": "pointer",
+ "volume-id": "main",
+ }
+ }))
+ .unwrap();
+ let input: Option = None;
+ let timeout = Some(Duration::from_secs(10));
+ js_action
+ .execute::(
+ &path,
+ &package_id,
+ &package_version,
+ name,
+ &volumes,
+ input,
+ timeout,
+ ProcessGroupId(0),
+ None,
+ )
+ .await
+ .unwrap()
.unwrap();
- let input: Option = None;
- let timeout = Some(Duration::from_secs(10));
- js_action
- .execute::(
- &path,
- &package_id,
- &package_version,
- name,
- &volumes,
- input,
- timeout,
- ProcessGroupId(0),
- None,
- action_api,
- )
- .await
- .unwrap()
- .unwrap();
- spawned.await.unwrap();
- }
-
- #[tokio::test]
- async fn js_disk_usage() {
- let js_action = JsProcedure { args: vec![] };
- let path: PathBuf = "test/js_action_execute/"
- .parse::()
- .unwrap()
- .canonicalize()
- .unwrap();
- let package_id = "test-package".parse().unwrap();
- let package_version: Version = "0.3.0.3".parse().unwrap();
- let name = ProcedureName::Action("test-disk-usage".parse().unwrap());
- let volumes: Volumes = serde_json::from_value(serde_json::json!({
- "main": {
- "type": "data"
- },
- "compat": {
- "type": "assets"
- },
- "filebrowser" :{
- "package-id": "filebrowser",
- "path": "data",
- "readonly": true,
- "type": "pointer",
- "volume-id": "main",
- }
- }))
- .unwrap();
- let input: Option = None;
- let timeout = Some(Duration::from_secs(10));
- dbg!(js_action
- .execute::(
- &path,
- &package_id,
- &package_version,
- name,
- &volumes,
- input,
- timeout,
- ProcessGroupId(0),
- None,
- Arc::new(OsApiMock::default()),
- )
- .await
- .unwrap()
- .unwrap());
- }
}
diff --git a/backend/src/procedure/mod.rs b/backend/src/procedure/mod.rs
index fbf7c75b9..fc4c76161 100644
--- a/backend/src/procedure/mod.rs
+++ b/backend/src/procedure/mod.rs
@@ -21,8 +21,6 @@ pub mod docker;
pub mod js_scripts;
pub use models::ProcedureName;
-// TODO: create RPC endpoint that looks up the appropriate action and calls `execute`
-
#[derive(Clone, Debug, Deserialize, Serialize, HasModel)]
#[serde(rename_all = "kebab-case")]
#[serde(tag = "type")]
@@ -140,7 +138,15 @@ impl PackageProcedure {
#[cfg(feature = "js_engine")]
PackageProcedure::Script(procedure) => {
procedure
- .sandboxed(ctx, pkg_id, pkg_version, volumes, input, timeout, name)
+ .sandboxed(
+ &ctx.datadir,
+ pkg_id,
+ pkg_version,
+ volumes,
+ input,
+ timeout,
+ name,
+ )
.await
}
}
@@ -158,13 +164,15 @@ impl std::fmt::Display for PackageProcedure {
}
}
+// TODO: make this not allocate
#[derive(Debug)]
pub struct NoOutput;
impl<'de> Deserialize<'de> for NoOutput {
- fn deserialize(_: D) -> Result
+ fn deserialize(deserializer: D) -> Result
where
D: serde::Deserializer<'de>,
{
+ let _ = Value::deserialize(deserializer)?;
Ok(NoOutput)
}
}
diff --git a/backend/src/properties.rs b/backend/src/properties.rs
index da90a7370..851033b71 100644
--- a/backend/src/properties.rs
+++ b/backend/src/properties.rs
@@ -21,7 +21,7 @@ pub async fn properties(#[context] ctx: RpcContext, #[arg] id: PackageId) -> Res
#[instrument(skip_all)]
pub async fn fetch_properties(ctx: RpcContext, id: PackageId) -> Result {
- let peek = ctx.db.peek().await?;
+ let peek = ctx.db.peek().await;
let manifest = peek
.as_package_data()
diff --git a/backend/src/registry/admin.rs b/backend/src/registry/admin.rs
index f6eecc1f2..44b83d161 100644
--- a/backend/src/registry/admin.rs
+++ b/backend/src/registry/admin.rs
@@ -52,7 +52,7 @@ async fn do_index(
pkg: &Package,
) -> Result<(), Error> {
url.set_path("/admin/v0/index");
- let mut req = httpc
+ let req = httpc
.post(url)
.header(header::ACCEPT, "text/plain")
.basic_auth(user, Some(pass))
@@ -74,7 +74,7 @@ async fn do_upload(
body: Body,
) -> Result<(), Error> {
url.set_path("/admin/v0/upload");
- let mut req = httpc
+ let req = httpc
.post(url)
.header(header::ACCEPT, "text/plain")
.basic_auth(user, Some(pass))
diff --git a/backend/src/registry/marketplace.rs b/backend/src/registry/marketplace.rs
index 6c0bcb96a..435350240 100644
--- a/backend/src/registry/marketplace.rs
+++ b/backend/src/registry/marketplace.rs
@@ -1,3 +1,4 @@
+use base64::Engine;
use color_eyre::eyre::eyre;
use reqwest::{StatusCode, Url};
use rpc_toolkit::command;
@@ -65,12 +66,11 @@ pub async fn get(#[context] ctx: RpcContext, #[arg] url: Url) -> Result Ok(Value::String(format!(
"data:{};base64,{}",
ctype,
- base64::encode_config(
+ base64::engine::general_purpose::URL_SAFE.encode(
&response
.bytes()
.await
- .with_kind(crate::ErrorKind::Registry)?,
- base64::URL_SAFE
+ .with_kind(crate::ErrorKind::Registry)?
)
))),
_ => Err(Error::new(
diff --git a/backend/src/s9pk/builder.rs b/backend/src/s9pk/builder.rs
index 24869564f..199742439 100644
--- a/backend/src/s9pk/builder.rs
+++ b/backend/src/s9pk/builder.rs
@@ -1,4 +1,4 @@
-use sha2_old::{Digest, Sha512};
+use sha2::{Digest, Sha512};
use tokio::io::{AsyncReadExt, AsyncSeekExt, AsyncWriteExt, SeekFrom};
use tracing::instrument;
use typed_builder::TypedBuilder;
@@ -43,7 +43,7 @@ impl<
{
/// BLOCKING
#[instrument(skip_all)]
- pub async fn pack(mut self, key: &ed25519_dalek::Keypair) -> Result<(), Error> {
+ pub async fn pack(mut self, key: &ed25519_dalek::SigningKey) -> Result<(), Error> {
let header_pos = self.writer.stream_position().await?;
if header_pos != 0 {
tracing::warn!("Appending to non-empty file.");
@@ -132,7 +132,7 @@ impl<
// header
let (hash, _) = writer.finish();
self.writer.seek(SeekFrom::Start(header_pos)).await?;
- header.pubkey = key.public.clone();
+ header.pubkey = key.into();
header.signature = key.sign_prehashed(hash, Some(SIG_CONTEXT))?;
header
.serialize(&mut self.writer)
diff --git a/backend/src/s9pk/header.rs b/backend/src/s9pk/header.rs
index 9e8bfae7e..4f77ad855 100644
--- a/backend/src/s9pk/header.rs
+++ b/backend/src/s9pk/header.rs
@@ -1,7 +1,7 @@
use std::collections::BTreeMap;
use color_eyre::eyre::eyre;
-use ed25519_dalek::{PublicKey, Signature};
+use ed25519_dalek::{Signature, VerifyingKey};
use tokio::io::{AsyncRead, AsyncReadExt, AsyncWriteExt};
use crate::Error;
@@ -11,15 +11,15 @@ pub const VERSION: u8 = 1;
#[derive(Debug)]
pub struct Header {
- pub pubkey: PublicKey,
+ pub pubkey: VerifyingKey,
pub signature: Signature,
pub table_of_contents: TableOfContents,
}
impl Header {
pub fn placeholder() -> Self {
Header {
- pubkey: PublicKey::default(),
- signature: Signature::from_bytes(&[0; 64]).expect("Invalid ed25519 signature"),
+ pubkey: VerifyingKey::default(),
+ signature: Signature::from_bytes(&[0; 64]),
table_of_contents: Default::default(),
}
}
@@ -28,7 +28,7 @@ impl Header {
writer.write_all(&MAGIC).await?;
writer.write_all(&[VERSION]).await?;
writer.write_all(self.pubkey.as_bytes()).await?;
- writer.write_all(self.signature.as_ref()).await?;
+ writer.write_all(&self.signature.to_bytes()).await?;
self.table_of_contents.serialize(writer).await?;
Ok(())
}
@@ -51,11 +51,11 @@ impl Header {
}
let mut pubkey_bytes = [0; 32];
reader.read_exact(&mut pubkey_bytes).await?;
- let pubkey = PublicKey::from_bytes(&pubkey_bytes)
+ let pubkey = VerifyingKey::from_bytes(&pubkey_bytes)
.map_err(|e| Error::new(e, crate::ErrorKind::ParseS9pk))?;
let mut sig_bytes = [0; 64];
reader.read_exact(&mut sig_bytes).await?;
- let signature = Signature::from_bytes(&sig_bytes).expect("Invalid ed25519 signature");
+ let signature = Signature::from_bytes(&sig_bytes);
let table_of_contents = TableOfContents::deserialize(reader).await?;
Ok(Header {
diff --git a/backend/src/s9pk/reader.rs b/backend/src/s9pk/reader.rs
index b5c1562ff..e901b1a14 100644
--- a/backend/src/s9pk/reader.rs
+++ b/backend/src/s9pk/reader.rs
@@ -7,11 +7,11 @@ use std::str::FromStr;
use std::task::{Context, Poll};
use color_eyre::eyre::eyre;
-use digest_old::Output;
-use ed25519_dalek::PublicKey;
+use digest::Output;
+use ed25519_dalek::VerifyingKey;
use futures::TryStreamExt;
use models::ImageId;
-use sha2_old::{Digest, Sha512};
+use sha2::{Digest, Sha512};
use tokio::fs::File;
use tokio::io::{AsyncRead, AsyncReadExt, AsyncSeek, AsyncSeekExt, ReadBuf};
use tracing::instrument;
@@ -147,7 +147,7 @@ impl FromStr for ImageTag {
pub struct S9pkReader {
hash: Option>,
hash_string: Option,
- developer_key: PublicKey,
+ developer_key: VerifyingKey,
toc: TableOfContents,
pos: u64,
rdr: R,
@@ -333,7 +333,7 @@ impl S9pkReader {
self.hash_string.as_ref().map(|s| s.as_str())
}
- pub fn developer_key(&self) -> &PublicKey {
+ pub fn developer_key(&self) -> &VerifyingKey {
&self.developer_key
}
diff --git a/backend/src/setup.rs b/backend/src/setup.rs
index e789aba26..f9e897d01 100644
--- a/backend/src/setup.rs
+++ b/backend/src/setup.rs
@@ -59,11 +59,11 @@ async fn setup_init(
let mut secrets_handle = secret_store.acquire().await?;
let mut secrets_tx = secrets_handle.begin().await?;
- let mut account = AccountInfo::load(&mut secrets_tx).await?;
+ let mut account = AccountInfo::load(secrets_tx.as_mut()).await?;
if let Some(password) = password {
account.set_password(&password)?;
- account.save(&mut secrets_tx).await?;
+ account.save(secrets_tx.as_mut()).await?;
db.mutate(|m| {
m.as_server_info_mut()
.as_password_hash_mut()
diff --git a/backend/src/shutdown.rs b/backend/src/shutdown.rs
index 4941915fc..98465f454 100644
--- a/backend/src/shutdown.rs
+++ b/backend/src/shutdown.rs
@@ -13,8 +13,7 @@ use crate::{Error, OS_ARCH};
#[derive(Debug, Clone)]
pub struct Shutdown {
- pub datadir: PathBuf,
- pub disk_guid: Option>,
+ pub export_args: Option<(Arc, PathBuf)>,
pub restart: bool,
}
impl Shutdown {
@@ -55,8 +54,8 @@ impl Shutdown {
tracing::debug!("{:?}", e);
}
}
- if let Some(guid) = &self.disk_guid {
- if let Err(e) = export(guid, &self.datadir).await {
+ if let Some((guid, datadir)) = &self.export_args {
+ if let Err(e) = export(guid, datadir).await {
tracing::error!("Error Exporting Volume Group: {}", e);
tracing::debug!("{:?}", e);
}
@@ -93,8 +92,7 @@ impl Shutdown {
pub async fn shutdown(#[context] ctx: RpcContext) -> Result<(), Error> {
ctx.shutdown
.send(Some(Shutdown {
- datadir: ctx.datadir.clone(),
- disk_guid: Some(ctx.disk_guid.clone()),
+ export_args: Some((ctx.disk_guid.clone(), ctx.datadir.clone())),
restart: false,
}))
.map_err(|_| ())
@@ -106,8 +104,7 @@ pub async fn shutdown(#[context] ctx: RpcContext) -> Result<(), Error> {
pub async fn restart(#[context] ctx: RpcContext) -> Result<(), Error> {
ctx.shutdown
.send(Some(Shutdown {
- datadir: ctx.datadir.clone(),
- disk_guid: Some(ctx.disk_guid.clone()),
+ export_args: Some((ctx.disk_guid.clone(), ctx.datadir.clone())),
restart: true,
}))
.map_err(|_| ())
diff --git a/backend/src/status/mod.rs b/backend/src/status/mod.rs
index f6290be12..2a5a9391f 100644
--- a/backend/src/status/mod.rs
+++ b/backend/src/status/mod.rs
@@ -16,8 +16,6 @@ pub struct Status {
pub configured: bool,
pub main: MainStatus,
#[serde(default)]
- pub dependency_errors: BTreeMap<(), ()>, // TODO: remove
- #[serde(default)]
pub dependency_config_errors: DependencyConfigErrors,
}
diff --git a/backend/src/system.rs b/backend/src/system.rs
index 6f05b6b73..aee32b50a 100644
--- a/backend/src/system.rs
+++ b/backend/src/system.rs
@@ -23,8 +23,6 @@ use crate::util::serde::{display_serializable, IoFormat};
use crate::util::{display_none, Invoke};
use crate::{Error, ErrorKind, ResultExt};
-pub const SYSTEMD_UNIT: &'static str = "startd";
-
#[command(subcommands(zram))]
pub async fn experimental() -> Result<(), Error> {
Ok(())
@@ -60,7 +58,7 @@ pub async fn enable_zram() -> Result<(), Error> {
#[command(display(display_none))]
pub async fn zram(#[context] ctx: RpcContext, #[arg] enable: bool) -> Result<(), Error> {
- let db = ctx.db.peek().await?;
+ let db = ctx.db.peek().await;
let zram = db.as_server_info().as_zram().de()?;
if enable == zram {
@@ -130,7 +128,7 @@ pub async fn logs_nofollow(
_ctx: (),
(limit, cursor, before, _): (Option, Option, bool, bool),
) -> Result {
- fetch_logs(LogSource::Service(SYSTEMD_UNIT), limit, cursor, before).await
+ fetch_logs(LogSource::System, limit, cursor, before).await
}
#[command(rpc_only, rename = "follow", display(display_none))]
@@ -138,7 +136,7 @@ pub async fn logs_follow(
#[context] ctx: RpcContext,
#[parent_data] (limit, _, _, _): (Option, Option, bool, bool),
) -> Result {
- follow_logs(ctx, LogSource::Service(SYSTEMD_UNIT), limit).await
+ follow_logs(ctx, LogSource::System, limit).await
}
#[command(
@@ -590,7 +588,8 @@ async fn get_temp() -> Result {
.flat_map(|(_, v)| v.as_object())
.flatten()
.filter_map(|(k, v)| {
- if k.ends_with("_input") {
+ // we have seen so far that `temp1` is always a composite reading of some sort, so we should just use that for each chip
+ if k.trim() == "temp1_input" {
v.as_f64()
} else {
None
diff --git a/backend/src/update/mod.rs b/backend/src/update/mod.rs
index 6e3d3e3b0..814a27b1d 100644
--- a/backend/src/update/mod.rs
+++ b/backend/src/update/mod.rs
@@ -76,7 +76,7 @@ fn display_update_result(status: UpdateResult, _: &ArgMatches) {
#[instrument(skip_all)]
async fn maybe_do_update(ctx: RpcContext, marketplace_url: Url) -> Result, Error> {
- let peeked = ctx.db.peek().await?;
+ let peeked = ctx.db.peek().await;
let latest_version: Version = ctx
.client
.get(with_query_params(
@@ -154,7 +154,7 @@ async fn maybe_do_update(ctx: RpcContext, marketplace_url: Url) -> Result );
+impl std::fmt::Display for Governor {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ self.0.fmt(f)
+ }
+}
+impl std::ops::Deref for Governor {
+ type Target = str;
+ fn deref(&self) -> &Self::Target {
+ &*self.0
+ }
+}
+impl std::borrow::Borrow for Governor {
+ fn borrow(&self) -> &str {
+ &**self
+ }
+}
+
+pub async fn get_available_governors() -> Result, Error> {
+ let raw = String::from_utf8(
+ Command::new("cpupower")
+ .arg("frequency-info")
+ .arg("-g")
+ .invoke(ErrorKind::CpuSettings)
+ .await?,
+ )?;
+ let mut for_cpu: OrdMap> = OrdMap::new();
+ let mut current_cpu = None;
+ for line in raw.lines() {
+ if line.starts_with("analyzing") {
+ current_cpu = Some(
+ sscanf::sscanf!(line, "analyzing CPU {u32}:")
+ .map_err(|e| eyre!("{e}"))
+ .with_kind(ErrorKind::ParseSysInfo)?,
+ );
+ } else if let Some(rest) = line
+ .trim()
+ .strip_prefix("available cpufreq governors:")
+ .map(|s| s.trim())
+ {
+ if rest != "Not Available" {
+ for_cpu
+ .entry(current_cpu.ok_or_else(|| {
+ Error::new(
+ eyre!("governors listed before cpu"),
+ ErrorKind::ParseSysInfo,
+ )
+ })?)
+ .or_default()
+ .extend(
+ rest.split_ascii_whitespace()
+ .map(|g| Governor(Cow::Owned(g.to_owned()))),
+ );
+ }
+ }
+ }
+ Ok(for_cpu
+ .into_iter()
+ .fold(None, |acc: Option>, (_, x)| {
+ if let Some(acc) = acc {
+ Some(acc.intersection(&x).cloned().collect())
+ } else {
+ Some(x)
+ }
+ })
+ .unwrap_or_default()) // include only governors available for ALL cpus
+}
+
+pub async fn current_governor() -> Result, Error> {
+ let Some(raw) = Command::new("cpupower")
+ .arg("frequency-info")
+ .arg("-p")
+ .invoke(ErrorKind::CpuSettings)
+ .await
+ .and_then(|s| Ok(Some(String::from_utf8(s)?)))
+ .or_else(|e| {
+ if e.source
+ .to_string()
+ .contains("Unable to determine current policy")
+ {
+ Ok(None)
+ } else {
+ Err(e)
+ }
+ })?
+ else {
+ return Ok(None);
+ };
+
+ for line in raw.lines() {
+ if let Some(governor) = line
+ .trim()
+ .strip_prefix("The governor \"")
+ .and_then(|s| s.strip_suffix("\" may decide which speed to use"))
+ {
+ return Ok(Some(Governor(Cow::Owned(governor.to_owned()))));
+ }
+ }
+ Err(Error::new(
+ eyre!("Failed to parse cpupower output:\n{raw}"),
+ ErrorKind::ParseSysInfo,
+ ))
+}
+
+pub async fn set_governor(governor: &Governor) -> Result<(), Error> {
+ Command::new("cpupower")
+ .arg("frequency-set")
+ .arg("-g")
+ .arg(&*governor.0)
+ .invoke(ErrorKind::CpuSettings)
+ .await?;
+ Ok(())
+}
diff --git a/backend/src/util/crypto.rs b/backend/src/util/crypto.rs
new file mode 100644
index 000000000..ba9f68599
--- /dev/null
+++ b/backend/src/util/crypto.rs
@@ -0,0 +1,13 @@
+use ed25519_dalek::hazmat::ExpandedSecretKey;
+use ed25519_dalek::{SecretKey, EXPANDED_SECRET_KEY_LENGTH};
+
+#[inline]
+pub fn ed25519_expand_key(key: &SecretKey) -> [u8; EXPANDED_SECRET_KEY_LENGTH] {
+ let key = ExpandedSecretKey::from(key);
+
+ let mut bytes: [u8; 64] = [0u8; 64];
+
+ bytes[..32].copy_from_slice(key.scalar.as_bytes());
+ bytes[32..].copy_from_slice(&key.hash_prefix[..]);
+ bytes
+}
diff --git a/backend/src/util/io.rs b/backend/src/util/io.rs
index a2fa84342..282a2db8e 100644
--- a/backend/src/util/io.rs
+++ b/backend/src/util/io.rs
@@ -143,7 +143,7 @@ where
{
let mut buffer = Vec::new();
reader.read_to_end(&mut buffer).await?;
- serde_toml::from_slice(&buffer)
+ serde_toml::from_str(std::str::from_utf8(&buffer)?)
.map_err(color_eyre::eyre::Error::from)
.with_kind(crate::ErrorKind::Deserialization)
}
@@ -153,7 +153,9 @@ where
T: serde::Serialize,
W: AsyncWrite + Unpin,
{
- let mut buffer = serde_toml::to_vec(value).with_kind(crate::ErrorKind::Serialization)?;
+ let mut buffer = serde_toml::to_string(value)
+ .with_kind(crate::ErrorKind::Serialization)?
+ .into_bytes();
buffer.extend_from_slice(b"\n");
writer.write_all(&buffer).await?;
Ok(())
diff --git a/backend/src/util/logger.rs b/backend/src/util/logger.rs
index 8208f7de6..c7ab41ba2 100644
--- a/backend/src/util/logger.rs
+++ b/backend/src/util/logger.rs
@@ -10,13 +10,28 @@ impl EmbassyLogger {
use tracing_subscriber::prelude::*;
use tracing_subscriber::{fmt, EnvFilter};
- let filter_layer = EnvFilter::from_default_env();
+ let filter_layer = EnvFilter::builder()
+ .with_default_directive(
+ format!("{}=info", std::module_path!().split("::").next().unwrap())
+ .parse()
+ .unwrap(),
+ )
+ .from_env_lossy();
+ #[cfg(feature = "unstable")]
+ let filter_layer = filter_layer
+ .add_directive("tokio=trace".parse().unwrap())
+ .add_directive("runtime=trace".parse().unwrap());
let fmt_layer = fmt::layer().with_target(true);
- tracing_subscriber::registry()
+ let sub = tracing_subscriber::registry()
.with(filter_layer)
.with(fmt_layer)
- .with(ErrorLayer::default())
+ .with(ErrorLayer::default());
+
+ #[cfg(feature = "unstable")]
+ let sub = sub.with(console_subscriber::spawn());
+
+ sub
}
pub fn init() -> Self {
Self::base_subscriber().init();
diff --git a/backend/src/util/mod.rs b/backend/src/util/mod.rs
index 90b6ddcdf..c6978802d 100644
--- a/backend/src/util/mod.rs
+++ b/backend/src/util/mod.rs
@@ -6,6 +6,7 @@ use std::pin::Pin;
use std::process::Stdio;
use std::sync::Arc;
use std::task::{Context, Poll};
+use std::time::Duration;
use async_trait::async_trait;
use clap::ArgMatches;
@@ -16,7 +17,7 @@ pub use helpers::NonDetachingJoinHandle;
use lazy_static::lazy_static;
pub use models::Version;
use pin_project::pin_project;
-use sha2_old::Digest;
+use sha2::Digest;
use tokio::fs::File;
use tokio::sync::{Mutex, OwnedMutexGuard, RwLock};
use tracing::instrument;
@@ -24,12 +25,14 @@ use tracing::instrument;
use crate::shutdown::Shutdown;
use crate::{Error, ErrorKind, ResultExt as _};
pub mod config;
+pub mod cpupower;
pub mod docker;
pub mod http_reader;
pub mod io;
pub mod logger;
pub mod lshw;
pub mod serde;
+pub mod crypto;
#[derive(Clone, Copy, Debug, ::serde::Deserialize, ::serde::Serialize)]
pub enum Never {}
@@ -49,13 +52,31 @@ impl std::error::Error for Never {}
#[async_trait::async_trait]
pub trait Invoke {
async fn invoke(&mut self, error_kind: crate::ErrorKind) -> Result, Error>;
+ async fn invoke_timeout(
+ &mut self,
+ error_kind: crate::ErrorKind,
+ timeout: Option,
+ ) -> Result, Error>;
}
#[async_trait::async_trait]
impl Invoke for tokio::process::Command {
async fn invoke(&mut self, error_kind: crate::ErrorKind) -> Result, Error> {
+ self.invoke_timeout(error_kind, None).await
+ }
+ async fn invoke_timeout(
+ &mut self,
+ error_kind: crate::ErrorKind,
+ timeout: Option,
+ ) -> Result, Error> {
+ self.kill_on_drop(true);
self.stdout(Stdio::piped());
self.stderr(Stdio::piped());
- let res = self.output().await?;
+ let res = match timeout {
+ None => self.output().await?,
+ Some(t) => tokio::time::timeout(t, self.output())
+ .await
+ .with_kind(ErrorKind::Timeout)??,
+ };
crate::ensure_code!(
res.status.success(),
error_kind,
diff --git a/backend/src/util/serde.rs b/backend/src/util/serde.rs
index 856923c09..4a6f7551b 100644
--- a/backend/src/util/serde.rs
+++ b/backend/src/util/serde.rs
@@ -97,20 +97,25 @@ pub fn serialize_display_opt(
}
pub mod ed25519_pubkey {
- use ed25519_dalek::PublicKey;
+ use ed25519_dalek::VerifyingKey;
use serde::de::{Error, Unexpected, Visitor};
use serde::{Deserializer, Serializer};
- pub fn serialize(pubkey: &PublicKey, serializer: S) -> Result {
+ pub fn serialize(
+ pubkey: &VerifyingKey,
+ serializer: S,
+ ) -> Result {
serializer.serialize_str(&base32::encode(
base32::Alphabet::RFC4648 { padding: true },
pubkey.as_bytes(),
))
}
- pub fn deserialize<'de, D: Deserializer<'de>>(deserializer: D) -> Result {
+ pub fn deserialize<'de, D: Deserializer<'de>>(
+ deserializer: D,
+ ) -> Result {
struct PubkeyVisitor;
impl<'de> Visitor<'de> for PubkeyVisitor {
- type Value = ed25519_dalek::PublicKey;
+ type Value = ed25519_dalek::VerifyingKey;
fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(formatter, "an RFC4648 encoded string")
}
@@ -118,10 +123,13 @@ pub mod ed25519_pubkey {
where
E: Error,
{
- PublicKey::from_bytes(
- &base32::decode(base32::Alphabet::RFC4648 { padding: true }, v).ok_or(
- Error::invalid_value(Unexpected::Str(v), &"an RFC4648 encoded string"),
- )?,
+ VerifyingKey::from_bytes(
+ &<[u8; 32]>::try_from(
+ base32::decode(base32::Alphabet::RFC4648 { padding: true }, v).ok_or(
+ Error::invalid_value(Unexpected::Str(v), &"an RFC4648 encoded string"),
+ )?,
+ )
+ .map_err(|e| Error::invalid_length(e.len(), &"32 bytes"))?,
)
.map_err(Error::custom)
}
@@ -312,11 +320,12 @@ impl IoFormat {
.with_kind(crate::ErrorKind::Serialization),
IoFormat::Toml => writer
.write_all(
- &serde_toml::to_vec(
+ serde_toml::to_string(
&serde_toml::Value::try_from(value)
.with_kind(crate::ErrorKind::Serialization)?,
)
- .with_kind(crate::ErrorKind::Serialization)?,
+ .with_kind(crate::ErrorKind::Serialization)?
+ .as_bytes(),
)
.with_kind(crate::ErrorKind::Serialization),
IoFormat::TomlPretty => writer
@@ -346,10 +355,11 @@ impl IoFormat {
.with_kind(crate::ErrorKind::Serialization)?;
Ok(res)
}
- IoFormat::Toml => serde_toml::to_vec(
+ IoFormat::Toml => serde_toml::to_string(
&serde_toml::Value::try_from(value).with_kind(crate::ErrorKind::Serialization)?,
)
- .with_kind(crate::ErrorKind::Serialization),
+ .with_kind(crate::ErrorKind::Serialization)
+ .map(|s| s.into_bytes()),
IoFormat::TomlPretty => serde_toml::to_string_pretty(
&serde_toml::Value::try_from(value).with_kind(crate::ErrorKind::Serialization)?,
)
@@ -408,7 +418,8 @@ impl IoFormat {
serde_cbor::de::from_reader(slice).with_kind(crate::ErrorKind::Deserialization)
}
IoFormat::Toml | IoFormat::TomlPretty => {
- serde_toml::from_slice(slice).with_kind(crate::ErrorKind::Deserialization)
+ serde_toml::from_str(std::str::from_utf8(slice)?)
+ .with_kind(crate::ErrorKind::Deserialization)
}
}
}
diff --git a/backend/src/version/mod.rs b/backend/src/version/mod.rs
index 0e479bc94..ca5d4ab3d 100644
--- a/backend/src/version/mod.rs
+++ b/backend/src/version/mod.rs
@@ -16,8 +16,8 @@ pub type Current = v0_4_0::Version;
#[derive(serde::Serialize, serde::Deserialize, Debug, Clone)]
#[serde(untagged)]
enum Version {
- LT0_3_4_3(LTWrapper),
- V0_3_4_3(Wrapper),
+ LT0_3_5(LTWrapper),
+ V0_3_5(Wrapper),
V0_4_0(Wrapper),
Other(emver::Version),
}
@@ -34,8 +34,8 @@ impl Version {
#[cfg(test)]
fn as_sem_ver(&self) -> emver::Version {
match self {
- Version::LT0_3_4_3(LTWrapper(_, x)) => x.clone(),
- Version::V0_3_4_3(Wrapper(x)) => x.semver(),
+ Version::LT0_3_5(LTWrapper(_, x)) => x.clone(),
+ Version::V0_3_5(Wrapper(x)) => x.semver(),
Version::V0_4_0(Wrapper(x)) => x.semver(),
Version::Other(x) => x.clone(),
}
@@ -179,16 +179,16 @@ where
}
pub async fn init(db: &PatchDb, secrets: &PgPool) -> Result<(), Error> {
- let version = Version::from_util_version(db.peek().await?.as_server_info().as_version().de()?);
+ let version = Version::from_util_version(db.peek().await.as_server_info().as_version().de()?);
match version {
- Version::LT0_3_4_3(_) => {
+ Version::LT0_3_5(_) => {
return Err(Error::new(
- eyre!("Cannot migrate from pre-0.3.4. Please update to v0.3.4 first."),
+ eyre!("Cannot migrate from pre-0.3.5. Please update to v0.3.5 first."),
crate::ErrorKind::MigrationFailed,
));
}
- Version::V0_3_4_3(v) => v.0.migrate_to(&Current::new(), db, secrets).await?,
+ Version::V0_3_5(v) => v.0.migrate_to(&Current::new(), db, secrets).await?,
Version::V0_4_0(v) => v.0.migrate_to(&Current::new(), db, secrets).await?,
Version::Other(_) => {
return Err(Error::new(
@@ -223,14 +223,14 @@ mod tests {
fn versions() -> impl Strategy {
prop_oneof![
em_version().prop_map(|v| if v < v0_3_5::Version::new().semver() {
- Version::LT0_3_4_3(LTWrapper(v0_3_5::Version::new(), v))
+ Version::LT0_3_5(LTWrapper(v0_3_5::Version::new(), v))
} else {
- Version::LT0_3_4_3(LTWrapper(
+ Version::LT0_3_5(LTWrapper(
v0_3_5::Version::new(),
emver::Version::new(0, 3, 0, 0),
))
}),
- Just(Version::V0_3_4_3(Wrapper(v0_3_5::Version::new()))),
+ Just(Version::V0_3_5(Wrapper(v0_3_5::Version::new()))),
Just(Version::V0_4_0(Wrapper(v0_4_0::Version::new()))),
em_version().prop_map(Version::Other),
]
diff --git a/backend/update-sqlx-data.sh b/backend/update-sqlx-data.sh
index 46dc26a0e..1b00498a2 100755
--- a/backend/update-sqlx-data.sh
+++ b/backend/update-sqlx-data.sh
@@ -15,7 +15,7 @@ docker run -d --rm --name=tmp_postgres -e POSTGRES_PASSWORD=password -v $TMP_DIR
PG_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' tmp_postgres)
DATABASE_URL=postgres://postgres:password@$PG_IP/postgres cargo sqlx migrate run
- DATABASE_URL=postgres://postgres:password@$PG_IP/postgres cargo sqlx prepare -- --lib --profile=test
+ DATABASE_URL=postgres://postgres:password@$PG_IP/postgres OS_ARCH=$(uname -m) cargo sqlx prepare -- --lib --profile=test
)
docker stop tmp_postgres
diff --git a/build/lib/depends b/build/lib/depends
index b64d81ba8..263a7d65d 100644
--- a/build/lib/depends
+++ b/build/lib/depends
@@ -9,6 +9,7 @@ cifs-utils
containerd.io
cryptsetup
curl
+dmidecode
docker-ce
docker-ce-cli
docker-compose-plugin
@@ -16,7 +17,10 @@ dosfstools
e2fsprogs
ecryptfs-utils
exfatprogs
+flashrom
+gdb
grub-common
+heaptrack
htop
httpdirfs
iotop
@@ -24,6 +28,7 @@ iw
jq
libavahi-client3
libyajl2
+linux-cpupower
lm-sensors
lshw
lvm2
diff --git a/build/lib/firmware/librem_mini_v2/PureBoot-Release-28.1.rom.gz b/build/lib/firmware/librem_mini_v2/PureBoot-Release-28.1.rom.gz
new file mode 100644
index 000000000..3e5376759
Binary files /dev/null and b/build/lib/firmware/librem_mini_v2/PureBoot-Release-28.1.rom.gz differ
diff --git a/build/lib/motd b/build/lib/motd
old mode 100644
new mode 100755
diff --git a/build/lib/scripts/chroot-and-upgrade b/build/lib/scripts/chroot-and-upgrade
index 355e8be1c..f95e49924 100755
--- a/build/lib/scripts/chroot-and-upgrade
+++ b/build/lib/scripts/chroot-and-upgrade
@@ -5,9 +5,10 @@ if [ "$UID" -ne 0 ]; then
exit 1
fi
-echo 'Syncing...'
-
-rsync -a --delete --force --info=progress2 /media/embassy/embassyfs/current/ /media/embassy/next
+if [ -z "$NO_SYNC" ]; then
+ echo 'Syncing...'
+ rsync -a --delete --force --info=progress2 /media/embassy/embassyfs/current/ /media/embassy/next
+fi
mkdir -p /media/embassy/next/run
mkdir -p /media/embassy/next/dev
diff --git a/build/lib/scripts/enable-kiosk b/build/lib/scripts/enable-kiosk
index 3e6d0992d..d07fc29b3 100755
--- a/build/lib/scripts/enable-kiosk
+++ b/build/lib/scripts/enable-kiosk
@@ -6,35 +6,79 @@ set -e
/usr/bin/apt update
/usr/bin/apt install --no-install-recommends -y xserver-xorg x11-xserver-utils xinit firefox-esr matchbox-window-manager libnss3-tools
+#Change a default preference set by stock debian firefox-esr
+sed -i 's|^pref("extensions.update.enabled", true);$|pref("extensions.update.enabled", false);|' /etc/firefox-esr/firefox-esr.js
+
+if ! id kiosk; then
+ # create kiosk user
+ useradd -s /bin/bash --create-home kiosk
+fi
+
# create kiosk script
-cat > /home/start9/kiosk.sh << 'EOF'
+cat > /home/kiosk/kiosk.sh << 'EOF'
#!/bin/sh
PROFILE=$(mktemp -d)
if [ -f /usr/local/share/ca-certificates/startos-root-ca.crt ]; then
certutil -A -n "StartOS Local Root CA" -t "TCu,Cuw,Tuw" -i /usr/local/share/ca-certificates/startos-root-ca.crt -d $PROFILE
fi
cat >> $PROFILE/prefs.js << EOT
-user_pref("network.proxy.autoconfig_url", "file:///usr/lib/embassy/proxy.pac");
-user_pref("network.proxy.socks_remote_dns", true);
-user_pref("network.proxy.type", 2);
-user_pref("dom.securecontext.allowlist_onions", true);
-user_pref("dom.securecontext.whitelist_onions", true);
-user_pref("signon.rememberSignons", false);
-user_pref("extensions.activeThemeID", "firefox-compact-dark@mozilla.org");
-user_pref("browser.theme.content-theme", 0);
-user_pref("browser.theme.toolbar-theme", 0);
-user_pref("datareporting.policy.firstRunURL", "");
+user_pref("app.normandy.api_url", "");
+user_pref("app.normandy.enabled", false);
+user_pref("app.shield.optoutstudies.enabled", false);
+user_pref("app.update.enabled", false);
+user_pref("browser.aboutHomeSnippets.updateUrl", "");
+user_pref("browser.bookmarks.addedImportButton", false);
+user_pref("browser.casting.enabled", false);
+user_pref("browser.crashReports.unsubmittedCheck.autoSubmit2", false);
+user_pref("browser.newtabpage.activity-stream.feeds.asrouterfeed", false);
+user_pref("browser.newtabpage.activity-stream.feeds.topsites", false);
+user_pref("browser.newtabpage.activity-stream.showSponsoredTopSites", false);
+user_pref("browser.onboarding.enabled", false);
+user_pref("browser.ping-centre.telemetry", false);
+user_pref("browser.pocket.enabled", false);
+user_pref("browser.safebrowsing.blockedURIs.enabled", false);
user_pref("browser.safebrowsing.malware.enabled", false);
user_pref("browser.safebrowsing.phishing.enabled", false);
+user_pref("browser.safebrowsing.downloads.remote.block_potentially_unwanted", false);
+user_pref("browser.safebrowsing.downloads.remote.block_uncommon", false);
+user_pref("browser.safebrowsing.downloads.remote.enabled", false);
+user_pref("browser.search.geoip.url", "");
+user_pref("browser.search.update", false);
+user_pref("browser.search.suggest.enabled", false);
+user_pref("browser.startup.homepage_override.mstone", "ignore");
+user_pref("browser.theme.content-theme", 0);
+user_pref("browser.theme.toolbar-theme", 0);
+user_pref("browser.urlbar.groupLabels.enabled", false);
+user_pref("browser.urlbar.suggest.searches" false);
+user_pref("datareporting.policy.firstRunURL", "");
user_pref("datareporting.healthreport.service.enabled", false);
user_pref("datareporting.healthreport.uploadEnabled", false);
user_pref("datareporting.policy.dataSubmissionEnabled", false);
-user_pref("datareporting.policy.dataSubmissionEnabled", false);
-user_pref("browser.crashReports.unsubmittedCheck.autoSubmit2", false);
-user_pref("browser.ping-centre.telemetry", false);
-user_pref("browser.onboarding.enabled", false);
+user_pref("dom.securecontext.allowlist_onions", true);
+user_pref("dom.securecontext.whitelist_onions", true);
+user_pref("experiments.enabled", false);
+user_pref("experiments.activeExperiment", false);
+user_pref("experiments.supported", false);
+user_pref("extensions.activeThemeID", "firefox-compact-dark@mozilla.org");
+user_pref("extensions.blocklist.enabled", false);
+user_pref("extensions.getAddons.cache.enabled", false);
+user_pref("extensions.pocket.enabled", false);
+user_pref("extensions.update.enabled", false);
+user_pref("extensions.shield-recipe-client.enabled", false);
+user_pref("extensions.shield-recipe-client.user_id", "");
+user_pref("extensions.shield-recipe-client.api_url", "");
+user_pref("media.gmp-gmpopenh264.enabled", false);
+user_pref("messaging-system.rsexperimentloader.enabled", false);
+user_pref("network.allow-experiments", false);
+user_pref("network.captive-portal-service.enabled", false);
+user_pref("network.connectivity-service.enabled", false);
+user_pref("network.proxy.autoconfig_url", "file:///usr/lib/embassy/proxy.pac");
+user_pref("network.proxy.socks_remote_dns", true);
+user_pref("network.proxy.type", 2);
+user_pref("signon.rememberSignons", false);
user_pref("toolkit.telemetry.archive.enabled", false);
user_pref("toolkit.telemetry.bhrPing.enabled", false);
+user_pref("toolkit.telemetry.coverage.opt-out", true);
user_pref("toolkit.telemetry.enabled", false);
user_pref("toolkit.telemetry.firstShutdownPing.enabled", false);
user_pref("toolkit.telemetry.newProfilePing.enabled", false);
@@ -43,16 +87,6 @@ user_pref("toolkit.telemetry.shutdownPingSender.enabled", false);
user_pref("toolkit.telemetry.unified", false);
user_pref("toolkit.telemetry.updatePing.enabled", false);
user_pref("toolkit.telemetry.cachedClientID", "");
-user_pref("experiments.enabled", false);
-user_pref("experiments.activeExperiment", false);
-user_pref("experiments.supported", false);
-user_pref("network.allow-experiments", false);
-user_pref("extensions.shield-recipe-client.enabled", false);
-user_pref("extensions.shield-recipe-client.user_id", "");
-user_pref("extensions.shield-recipe-client.api_url", "");
-user_pref("app.normandy.enabled", false);
-user_pref("app.normandy.api_url", "");
-user_pref("app.shield.optoutstudies.enabled", true);
EOT
while ! curl "http://localhost" > /dev/null; do
sleep 1
@@ -70,11 +104,11 @@ matchbox-window-manager -use_titlebar no &
firefox-esr http://localhost --profile $PROFILE
rm -rf $PROFILE
EOF
-chmod +x /home/start9/kiosk.sh
+chmod +x /home/kiosk/kiosk.sh
# use kiosk if tty (not pts)
-if ! grep -q 'kiosk' /home/start9/.profile; then
-cat >> /home/start9/.profile << 'EOF'
+if ! grep -q 'kiosk' /home/kiosk/.profile; then
+cat >> /home/kiosk/.profile << 'EOF'
# Use kiosk for TTY
if [[ "$(tty)" =~ ^/dev/tty ]]; then
exec startx "$HOME/kiosk.sh"
@@ -87,7 +121,7 @@ mkdir -p /etc/systemd/system/getty@tty1.service.d
cat > /etc/systemd/system/getty@tty1.service.d/autologin.conf << 'EOF'
[Service]
ExecStart=
-ExecStart=-/sbin/agetty --autologin start9 --noclear %I $TERM
+ExecStart=-/sbin/agetty --autologin kiosk --noclear %I $TERM
EOF
ln -fs /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.service
diff --git a/build/lib/scripts/postinst b/build/lib/scripts/postinst
index 2b0e09a12..171924a9c 100755
--- a/build/lib/scripts/postinst
+++ b/build/lib/scripts/postinst
@@ -76,6 +76,7 @@ sed -i '/\(^\|#\)Storage=/c\Storage=persistent' /etc/systemd/journald.conf
sed -i '/\(^\|#\)Compress=/c\Compress=yes' /etc/systemd/journald.conf
sed -i '/\(^\|#\)SystemMaxUse=/c\SystemMaxUse=1G' /etc/systemd/journald.conf
sed -i '/\(^\|#\)ForwardToSyslog=/c\ForwardToSyslog=no' /etc/systemd/journald.conf
+sed -i '/^\s*#\?\s*issue_discards\s*=\s*/c\issue_discards = 1' /etc/lvm/lvm.conf
mkdir -p /etc/docker
cat > /etc/docker/daemon.json << EOF
{
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 2923d27c1..08fcd429d 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "startos-ui",
- "version": "0.3.4.4",
- "lockfileVersion": 2,
+ "version": "0.3.5",
+ "lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "startos-ui",
- "version": "0.3.4.4",
+ "version": "0.3.5",
"dependencies": {
"@angular/animations": "^14.1.0",
"@angular/common": "^14.1.0",
@@ -39,6 +39,7 @@
"cron": "^2.2.0",
"cronstrue": "^2.21.0",
"dompurify": "^2.3.6",
+ "fast-deep-equal": "^3.1.3",
"fast-json-patch": "^3.1.1",
"fuse.js": "^6.4.6",
"jose": "^4.9.0",
@@ -6782,55 +6783,37 @@
"url": "https://github.com/sindresorhus/execa?sponsor=1"
}
},
- "node_modules/default-gateway/node_modules/human-signals": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
- "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
- "dev": true,
- "engines": {
- "node": ">=10.17.0"
- }
- },
- "node_modules/default-gateway/node_modules/is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/default-gateway/node_modules/mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/default-gateway/node_modules/npm-run-path": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "node_modules/define-data-property": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz",
+ "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==",
"dev": true,
"dependencies": {
- "path-key": "^3.0.0"
+ "get-intrinsic": "^1.2.1",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.0"
},
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/define-lazy-prop": {
+ "version": "2.0.0",
+ "devOptional": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
- "node_modules/default-gateway/node_modules/onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "node_modules/define-properties": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
"dev": true,
"dependencies": {
- "mimic-fn": "^2.1.0"
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
},
"engines": {
"node": ">=6"
@@ -8476,6 +8459,18 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
@@ -8536,6 +8531,18 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/has-symbols": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
diff --git a/frontend/package.json b/frontend/package.json
index 942498e87..9c510aaca 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -1,6 +1,6 @@
{
"name": "startos-ui",
- "version": "0.3.4.4",
+ "version": "0.3.5",
"author": "Start9 Labs, Inc",
"homepage": "https://start9.com/",
"scripts": {
@@ -63,6 +63,7 @@
"cron": "^2.2.0",
"cronstrue": "^2.21.0",
"dompurify": "^2.3.6",
+ "fast-deep-equal": "^3.1.3",
"fast-json-patch": "^3.1.1",
"fuse.js": "^6.4.6",
"jose": "^4.9.0",
diff --git a/frontend/projects/install-wizard/src/app/pages/home/home.page.html b/frontend/projects/install-wizard/src/app/pages/home/home.page.html
index d1ebe43b5..5bdaee493 100644
--- a/frontend/projects/install-wizard/src/app/pages/home/home.page.html
+++ b/frontend/projects/install-wizard/src/app/pages/home/home.page.html
@@ -2,8 +2,8 @@
-
-
+
+
diff --git a/frontend/projects/setup-wizard/src/app/pages/home/home.page.html b/frontend/projects/setup-wizard/src/app/pages/home/home.page.html
index 3c803bb34..ab517cbcb 100644
--- a/frontend/projects/setup-wizard/src/app/pages/home/home.page.html
+++ b/frontend/projects/setup-wizard/src/app/pages/home/home.page.html
@@ -4,13 +4,13 @@
-
+
-
+
+
+
+
+ {{ error }}
+
-
- {{ error }}
-
diff --git a/frontend/projects/ui/src/app/apps/login/login.page.scss b/frontend/projects/ui/src/app/apps/login/login.page.scss
index 27524ee79..690d97591 100644
--- a/frontend/projects/ui/src/app/apps/login/login.page.scss
+++ b/frontend/projects/ui/src/app/apps/login/login.page.scss
@@ -1,15 +1,5 @@
.content {
- --background: #222428;
-}
-
-.card {
- background: #414141;
-}
-
-.title {
- margin: 24px 0 16px;
- color: #e0e0e0;
- text-transform: uppercase;
+ --background: #333333;
}
.grid {
@@ -23,17 +13,6 @@
text-align: center;
}
-.logo {
- max-width: 240px;
- padding-bottom: 16px;
-}
-
-.error {
- display: block;
- text-align: left;
- padding-top: 4px;
-}
-
.banner {
position: absolute;
padding: 20px;
@@ -46,58 +25,52 @@
}
}
-.side-button {
- --border-radius: 0 4px 4px 0;
-}
-
-.login-item {
- --border-style: solid;
- --border-color: var(--ion-color-light);
- --border-radius: 4px 0 0 4px;
- box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14),
- 0 1px 5px 0 rgba(0, 0, 0, 0.12);
-
- .side-button {
- --border-radius: 4px;
- }
-}
-
ion-card {
- background: var(--ion-color-step-200);
- box-shadow: 0 4px 4px rgba(0, 0, 0, 0.25);
- border-radius: 44px;
+ background: #414141;
+ box-shadow: 0 4px 4px rgba(17, 17, 17, 0.144);
+ border-radius: 35px;
min-height: 16rem;
+ contain: unset;
+ overflow: unset;
+ position: relative;
+}
+
+ion-item {
+ --background: transparent;
+ --border-radius: 0px;
+}
+
+.title {
+ padding-top: 55px;
+ color: #e0e0e0;
+ font-size: 1.3rem;
+}
+
+.header {
+ &-icon {
+ width: 100px;
+ position: absolute;
+ left: 50%;
+ margin-left: -50px;
+ top: -17%;
+ z-index: 100;
+ }
}
.login-button {
- margin-inline-start: 0;
- margin-inline-end: 0;
- height: 49px;
- font-size: larger;
- font-weight: bold;
-}
-
-.form {
- margin-bottom: 12px;
-
- * {
- display: inline-block;
- vertical-align: middle;
- }
+ height: 45px;
+ width: 120px;
+ --border-radius: 50px;
+ margin: 0 auto;
+ margin-top: 27px;
+ margin-bottom: 10px;
}
.item-interactive {
--highlight-background: #5260ff !important;
}
-
-@media (max-width: 500px) {
- .side-button {
- --border-radius: 4px;
- margin-top: 0.7rem;
- }
-
- .login-item {
- --border-radius: 4px;
- }
+.error {
+ display: block;
+ padding-top: 4px;
}
diff --git a/frontend/projects/ui/src/app/apps/login/login.page.ts b/frontend/projects/ui/src/app/apps/login/login.page.ts
index a0c564aad..4a61f2adc 100644
--- a/frontend/projects/ui/src/app/apps/login/login.page.ts
+++ b/frontend/projects/ui/src/app/apps/login/login.page.ts
@@ -4,7 +4,6 @@ import { ApiService } from 'src/app/services/api/embassy-api.service'
import { AuthService } from 'src/app/services/auth.service'
import { Router } from '@angular/router'
import { ConfigService } from 'src/app/services/config.service'
-import { pauseFor, RELATIVE_URL } from '@start9labs/shared'
import { DOCUMENT } from '@angular/common'
import { WINDOW } from '@ng-web-apis/common'
@@ -18,58 +17,16 @@ export class LoginPage {
unmasked = false
error = ''
- downloadClicked = false
- instructionsClicked = false
- polling = false
- caTrusted = false
-
constructor(
private readonly router: Router,
private readonly authService: AuthService,
private readonly loadingCtrl: LoadingController,
private readonly api: ApiService,
public readonly config: ConfigService,
- @Inject(RELATIVE_URL) private readonly relativeUrl: string,
@Inject(DOCUMENT) public readonly document: Document,
@Inject(WINDOW) private readonly windowRef: Window,
) {}
- async ngOnInit() {
- if (!this.config.isSecure()) {
- await this.testHttps().catch(e =>
- console.warn('Failed Https connection attempt'),
- )
- }
- }
-
- download() {
- this.downloadClicked = true
- this.document.getElementById('install-cert')?.click()
- }
-
- instructions() {
- this.windowRef.open(
- 'https://docs.start9.com/getting-started/trust-ca/#trust-your-server-s-root-ca',
- '_blank',
- 'noreferrer',
- )
- this.instructionsClicked = true
- this.startDaemon()
- }
-
- private async startDaemon(): Promise {
- this.polling = true
- while (this.polling) {
- try {
- await this.testHttps()
- this.polling = false
- } catch (e) {
- console.warn('Failed Https connection attempt')
- await pauseFor(2000)
- }
- }
- }
-
launchHttps() {
const host = this.config.getHost()
this.windowRef.open(`https://${host}`, '_blank', 'noreferrer')
@@ -104,13 +61,4 @@ export class LoginPage {
loader.dismiss()
}
}
-
- private async testHttps() {
- const url = `https://${this.document.location.host}${this.relativeUrl}`
- await this.api.echo({ message: 'ping' }, url).then(() => {
- this.downloadClicked = true
- this.instructionsClicked = true
- this.caTrusted = true
- })
- }
}
diff --git a/frontend/projects/ui/src/app/apps/ui/pages/services/app-list/app-list.page.html b/frontend/projects/ui/src/app/apps/ui/pages/services/app-list/app-list.page.html
index 4dcc24234..3bc38f762 100644
--- a/frontend/projects/ui/src/app/apps/ui/pages/services/app-list/app-list.page.html
+++ b/frontend/projects/ui/src/app/apps/ui/pages/services/app-list/app-list.page.html
@@ -14,7 +14,7 @@
-
+
@@ -27,7 +27,7 @@
sizeMd="6"
>
diff --git a/frontend/projects/ui/src/app/apps/ui/pages/services/app-list/package-info.pipe.ts b/frontend/projects/ui/src/app/apps/ui/pages/services/app-list/package-info.pipe.ts
index 23a4745d0..96b28172e 100644
--- a/frontend/projects/ui/src/app/apps/ui/pages/services/app-list/package-info.pipe.ts
+++ b/frontend/projects/ui/src/app/apps/ui/pages/services/app-list/package-info.pipe.ts
@@ -1,10 +1,7 @@
import { Pipe, PipeTransform } from '@angular/core'
import { Observable, combineLatest } from 'rxjs'
-import { filter, map, startWith } from 'rxjs/operators'
-import {
- DataModel,
- PackageDataEntry,
-} from 'src/app/services/patch-db/data-model'
+import { filter, map } from 'rxjs/operators'
+import { DataModel } from 'src/app/services/patch-db/data-model'
import { getPackageInfo } from 'src/app/util/get-package-info'
import { PkgInfo } from 'src/app/types/pkg-info'
import { PatchDB } from 'patch-db-client'
@@ -19,12 +16,10 @@ export class PackageInfoPipe implements PipeTransform {
private readonly depErrorService: DepErrorService,
) {}
- transform(pkg: PackageDataEntry): Observable {
+ transform(pkgId: string): Observable {
return combineLatest([
- this.patch
- .watch$('package-data', pkg.manifest.id)
- .pipe(filter(Boolean), startWith(pkg)),
- this.depErrorService.depErrors$,
+ this.patch.watch$('package-data', pkgId).pipe(filter(Boolean)),
+ this.depErrorService.getPkgDepErrors$(pkgId),
]).pipe(map(([pkg, depErrors]) => getPackageInfo(pkg, depErrors)))
}
}
diff --git a/frontend/projects/ui/src/app/apps/ui/pages/services/app-show/app-show.page.ts b/frontend/projects/ui/src/app/apps/ui/pages/services/app-show/app-show.page.ts
index 44d7ad8a4..ff5249800 100644
--- a/frontend/projects/ui/src/app/apps/ui/pages/services/app-show/app-show.page.ts
+++ b/frontend/projects/ui/src/app/apps/ui/pages/services/app-show/app-show.page.ts
@@ -19,7 +19,7 @@ import { DependentInfo } from 'src/app/types/dependent-info'
import {
DepErrorService,
DependencyErrorType,
- PackageDependencyErrors,
+ PkgDependencyErrors,
} from 'src/app/services/dep-error.service'
import { combineLatest } from 'rxjs'
import { Manifest } from '@start9labs/marketplace'
@@ -54,15 +54,14 @@ export class AppShowPage {
readonly pkgId = getPkgId(this.route)
readonly pkgPlus$ = combineLatest([
- this.patch.watch$('package-data'),
- this.depErrorService.depErrors$,
+ this.patch.watch$('package-data', this.pkgId),
+ this.depErrorService.getPkgDepErrors$(this.pkgId),
]).pipe(
- tap(([pkgs, _]) => {
+ tap(([pkg, _]) => {
// if package disappears, navigate to list page
- if (!pkgs[this.pkgId]) this.navCtrl.navigateRoot('/services')
+ if (!pkg) this.navCtrl.navigateRoot('/services')
}),
- map(([pkgs, depErrors]) => {
- const pkg = pkgs[this.pkgId]
+ map(([pkg, depErrors]) => {
return {
pkg,
dependencies: this.getDepInfo(pkg, depErrors),
@@ -97,7 +96,7 @@ export class AppShowPage {
private getDepInfo(
pkg: PackageDataEntry,
- depErrors: PackageDependencyErrors,
+ depErrors: PkgDependencyErrors,
): DependencyInfo[] {
const pkgInstalled = pkg.installed
@@ -116,7 +115,7 @@ export class AppShowPage {
pkgInstalled: InstalledPackageInfo,
pkgManifest: Manifest,
depId: string,
- depErrors: PackageDependencyErrors,
+ depErrors: PkgDependencyErrors,
): DependencyInfo {
const { errorText, fixText, fixAction } = this.getDepErrors(
pkgManifest,
@@ -143,9 +142,9 @@ export class AppShowPage {
private getDepErrors(
pkgManifest: Manifest,
depId: string,
- depErrors: PackageDependencyErrors,
+ depErrors: PkgDependencyErrors,
) {
- const depError = depErrors[pkgManifest.id][depId]
+ const depError = (depErrors[pkgManifest.id] as any)?.[depId] // @TODO fix
let errorText: string | null = null
let fixText: string | null = null
@@ -168,7 +167,7 @@ export class AppShowPage {
errorText = 'Not running'
fixText = 'Start'
} else if (depError.type === DependencyErrorType.HealthChecksFailed) {
- errorText = 'Health check failed'
+ errorText = 'Required health check not passing'
} else if (depError.type === DependencyErrorType.Transitive) {
errorText = 'Dependency has a dependency issue'
}
diff --git a/frontend/projects/ui/src/app/apps/ui/pages/services/app-show/components/app-show-status/app-show-status.component.html b/frontend/projects/ui/src/app/apps/ui/pages/services/app-show/components/app-show-status/app-show-status.component.html
index 5cace82aa..1c7abf791 100644
--- a/frontend/projects/ui/src/app/apps/ui/pages/services/app-show/components/app-show-status/app-show-status.component.html
+++ b/frontend/projects/ui/src/app/apps/ui/pages/services/app-show/components/app-show-status/app-show-status.component.html
@@ -14,11 +14,16 @@
+
+
+ Stop
+
-
-
- Stop
-
For a secure local connection and faster Tor experience,
diff --git a/frontend/projects/ui/src/app/apps/ui/pages/system/server-show/server-show.page.ts b/frontend/projects/ui/src/app/apps/ui/pages/system/server-show/server-show.page.ts
index f5d4d85e7..4c21f7619 100644
--- a/frontend/projects/ui/src/app/apps/ui/pages/system/server-show/server-show.page.ts
+++ b/frontend/projects/ui/src/app/apps/ui/pages/system/server-show/server-show.page.ts
@@ -607,7 +607,7 @@ export class ServerShowPage {
icon: 'map-outline',
action: () =>
window.open(
- 'https://docs.start9.com/latest/user-manual',
+ 'https://docs.start9.com/0.3.5.x/user-manual',
'_blank',
'noreferrer',
),
diff --git a/frontend/projects/ui/src/app/apps/ui/pages/system/ssh-keys/ssh-keys.page.ts b/frontend/projects/ui/src/app/apps/ui/pages/system/ssh-keys/ssh-keys.page.ts
index 794e5dd47..de31f3465 100644
--- a/frontend/projects/ui/src/app/apps/ui/pages/system/ssh-keys/ssh-keys.page.ts
+++ b/frontend/projects/ui/src/app/apps/ui/pages/system/ssh-keys/ssh-keys.page.ts
@@ -19,7 +19,7 @@ import {
styleUrls: ['ssh-keys.page.scss'],
})
export class SSHKeysPage {
- readonly docsUrl = 'https://docs.start9.com/latest/user-manual/ssh'
+ readonly docsUrl = 'https://docs.start9.com/0.3.5.x/user-manual/ssh'
sshKeys: SSHKey[] = []
loading$ = new BehaviorSubject(true)
diff --git a/frontend/projects/ui/src/app/apps/ui/pages/widgets/built-in/health/health.component.ts b/frontend/projects/ui/src/app/apps/ui/pages/widgets/built-in/health/health.component.ts
index 760d8fede..4a1213d9b 100644
--- a/frontend/projects/ui/src/app/apps/ui/pages/widgets/built-in/health/health.component.ts
+++ b/frontend/projects/ui/src/app/apps/ui/pages/widgets/built-in/health/health.component.ts
@@ -8,6 +8,8 @@ import {
import { PrimaryStatus } from 'src/app/services/pkg-status-rendering.service'
import { getPackageInfo } from 'src/app/util/get-package-info'
import { PkgInfo } from 'src/app/types/pkg-info'
+import { combineLatest } from 'rxjs'
+import { DepErrorService } from 'src/app/services/dep-error.service'
@Component({
selector: 'widget-health',
@@ -24,31 +26,32 @@ export class HealthComponent {
'Transitioning',
] as const
- readonly data$ = inject(PatchDB)
- .watch$('package-data')
- .pipe(
- map(data => {
- const pkgs = Object.values(data).map(
- pkg => getPackageInfo(pkg, {}), // @TODO hack because not currently using widget
- )
- const result = this.labels.reduce>(
- (acc, label) => ({
- ...acc,
- [label]: this.getCount(label, pkgs),
- }),
- {},
- )
+ readonly data$ = combineLatest([
+ inject(PatchDB).watch$('package-data'),
+ inject(DepErrorService).depErrors$,
+ ]).pipe(
+ map(([data, depErrors]) => {
+ const pkgs = Object.values(data).map(pkg =>
+ getPackageInfo(pkg, depErrors[pkg.manifest.id]),
+ )
+ const result = this.labels.reduce>(
+ (acc, label) => ({
+ ...acc,
+ [label]: this.getCount(label, pkgs),
+ }),
+ {},
+ )
- result['Healthy'] =
- pkgs.length -
- result['Error'] -
- result['Needs Attention'] -
- result['Stopped'] -
- result['Transitioning']
+ result['Healthy'] =
+ pkgs.length -
+ result['Error'] -
+ result['Needs Attention'] -
+ result['Stopped'] -
+ result['Transitioning']
- return this.labels.map(label => result[label])
- }),
- )
+ return this.labels.map(label => result[label])
+ }),
+ )
private getCount(label: string, pkgs: PkgInfo[]): number {
switch (label) {
diff --git a/frontend/projects/ui/src/app/common/os-welcome/os-welcome.page.html b/frontend/projects/ui/src/app/common/os-welcome/os-welcome.page.html
index cd0c93507..ed05ccb45 100644
--- a/frontend/projects/ui/src/app/common/os-welcome/os-welcome.page.html
+++ b/frontend/projects/ui/src/app/common/os-welcome/os-welcome.page.html
@@ -12,11 +12,11 @@
This Release
- 0.3.4.4
+ 0.3.5
View the complete
@@ -26,98 +26,20 @@
Highlights
- Https over Tor for faster UI loading times
- Change password through UI
- Use IP address for Network Folder backups
- Multiple bug fixes, performance enhancements, and other small features
+ This release contains significant under-the-hood improvements to
+ performance and reliability
+ Ditch Docker, replace with Podman
+ Remove locking behavior from PatchDB and optimize
+ Boost efficiency of service manager
+ Require HTTPS on LAN, and improve setup flow for trusting Root CA
+ Better default privacy settings for Firefox kiosk mode
+ Eliminate memory leak from Javascript runtime
+ Other small bug fixes
+ Update license to MIT
- Previous Releases
-
- 0.3.4.3
-
- View the complete
-
- release notes
-
- for more details.
-
- Highlights
-
- Improved Tor reliability
- Experimental features tab
- Multiple bugfixes and general performance enhancements
- Update branding
-
-
- 0.3.4.2
-
- View the complete
-
- release notes
-
- for more details.
-
- Highlights
-
- Update build system for Server Lite and NUC-based Server One
- Rename embassyOS to StartOS
-
- PWA support for StartOS web interface. You can now save StartOS to your
- phone as an app!
-
-
-
- 0.3.4.1
-
- View the complete
-
- release notes
-
- for more details.
-
- Highlights
-
-
- 0.3.4
-
- View the complete
-
- release notes
-
- for more details.
-
- Highlights
-
- Security patches
- Bug fixes
- Breakout services to Community Registry
- SSL support for IP access
- UI display improvements
- Better logs
- New system metrics
- EFI support
-
=
- {} as ElementRef
+ @ViewChild('gridContent')
+ gridContent: ElementRef = {} as ElementRef
@HostListener('window:resize', ['$event'])
onResize() {
this.setContainerDimensions()
@@ -71,7 +71,7 @@ export class WidgetListComponent {
icon: 'map-outline',
color: 'var(--alt-yellow)',
description: 'Discover what StartOS can do',
- link: 'https://docs.start9.com/latest/user-manual/index',
+ link: 'https://docs.start9.com/0.3.5.x/user-manual/index',
},
{
title: 'Contact Support',
diff --git a/frontend/projects/ui/src/app/services/api/api.fixures.ts b/frontend/projects/ui/src/app/services/api/api.fixures.ts
index 1fac619dc..46680447c 100644
--- a/frontend/projects/ui/src/app/services/api/api.fixures.ts
+++ b/frontend/projects/ui/src/app/services/api/api.fixures.ts
@@ -34,9 +34,10 @@ export module Mock {
'shutting-down': false,
}
export const MarketplaceEos: RR.GetMarketplaceEosRes = {
- version: '0.3.4.4',
+ version: '0.3.5',
headline: 'Our biggest release ever.',
'release-notes': {
+ '0.3.5': 'Some **Markdown** release _notes_ for 0.3.5',
'0.3.4.4': 'Some **Markdown** release _notes_ for 0.3.4.4',
'0.3.4.3': 'Some **Markdown** release _notes_ for 0.3.4.3',
'0.3.4.2': 'Some **Markdown** release _notes_ for 0.3.4.2',
@@ -844,7 +845,7 @@ export module Mock {
integer: false,
}),
}),
- displayAs: 'I\'m {{last-name}}, {{first-name}} {{last-name}}',
+ displayAs: "I'm {{last-name}}, {{first-name}} {{last-name}}",
uniqueBy: 'last-name',
},
),
@@ -1355,7 +1356,7 @@ export module Mock {
},
'dependency-info': {
bitcoind: {
- title: 'Bitcoin Core',
+ title: Mock.MockManifestBitcoind.title,
icon: 'assets/img/service-icons/bitcoind.svg',
},
},
@@ -1415,11 +1416,11 @@ export module Mock {
'current-dependents': {},
'dependency-info': {
bitcoind: {
- title: 'Bitcoin Core',
+ title: Mock.MockManifestBitcoind.title,
icon: 'assets/img/service-icons/bitcoind.svg',
},
'btc-rpc-proxy': {
- title: 'Bitcoin Proxy',
+ title: Mock.MockManifestBitcoinProxy.title,
icon: 'assets/img/service-icons/btc-rpc-proxy.png',
},
},
diff --git a/frontend/projects/ui/src/app/services/api/api.types.ts b/frontend/projects/ui/src/app/services/api/api.types.ts
index 16e94bb1c..63572338b 100644
--- a/frontend/projects/ui/src/app/services/api/api.types.ts
+++ b/frontend/projects/ui/src/app/services/api/api.types.ts
@@ -37,7 +37,7 @@ export module RR {
// server
- export type EchoReq = { message: string } // server.echo
+ export type EchoReq = { message: string; timeout?: number } // server.echo
export type EchoRes = string
export type GetSystemTimeReq = {} // server.time
diff --git a/frontend/projects/ui/src/app/services/api/embassy-api.service.ts b/frontend/projects/ui/src/app/services/api/embassy-api.service.ts
index 23b046752..547a0c39f 100644
--- a/frontend/projects/ui/src/app/services/api/embassy-api.service.ts
+++ b/frontend/projects/ui/src/app/services/api/embassy-api.service.ts
@@ -1,4 +1,4 @@
-import { BehaviorSubject, Observable } from 'rxjs'
+import { Observable } from 'rxjs'
import { Update } from 'patch-db-client'
import { RR, BackupTargetType, Metrics } from './api.types'
import { DataModel } from 'src/app/services/patch-db/data-model'
@@ -6,8 +6,6 @@ import { Log, SetupStatus } from '@start9labs/shared'
import { WebSocketSubjectConfig } from 'rxjs/webSocket'
export abstract class ApiService {
- readonly patchStream$ = new BehaviorSubject[]>([])
-
// http
// for getting static files: ex icons, instructions, licenses
diff --git a/frontend/projects/ui/src/app/services/api/embassy-live-api.service.ts b/frontend/projects/ui/src/app/services/api/embassy-live-api.service.ts
index 0e24be0c1..608412ddd 100644
--- a/frontend/projects/ui/src/app/services/api/embassy-live-api.service.ts
+++ b/frontend/projects/ui/src/app/services/api/embassy-live-api.service.ts
@@ -1,6 +1,5 @@
import { Inject, Injectable } from '@angular/core'
import {
- decodeBase64,
HttpOptions,
HttpService,
isRpcError,
@@ -14,7 +13,7 @@ import { ApiService } from './embassy-api.service'
import { BackupTargetType, Metrics, RR } from './api.types'
import { ConfigService } from '../config.service'
import { webSocket, WebSocketSubjectConfig } from 'rxjs/webSocket'
-import { Observable } from 'rxjs'
+import { Observable, filter, firstValueFrom } from 'rxjs'
import { AuthService } from '../auth.service'
import { DOCUMENT } from '@angular/common'
import { DataModel } from '../patch-db/data-model'
@@ -78,7 +77,7 @@ export class LiveApiService extends ApiService {
// auth
async login(params: RR.LoginReq): Promise {
- return this.rpcRequest({ method: 'auth.login', params }, false)
+ return this.rpcRequest({ method: 'auth.login', params })
}
async logout(params: RR.LogoutReq): Promise {
@@ -102,7 +101,7 @@ export class LiveApiService extends ApiService {
// server
async echo(params: RR.EchoReq, urlOverride?: string): Promise {
- return this.rpcRequest({ method: 'echo', params }, false, urlOverride)
+ return this.rpcRequest({ method: 'echo', params }, urlOverride)
}
openPatchWebsocket$(): Observable> {
@@ -502,42 +501,28 @@ export class LiveApiService extends ApiService {
private async rpcRequest(
options: RPCOptions,
- addHeader = true,
urlOverride?: string,
): Promise {
- if (addHeader) {
- options.headers = {
- 'x-patch-sequence': String(this.patch.cache$.value.sequence),
- ...(options.headers || {}),
- }
- }
-
const res = await this.http.rpcRequest(options, urlOverride)
- const encodedUpdates = res.headers.get('x-patch-updates')
- const encodedError = res.headers.get('x-patch-error')
+ const body = res.body
- if (encodedUpdates) {
- const decoded = decodeBase64(encodedUpdates)
- const updates: Update[] = JSON.parse(decoded)
- this.patchStream$.next(updates)
- }
-
- if (encodedError) {
- const error = decodeBase64(encodedError)
- console.error(error)
- }
-
- const rpcRes = res.body
-
- if (isRpcError(rpcRes)) {
- if (rpcRes.error.code === 34) {
+ if (isRpcError(body)) {
+ if (body.error.code === 34) {
console.error('Unauthenticated, logging out')
this.auth.setUnverified()
}
- throw new RpcError(rpcRes.error)
+ throw new RpcError(body.error)
}
- return rpcRes.result
+ const patchSequence = res.headers.get('x-patch-sequence')
+ if (patchSequence)
+ await firstValueFrom(
+ this.patch.cache$.pipe(
+ filter(({ sequence }) => sequence >= Number(patchSequence)),
+ ),
+ )
+
+ return body.result
}
private async httpRequest(opts: HttpOptions): Promise {
diff --git a/frontend/projects/ui/src/app/services/api/embassy-mock-api.service.ts b/frontend/projects/ui/src/app/services/api/embassy-mock-api.service.ts
index ac816bca6..4999e26dd 100644
--- a/frontend/projects/ui/src/app/services/api/embassy-mock-api.service.ts
+++ b/frontend/projects/ui/src/app/services/api/embassy-mock-api.service.ts
@@ -24,7 +24,8 @@ import {
interval,
map,
Observable,
- ReplaySubject,
+ shareReplay,
+ Subject,
switchMap,
tap,
timer,
@@ -48,8 +49,8 @@ const PROGRESS: InstallProgress = {
@Injectable()
export class MockApiService extends ApiService {
- readonly mockWsSource$ = new ReplaySubject>()
- private readonly revertTime = 2000
+ readonly mockWsSource$ = new Subject>()
+ private readonly revertTime = 1800
sequence = 0
constructor(
@@ -62,7 +63,6 @@ export class MockApiService extends ApiService {
.pipe(
tap(() => {
this.sequence = 0
- this.patchStream$.next([])
}),
switchMap(verified =>
iif(
@@ -109,7 +109,9 @@ export class MockApiService extends ApiService {
value: params.value,
},
]
- return this.withRevision(patch)
+ this.mockRevision(patch)
+
+ return null
}
// auth
@@ -151,7 +153,6 @@ export class MockApiService extends ApiService {
async echo(params: RR.EchoReq, url?: string): Promise {
if (url) {
const num = Math.floor(Math.random() * 10) + 1
- console.warn(num)
if (num > 8) return params.message
throw new Error()
}
@@ -160,7 +161,9 @@ export class MockApiService extends ApiService {
}
openPatchWebsocket$(): Observable> {
- return this.mockWsSource$
+ return this.mockWsSource$.pipe(
+ shareReplay({ bufferSize: 1, refCount: true }),
+ )
}
openLogsWebsocket$(config: WebSocketSubjectConfig): Observable {
@@ -298,7 +301,9 @@ export class MockApiService extends ApiService {
value: initialProgress,
},
]
- return this.withRevision(patch, 'updating')
+ this.mockRevision(patch)
+
+ return 'updating'
}
async restartServer(
@@ -341,7 +346,9 @@ export class MockApiService extends ApiService {
value: params.enable,
},
]
- return this.withRevision(patch, null)
+ this.mockRevision(patch)
+
+ return null
}
// marketplace URLs
@@ -394,7 +401,9 @@ export class MockApiService extends ApiService {
value: 0,
},
]
- return this.withRevision(patch, Mock.Notifications)
+ this.mockRevision(patch)
+
+ return Mock.Notifications
}
async deleteNotification(
@@ -648,7 +657,9 @@ export class MockApiService extends ApiService {
},
]
- return this.withRevision(originalPatch)
+ this.mockRevision(originalPatch)
+
+ return null
}
// package
@@ -715,7 +726,9 @@ export class MockApiService extends ApiService {
},
},
]
- return this.withRevision(patch)
+ this.mockRevision(patch)
+
+ return null
}
async getPackageConfig(
@@ -746,7 +759,9 @@ export class MockApiService extends ApiService {
value: true,
},
]
- return this.withRevision(patch)
+ this.mockRevision(patch)
+
+ return null
}
async restorePackages(
@@ -770,7 +785,9 @@ export class MockApiService extends ApiService {
}
})
- return this.withRevision(patch)
+ this.mockRevision(patch)
+
+ return null
}
async executePackageAction(
@@ -820,7 +837,9 @@ export class MockApiService extends ApiService {
},
]
- return this.withRevision(originalPatch)
+ this.mockRevision(originalPatch)
+
+ return null
}
async restartPackage(
@@ -897,7 +916,9 @@ export class MockApiService extends ApiService {
},
]
- return this.withRevision(patch)
+ this.mockRevision(patch)
+
+ return null
}
async stopPackage(params: RR.StopPackageReq): Promise {
@@ -923,7 +944,9 @@ export class MockApiService extends ApiService {
},
]
- return this.withRevision(patch)
+ this.mockRevision(patch)
+
+ return null
}
async uninstallPackage(
@@ -949,7 +972,9 @@ export class MockApiService extends ApiService {
},
]
- return this.withRevision(patch)
+ this.mockRevision(patch)
+
+ return null
}
async dryConfigureDependency(
@@ -1103,23 +1128,4 @@ export class MockApiService extends ApiService {
}
this.mockWsSource$.next(revision)
}
-
- private async withRevision(
- patch: Operation[],
- response: T | null = null,
- ): Promise {
- if (!this.sequence) {
- const { sequence } = this.bootstrapper.init()
- this.sequence = sequence
- }
-
- this.patchStream$.next([
- {
- id: ++this.sequence,
- patch,
- },
- ])
-
- return response as T
- }
}
diff --git a/frontend/projects/ui/src/app/services/api/mock-patch.ts b/frontend/projects/ui/src/app/services/api/mock-patch.ts
index 6799f12ea..ab3b0e412 100644
--- a/frontend/projects/ui/src/app/services/api/mock-patch.ts
+++ b/frontend/projects/ui/src/app/services/api/mock-patch.ts
@@ -35,7 +35,7 @@ export const mockPatchData: DataModel = {
},
'server-info': {
id: 'abcdefgh',
- version: '0.3.4',
+ version: '0.3.5',
country: 'us',
'last-backup': new Date(new Date().valueOf() - 604800001).toISOString(),
'lan-address': 'https://adjective-noun.local',
diff --git a/frontend/projects/ui/src/app/services/config.service.ts b/frontend/projects/ui/src/app/services/config.service.ts
index b36e54aa0..63c64ee2e 100644
--- a/frontend/projects/ui/src/app/services/config.service.ts
+++ b/frontend/projects/ui/src/app/services/config.service.ts
@@ -44,23 +44,12 @@ export class ConfigService {
: this.hostname.endsWith('.local')
}
- isLocalhost(): boolean {
- return useMocks
- ? mocks.maskAs === 'localhost'
- : this.hostname === 'localhost'
- }
-
- isLan(): boolean {
- // @TODO will not work once clearnet arrives
- return !this.isTor()
- }
-
isTorHttp(): boolean {
return this.isTor() && !this.isHttps()
}
- isLocalHttp(): boolean {
- return this.isLocal() && !this.isHttps()
+ isLanHttp(): boolean {
+ return !this.isTor() && !this.isLocalhost() && !this.isHttps()
}
isSecure(): boolean {
@@ -71,6 +60,12 @@ export class ConfigService {
return this.host
}
+ private isLocalhost(): boolean {
+ return useMocks
+ ? mocks.maskAs === 'localhost'
+ : this.hostname === 'localhost'
+ }
+
private isHttps(): boolean {
return useMocks ? mocks.maskAsHttps : this.protocol === 'https:'
}
diff --git a/frontend/projects/ui/src/app/services/dep-error.service.ts b/frontend/projects/ui/src/app/services/dep-error.service.ts
index 320d47d65..4762f2df1 100644
--- a/frontend/projects/ui/src/app/services/dep-error.service.ts
+++ b/frontend/projects/ui/src/app/services/dep-error.service.ts
@@ -1,17 +1,18 @@
import { Injectable } from '@angular/core'
import { Emver } from '@start9labs/shared'
-import { map, shareReplay } from 'rxjs/operators'
+import { distinctUntilChanged, map, shareReplay } from 'rxjs/operators'
import { PatchDB } from 'patch-db-client'
import {
DataModel,
HealthCheckResult,
HealthResult,
- PackageDataEntry,
+ InstalledPackageDataEntry,
PackageMainStatus,
} from './patch-db/data-model'
+import * as deepEqual from 'fast-deep-equal'
-export type PackageDependencyErrors = Record
-export type DependencyErrors = Record
+export type AllDependencyErrors = Record
+export type PkgDependencyErrors = Record
@Injectable({
providedIn: 'root',
@@ -26,14 +27,15 @@ export class DepErrorService {
}))
.sort((a, b) => (b.depth > a.depth ? -1 : 1))
.reduce(
- (errors, { id }): PackageDependencyErrors => ({
+ (errors, { id }): AllDependencyErrors => ({
...errors,
[id]: this.getDepErrors(pkgs, id, errors),
}),
- {} as PackageDependencyErrors,
+ {} as AllDependencyErrors,
),
),
- shareReplay(1),
+ distinctUntilChanged(deepEqual),
+ shareReplay({ bufferSize: 1, refCount: true }),
)
constructor(
@@ -41,37 +43,38 @@ export class DepErrorService {
private readonly patch: PatchDB,
) {}
+ getPkgDepErrors$(pkgId: string) {
+ return this.depErrors$.pipe(
+ map(depErrors => depErrors[pkgId]),
+ distinctUntilChanged(deepEqual),
+ )
+ }
+
private getDepErrors(
pkgs: DataModel['package-data'],
pkgId: string,
- outerErrors: PackageDependencyErrors,
- ): DependencyErrors {
- const pkg = pkgs[pkgId]
+ outerErrors: AllDependencyErrors,
+ ): PkgDependencyErrors {
+ const pkgInstalled = pkgs[pkgId].installed
- if (!pkg.installed) return {}
+ if (!pkgInstalled) return {}
return currentDeps(pkgs, pkgId).reduce(
- (innerErrors, depId): DependencyErrors => ({
+ (innerErrors, depId): PkgDependencyErrors => ({
...innerErrors,
- [depId]: this.getDepError(pkgs, pkg, depId, outerErrors),
+ [depId]: this.getDepError(pkgs, pkgInstalled, depId, outerErrors),
}),
- {} as DependencyErrors,
+ {} as PkgDependencyErrors,
)
}
private getDepError(
pkgs: DataModel['package-data'],
- pkg: PackageDataEntry,
+ pkgInstalled: InstalledPackageDataEntry,
depId: string,
- outerErrors: PackageDependencyErrors,
+ outerErrors: AllDependencyErrors,
): DependencyError | null {
- console.warn(depId)
- console.warn(pkgs)
-
- const dep = pkgs[depId]
-
- const pkgInstalled = pkg.installed!
- const depInstalled = dep?.installed
+ const depInstalled = pkgs[depId]?.installed
// not installed
if (!depInstalled) {
@@ -80,17 +83,8 @@ export class DepErrorService {
}
}
- const depStatus = depInstalled.status.main.status
-
- // backing up
- if (depStatus === PackageMainStatus.BackingUp) {
- return {
- type: DependencyErrorType.NotRunning,
- }
- }
-
- const pkgManifest = pkg.manifest
- const depManifest = dep.manifest
+ const pkgManifest = pkgInstalled.manifest
+ const depManifest = depInstalled.manifest
// incorrect version
if (
@@ -117,6 +111,8 @@ export class DepErrorService {
}
}
+ const depStatus = depInstalled.status.main.status
+
// not running
if (
depStatus !== PackageMainStatus.Running &&
@@ -133,11 +129,10 @@ export class DepErrorService {
'health-checks'
]) {
if (
- depInstalled.status.main.health[id].result !== HealthResult.Success
+ depInstalled.status.main.health[id]?.result !== HealthResult.Success
) {
return {
type: DependencyErrorType.HealthChecksFailed,
- check: depInstalled.status.main.health[id],
}
}
}
@@ -185,7 +180,6 @@ export type DependencyError =
export enum DependencyErrorType {
NotInstalled = 'notInstalled',
- BackingUp = 'backingUp',
NotRunning = 'notRunning',
IncorrectVersion = 'incorrectVersion',
ConfigUnsatisfied = 'configUnsatisfied',
@@ -213,7 +207,6 @@ export interface DependencyErrorConfigUnsatisfied {
export interface DependencyErrorHealthChecksFailed {
type: DependencyErrorType.HealthChecksFailed
- check: HealthCheckResult
}
export interface DependencyErrorTransitive {
diff --git a/frontend/projects/ui/src/app/services/marketplace.service.ts b/frontend/projects/ui/src/app/services/marketplace.service.ts
index 721a69a34..a6a1bf2c6 100644
--- a/frontend/projects/ui/src/app/services/marketplace.service.ts
+++ b/frontend/projects/ui/src/app/services/marketplace.service.ts
@@ -75,7 +75,7 @@ export class MarketplaceService implements AbstractMarketplaceService {
map(({ 'selected-url': url, 'known-hosts': hosts }) =>
toStoreIdentity(url, hosts[url]),
),
- shareReplay(1),
+ shareReplay({ bufferSize: 1, refCount: true }),
)
private readonly marketplace$ = this.knownHosts$.pipe(
@@ -103,7 +103,7 @@ export class MarketplaceService implements AbstractMarketplaceService {
},
{},
),
- shareReplay(1),
+ shareReplay({ bufferSize: 1, refCount: true }),
)
private readonly filteredMarketplace$ = combineLatest([
diff --git a/frontend/projects/ui/src/app/services/patch-db/patch-db.factory.ts b/frontend/projects/ui/src/app/services/patch-db/patch-db.factory.ts
index 3f43d1e49..a92672036 100644
--- a/frontend/projects/ui/src/app/services/patch-db/patch-db.factory.ts
+++ b/frontend/projects/ui/src/app/services/patch-db/patch-db.factory.ts
@@ -11,13 +11,13 @@ import {
EMPTY,
from,
interval,
- merge,
Observable,
} from 'rxjs'
import { DataModel } from './data-model'
import { AuthService } from '../auth.service'
import { ConnectionService } from '../connection.service'
import { ApiService } from '../api/embassy-api.service'
+import { ConfigService } from '../config.service'
export const PATCH_SOURCE = new InjectionToken[]>>(
'',
@@ -31,6 +31,9 @@ export function sourceFactory(
const api = injector.get(ApiService)
const authService = injector.get(AuthService)
const connectionService = injector.get(ConnectionService)
+ const configService = injector.get(ConfigService)
+ const isTor = configService.isTor()
+ const timeout = isTor ? 16000 : 4000
const websocket$ = api.openPatchWebsocket$().pipe(
bufferTime(250),
@@ -38,9 +41,11 @@ export function sourceFactory(
catchError((_, watch$) => {
connectionService.websocketConnected$.next(false)
- return interval(4000).pipe(
+ return interval(timeout).pipe(
switchMap(() =>
- from(api.echo({ message: 'ping' })).pipe(catchError(() => EMPTY)),
+ from(api.echo({ message: 'ping', timeout })).pipe(
+ catchError(() => EMPTY),
+ ),
),
take(1),
switchMap(() => watch$),
@@ -50,9 +55,7 @@ export function sourceFactory(
)
return authService.isVerified$.pipe(
- switchMap(verified =>
- verified ? merge(websocket$, api.patchStream$) : EMPTY,
- ),
+ switchMap(verified => (verified ? websocket$ : EMPTY)),
)
})
}
diff --git a/frontend/projects/ui/src/app/services/patch-monitor.service.ts b/frontend/projects/ui/src/app/services/patch-monitor.service.ts
index 41f69e344..fcf59bcbd 100644
--- a/frontend/projects/ui/src/app/services/patch-monitor.service.ts
+++ b/frontend/projects/ui/src/app/services/patch-monitor.service.ts
@@ -12,13 +12,9 @@ import { LocalStorageBootstrap } from './patch-db/local-storage-bootstrap'
export class PatchMonitorService extends Observable {
// @TODO not happy with Observable
private readonly stream$ = this.authService.isVerified$.pipe(
- tap(verified => {
- if (verified) {
- this.patch.start(this.bootstrapper)
- } else {
- this.patch.stop()
- }
- }),
+ tap(verified =>
+ verified ? this.patch.start(this.bootstrapper) : this.patch.stop(),
+ ),
)
constructor(
diff --git a/frontend/projects/ui/src/app/services/pkg-status-rendering.service.ts b/frontend/projects/ui/src/app/services/pkg-status-rendering.service.ts
index 4b320099f..e6e199baf 100644
--- a/frontend/projects/ui/src/app/services/pkg-status-rendering.service.ts
+++ b/frontend/projects/ui/src/app/services/pkg-status-rendering.service.ts
@@ -4,8 +4,7 @@ import {
PackageState,
Status,
} from 'src/app/services/patch-db/data-model'
-import { PackageDependencyErrors } from './dep-error.service'
-import { Manifest } from '../../../../marketplace/src/types'
+import { PkgDependencyErrors } from './dep-error.service'
export interface PackageStatus {
primary: PrimaryStatus | PackageState | PackageMainStatus
@@ -15,7 +14,7 @@ export interface PackageStatus {
export function renderPkgStatus(
pkg: PackageDataEntry,
- depErrors: PackageDependencyErrors,
+ depErrors: PkgDependencyErrors,
): PackageStatus {
let primary: PrimaryStatus | PackageState | PackageMainStatus
let dependency: DependencyStatus | null = null
@@ -23,7 +22,7 @@ export function renderPkgStatus(
if (pkg.state === PackageState.Installed && pkg.installed) {
primary = getPrimaryStatus(pkg.installed.status)
- dependency = getDependencyStatus(pkg.manifest, depErrors)
+ dependency = getDependencyStatus(depErrors)
health = getHealthStatus(pkg.installed.status)
} else {
primary = pkg.state
@@ -40,11 +39,8 @@ function getPrimaryStatus(status: Status): PrimaryStatus | PackageMainStatus {
}
}
-function getDependencyStatus(
- manifest: Manifest,
- depErrors: PackageDependencyErrors,
-): DependencyStatus {
- return Object.values(depErrors[manifest.id]).some(err => !!err)
+function getDependencyStatus(depErrors: PkgDependencyErrors): DependencyStatus {
+ return Object.values(depErrors).some(err => !!err)
? DependencyStatus.Warning
: DependencyStatus.Satisfied
}
diff --git a/frontend/projects/ui/src/app/util/get-package-info.ts b/frontend/projects/ui/src/app/util/get-package-info.ts
index a0bced97a..b72852ffd 100644
--- a/frontend/projects/ui/src/app/util/get-package-info.ts
+++ b/frontend/projects/ui/src/app/util/get-package-info.ts
@@ -8,11 +8,11 @@ import {
} from '../services/pkg-status-rendering.service'
import { PkgInfo } from '../types/pkg-info'
import { packageLoadingProgress } from './package-loading-progress'
-import { PackageDependencyErrors } from '../services/dep-error.service'
+import { PkgDependencyErrors } from '../services/dep-error.service'
export function getPackageInfo(
entry: PackageDataEntry,
- depErrors: PackageDependencyErrors,
+ depErrors: PkgDependencyErrors,
): PkgInfo {
const statuses = renderPkgStatus(entry, depErrors)
const primaryRendering = PrimaryRendering[statuses.primary]
diff --git a/frontend/projects/ui/src/manifest.webmanifest b/frontend/projects/ui/src/manifest.webmanifest
index 94e6b08f9..a199ac1dd 100644
--- a/frontend/projects/ui/src/manifest.webmanifest
+++ b/frontend/projects/ui/src/manifest.webmanifest
@@ -5,11 +5,11 @@
"background_color": "#1e1e1e",
"display": "standalone",
"scope": ".",
- "start_url": "/?version=0344",
- "id": "/?version=0344",
+ "start_url": "/?version=035",
+ "id": "/?version=035",
"icons": [
{
- "src": "assets/img/icon_pwa.png",
+ "src": "assets/img/icon.png",
"sizes": "256x256",
"type": "image/png",
"purpose": "any"
diff --git a/libs/Cargo.lock b/libs/Cargo.lock
index 643e696f7..8f398bdc8 100644
--- a/libs/Cargo.lock
+++ b/libs/Cargo.lock
@@ -14,9 +14,9 @@ dependencies = [
[[package]]
name = "addr2line"
-version = "0.20.0"
+version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3"
+checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
dependencies = [
"gimli",
]
@@ -27,17 +27,6 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
-[[package]]
-name = "ahash"
-version = "0.7.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
-dependencies = [
- "getrandom 0.2.10",
- "once_cell",
- "version_check",
-]
-
[[package]]
name = "ahash"
version = "0.8.3"
@@ -52,9 +41,9 @@ dependencies = [
[[package]]
name = "aho-corasick"
-version = "1.0.2"
+version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
dependencies = [
"memchr",
]
@@ -82,21 +71,21 @@ dependencies = [
[[package]]
name = "anyhow"
-version = "1.0.72"
+version = "1.0.75"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854"
+checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
[[package]]
name = "ast_node"
-version = "0.9.4"
+version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c704e2f6ee1a98223f5a7629a6ef0f3decb3b552ed282889dc957edff98ce1e6"
+checksum = "c09c69dffe06d222d072c878c3afe86eee2179806f20503faec97250268b4c24"
dependencies = [
"pmutil",
"proc-macro2",
"quote",
"swc_macros_common",
- "syn 1.0.109",
+ "syn 2.0.38",
]
[[package]]
@@ -129,25 +118,25 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.18",
+ "syn 2.0.38",
]
[[package]]
name = "async-trait"
-version = "0.1.69"
+version = "0.1.74"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b2d0f03b3640e3a630367e40c468cb7f309529c708ed1d88597047b0e7c6ef7"
+checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.18",
+ "syn 2.0.38",
]
[[package]]
name = "atoi"
-version = "1.0.0"
+version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d7c57d12312ff59c811c0643f4d80830505833c9ffaebd193d819392b265be8e"
+checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528"
dependencies = [
"num-traits",
]
@@ -171,9 +160,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
name = "backtrace"
-version = "0.3.68"
+version = "0.3.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12"
+checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
dependencies = [
"addr2line",
"cc",
@@ -186,9 +175,9 @@ dependencies = [
[[package]]
name = "base16ct"
-version = "0.1.1"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce"
+checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
[[package]]
name = "base32"
@@ -204,9 +193,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
[[package]]
name = "base64"
-version = "0.21.2"
+version = "0.21.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d"
+checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2"
[[package]]
name = "base64ct"
@@ -240,9 +229,12 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
-version = "2.3.3"
+version = "2.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42"
+checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+dependencies = [
+ "serde",
+]
[[package]]
name = "bitmaps"
@@ -289,27 +281,30 @@ checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae"
[[package]]
name = "bumpalo"
-version = "3.13.0"
+version = "3.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
+checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
[[package]]
name = "byteorder"
-version = "1.4.3"
+version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
[[package]]
name = "bytes"
-version = "1.4.0"
+version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
[[package]]
name = "cc"
-version = "1.0.79"
+version = "1.0.83"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "libc",
+]
[[package]]
name = "cfg-if"
@@ -319,14 +314,24 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "chrono"
-version = "0.4.26"
+version = "0.4.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5"
+checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38"
dependencies = [
"android-tzdata",
"iana-time-zone",
"num-traits",
- "winapi",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "cipher"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
+dependencies = [
+ "crypto-common",
+ "inout",
]
[[package]]
@@ -382,18 +387,18 @@ dependencies = [
[[package]]
name = "concurrent-queue"
-version = "2.2.0"
+version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c"
+checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400"
dependencies = [
"crossbeam-utils",
]
[[package]]
name = "const-oid"
-version = "0.9.4"
+version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "795bc6e66a8e340f075fcf6227e417a2dc976b92b91f3cdc778bb858778b6747"
+checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f"
[[package]]
name = "convert_case"
@@ -471,9 +476,9 @@ dependencies = [
[[package]]
name = "crypto-bigint"
-version = "0.4.9"
+version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef"
+checksum = "740fe28e594155f10cfc383984cbefd529d7396050557148f79cb0f621204124"
dependencies = [
"generic-array",
"rand_core 0.6.4",
@@ -515,16 +520,44 @@ dependencies = [
]
[[package]]
-name = "dashmap"
-version = "5.5.0"
+name = "curve25519-dalek"
+version = "4.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6943ae99c34386c84a470c499d3414f66502a41340aa895406e0d2e4a207b91d"
+checksum = "e89b8c6a2e4b1f45971ad09761aafb85514a84744b67a95e32c3cc1352d1f65c"
dependencies = [
"cfg-if",
- "hashbrown 0.14.0",
+ "cpufeatures",
+ "curve25519-dalek-derive",
+ "digest 0.10.7",
+ "fiat-crypto",
+ "platforms",
+ "rustc_version 0.4.0",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "curve25519-dalek-derive"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83fdaf97f4804dcebfa5862639bc9ce4121e82140bec2a987ac5140294865b5b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "dashmap"
+version = "5.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
+dependencies = [
+ "cfg-if",
+ "hashbrown 0.14.1",
"lock_api",
"once_cell",
- "parking_lot_core 0.9.8",
+ "parking_lot_core",
]
[[package]]
@@ -535,9 +568,19 @@ checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
[[package]]
name = "data-url"
-version = "0.2.0"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8d7439c3735f405729d52c3fbbe4de140eaf938a1fe47d227c27f8254d4302a5"
+checksum = "41b319d1b62ffbd002e057f36bebd1f42b9f97927c9577461d855f3513c4289f"
+
+[[package]]
+name = "debugid"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d"
+dependencies = [
+ "serde",
+ "uuid",
+]
[[package]]
name = "deno-proc-macro-rules"
@@ -547,7 +590,7 @@ checksum = "3c65c2ffdafc1564565200967edc4851c7b55422d3913466688907efd05ea26f"
dependencies = [
"deno-proc-macro-rules-macros",
"proc-macro2",
- "syn 2.0.18",
+ "syn 2.0.38",
]
[[package]]
@@ -559,14 +602,14 @@ dependencies = [
"once_cell",
"proc-macro2",
"quote",
- "syn 2.0.18",
+ "syn 2.0.38",
]
[[package]]
name = "deno_ast"
-version = "0.27.2"
+version = "0.29.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a39dc5554b1c835c62914b545f8b378563a997521e39a8f03450b37b216143ef"
+checksum = "8a8adb6aeb787db71d015d8e9f63f6e004eeb09c86babb4ded00878be18619b1"
dependencies = [
"anyhow",
"base64 0.13.1",
@@ -600,25 +643,26 @@ dependencies = [
[[package]]
name = "deno_core"
-version = "0.195.0"
+version = "0.222.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "408e433386de30dd501cf82d26ca1fb4cd84b055536f8f6f9c78c3380649d94b"
+checksum = "b13c81b9ea8462680e7b77088a44fc36390bab3dbfa5a205a285e11b64e0919c"
dependencies = [
"anyhow",
"bytes",
"deno_ops",
+ "deno_unsync",
"futures",
- "indexmap 1.9.3",
+ "indexmap 2.0.2",
"libc",
"log",
"once_cell",
- "parking_lot 0.12.1",
+ "parking_lot",
"pin-project",
"serde",
"serde_json",
"serde_v8",
"smallvec",
- "sourcemap",
+ "sourcemap 7.0.0",
"tokio",
"url",
"v8",
@@ -626,9 +670,9 @@ dependencies = [
[[package]]
name = "deno_media_type"
-version = "0.1.0"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "63772a60d740a41d97fbffb4788fc3779e6df47289e01892c12be38f4a5beded"
+checksum = "a798670c20308e5770cc0775de821424ff9e85665b602928509c8c70430b3ee0"
dependencies = [
"data-url",
"serde",
@@ -637,9 +681,9 @@ dependencies = [
[[package]]
name = "deno_ops"
-version = "0.73.0"
+version = "0.98.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c6d06feb9b26ccd2997f35610517d5a8f1dd423e21364509523f72474601f87f"
+checksum = "bf89da1a3e50ff7c89956495b53d9bcad29e1f1b3f3d2bc54cad7155f55419c4"
dependencies = [
"deno-proc-macro-rules",
"lazy-regex",
@@ -651,17 +695,24 @@ dependencies = [
"regex",
"strum",
"strum_macros",
- "syn 1.0.109",
- "syn 2.0.18",
+ "syn 2.0.38",
"thiserror",
- "v8",
+]
+
+[[package]]
+name = "deno_unsync"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8a8f3722afd50e566ecfc783cc8a3a046bc4dd5eb45007431dfb2776aeb8993"
+dependencies = [
+ "tokio",
]
[[package]]
name = "der"
-version = "0.6.1"
+version = "0.7.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de"
+checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c"
dependencies = [
"const-oid",
"pem-rfc7468",
@@ -702,26 +753,6 @@ dependencies = [
"subtle",
]
-[[package]]
-name = "dirs"
-version = "4.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
-dependencies = [
- "dirs-sys",
-]
-
-[[package]]
-name = "dirs-sys"
-version = "0.3.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
-dependencies = [
- "libc",
- "redox_users",
- "winapi",
-]
-
[[package]]
name = "dotenvy"
version = "0.15.7"
@@ -730,9 +761,9 @@ checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b"
[[package]]
name = "dprint-swc-ext"
-version = "0.10.0"
+version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd4dda8a1b920e8be367aeaad035753d21bb69b3c50515afb41ab1eefbb886b5"
+checksum = "6a0a2492465344a58a37ae119de59e81fe5a2885f2711c7b5048ef0dfa14ce42"
dependencies = [
"bumpalo",
"num-bigint",
@@ -746,14 +777,16 @@ dependencies = [
[[package]]
name = "ecdsa"
-version = "0.14.8"
+version = "0.16.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c"
+checksum = "a4b1e0c257a9e9f25f90ff76d7a68360ed497ee519c8e428d1825ef0000799d4"
dependencies = [
"der",
+ "digest 0.10.7",
"elliptic-curve",
"rfc6979",
- "signature",
+ "signature 2.1.0",
+ "spki",
]
[[package]]
@@ -762,8 +795,18 @@ version = "1.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7"
dependencies = [
+ "signature 1.6.4",
+]
+
+[[package]]
+name = "ed25519"
+version = "2.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53"
+dependencies = [
+ "pkcs8",
"serde",
- "signature",
+ "signature 2.1.0",
]
[[package]]
@@ -772,37 +815,49 @@ version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d"
dependencies = [
- "curve25519-dalek",
- "ed25519",
+ "curve25519-dalek 3.2.0",
+ "ed25519 1.5.3",
"rand 0.7.3",
"serde",
- "serde_bytes",
"sha2 0.9.9",
"zeroize",
]
[[package]]
-name = "either"
-version = "1.8.1"
+name = "ed25519-dalek"
+version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+checksum = "7277392b266383ef8396db7fdeb1e77b6c52fed775f5df15bb24f35b72156980"
+dependencies = [
+ "curve25519-dalek 4.1.1",
+ "ed25519 2.2.3",
+ "serde",
+ "sha2 0.10.8",
+ "zeroize",
+]
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
dependencies = [
"serde",
]
[[package]]
name = "elliptic-curve"
-version = "0.12.3"
+version = "0.13.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3"
+checksum = "d97ca172ae9dc9f9b779a6e3a65d308f2af74e5b8c921299075bdb4a0370e914"
dependencies = [
"base16ct",
"crypto-bigint",
- "der",
"digest 0.10.7",
"ff",
"generic-array",
"group",
+ "pkcs8",
"rand_core 0.6.4",
"sec1",
"subtle",
@@ -818,7 +873,7 @@ dependencies = [
"futures",
"helpers",
"imbl",
- "nix 0.25.1",
+ "nix 0.27.1",
"procfs",
"serde",
"serde_json",
@@ -844,9 +899,9 @@ dependencies = [
[[package]]
name = "encoding_rs"
-version = "0.8.32"
+version = "0.8.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
dependencies = [
"cfg-if",
]
@@ -859,23 +914,23 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
[[package]]
name = "errno"
-version = "0.3.1"
+version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860"
dependencies = [
- "errno-dragonfly",
"libc",
"windows-sys 0.48.0",
]
[[package]]
-name = "errno-dragonfly"
-version = "0.1.2"
+name = "etcetera"
+version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943"
dependencies = [
- "cc",
- "libc",
+ "cfg-if",
+ "home",
+ "windows-sys 0.48.0",
]
[[package]]
@@ -896,12 +951,9 @@ dependencies = [
[[package]]
name = "fastrand"
-version = "1.9.0"
+version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
-dependencies = [
- "instant",
-]
+checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
[[package]]
name = "fd-lock-rs"
@@ -914,24 +966,47 @@ dependencies = [
[[package]]
name = "ff"
-version = "0.12.1"
+version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160"
+checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449"
dependencies = [
"rand_core 0.6.4",
"subtle",
]
[[package]]
-name = "flate2"
-version = "1.0.26"
+name = "fiat-crypto"
+version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
+checksum = "d0870c84016d4b481be5c9f323c24f65e31e901ae618f0e80f4308fb00de1d2d"
+
+[[package]]
+name = "finl_unicode"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6"
+
+[[package]]
+name = "flate2"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
dependencies = [
"crc32fast",
"miniz_oxide",
]
+[[package]]
+name = "flume"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+ "spin 0.9.8",
+]
+
[[package]]
name = "fnv"
version = "1.0.7"
@@ -973,14 +1048,14 @@ dependencies = [
[[package]]
name = "from_variant"
-version = "0.1.5"
+version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d449976075322384507443937df2f1d5577afbf4282f12a5a66ef29fa3e6307"
+checksum = "03ec5dc38ee19078d84a692b1c41181ff9f94331c76cee66ff0208c770b5e54f"
dependencies = [
"pmutil",
"proc-macro2",
"swc_macros_common",
- "syn 1.0.109",
+ "syn 2.0.38",
]
[[package]]
@@ -1043,13 +1118,13 @@ dependencies = [
[[package]]
name = "futures-intrusive"
-version = "0.4.2"
+version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a604f7a68fbf8103337523b1fadc8ade7361ee3f112f7c680ad179651616aed5"
+checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f"
dependencies = [
"futures-core",
"lock_api",
- "parking_lot 0.11.2",
+ "parking_lot",
]
[[package]]
@@ -1066,7 +1141,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.18",
+ "syn 2.0.38",
]
[[package]]
@@ -1107,6 +1182,7 @@ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
dependencies = [
"typenum",
"version_check",
+ "zeroize",
]
[[package]]
@@ -1133,15 +1209,15 @@ dependencies = [
[[package]]
name = "gimli"
-version = "0.27.3"
+version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e"
+checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
[[package]]
name = "group"
-version = "0.12.1"
+version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7"
+checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
dependencies = [
"ff",
"rand_core 0.6.4",
@@ -1150,9 +1226,9 @@ dependencies = [
[[package]]
name = "h2"
-version = "0.3.20"
+version = "0.3.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049"
+checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833"
dependencies = [
"bytes",
"fnv",
@@ -1185,26 +1261,26 @@ version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"
dependencies = [
- "ahash 0.8.3",
+ "ahash",
]
[[package]]
name = "hashbrown"
-version = "0.14.0"
+version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
+checksum = "7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12"
dependencies = [
- "ahash 0.8.3",
+ "ahash",
"allocator-api2",
]
[[package]]
name = "hashlink"
-version = "0.8.3"
+version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "312f66718a2d7789ffef4f4b7b213138ed9f1eb3aa1d0d82fc99f88fb3ffd26f"
+checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7"
dependencies = [
- "hashbrown 0.14.0",
+ "hashbrown 0.14.1",
]
[[package]]
@@ -1245,9 +1321,9 @@ dependencies = [
[[package]]
name = "hermit-abi"
-version = "0.3.2"
+version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
+checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
[[package]]
name = "hex"
@@ -1283,6 +1359,15 @@ dependencies = [
"digest 0.10.7",
]
+[[package]]
+name = "home"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
[[package]]
name = "http"
version = "0.2.9"
@@ -1313,9 +1398,9 @@ checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
[[package]]
name = "httpdate"
-version = "1.0.2"
+version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
[[package]]
name = "hyper"
@@ -1334,7 +1419,7 @@ dependencies = [
"httpdate",
"itoa",
"pin-project-lite",
- "socket2",
+ "socket2 0.4.9",
"tokio",
"tower-service",
"tracing",
@@ -1356,16 +1441,16 @@ dependencies = [
[[package]]
name = "iana-time-zone"
-version = "0.1.57"
+version = "0.1.58"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613"
+checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20"
dependencies = [
"android_system_properties",
"core-foundation-sys",
"iana-time-zone-haiku",
"js-sys",
"wasm-bindgen",
- "windows",
+ "windows-core",
]
[[package]]
@@ -1395,9 +1480,9 @@ checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed"
[[package]]
name = "imbl"
-version = "2.0.0"
+version = "2.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2806b69cd9f4664844027b64465eacb444c67c1db9c778e341adff0c25cdb0d"
+checksum = "85b4555023847ca2cd6fd11f20b553886e6981c7e8aee9b3e7e960b4b17fb440"
dependencies = [
"bitmaps",
"imbl-sized-chunks",
@@ -1446,21 +1531,21 @@ dependencies = [
[[package]]
name = "indexmap"
-version = "2.0.0"
+version = "2.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"
+checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897"
dependencies = [
"equivalent",
- "hashbrown 0.14.0",
+ "hashbrown 0.14.1",
]
[[package]]
-name = "instant"
-version = "0.1.12"
+name = "inout"
+version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
dependencies = [
- "cfg-if",
+ "generic-array",
]
[[package]]
@@ -1469,7 +1554,7 @@ version = "1.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
dependencies = [
- "hermit-abi 0.3.2",
+ "hermit-abi 0.3.3",
"libc",
"windows-sys 0.48.0",
]
@@ -1482,15 +1567,15 @@ checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6"
[[package]]
name = "is-macro"
-version = "0.2.2"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a7d079e129b77477a49c5c4f1cfe9ce6c2c909ef52520693e8e811a714c7b20"
+checksum = "f4467ed1321b310c2625c5aa6c1b1ffc5de4d9e42668cf697a08fb033ee8265e"
dependencies = [
"Inflector",
"pmutil",
"proc-macro2",
"quote",
- "syn 1.0.109",
+ "syn 2.0.38",
]
[[package]]
@@ -1504,9 +1589,9 @@ dependencies = [
[[package]]
name = "itertools"
-version = "0.10.5"
+version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
dependencies = [
"either",
]
@@ -1536,14 +1621,14 @@ dependencies = [
"deno_core",
"embassy_container_init",
"helpers",
- "itertools 0.10.5",
+ "itertools 0.11.0",
"lazy_static",
"models",
"pin-project",
"reqwest",
"serde",
"serde_json",
- "sha2 0.10.7",
+ "sha2 0.10.8",
"tokio",
"tracing",
]
@@ -1579,9 +1664,9 @@ dependencies = [
[[package]]
name = "lazy-regex"
-version = "2.5.0"
+version = "3.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff63c423c68ea6814b7da9e88ce585f793c87ddd9e78f646970891769c8235d4"
+checksum = "e723bd417b2df60a0f6a2b6825f297ea04b245d4ba52b5a22cb679bdf58b05fa"
dependencies = [
"lazy-regex-proc_macros",
"once_cell",
@@ -1590,14 +1675,14 @@ dependencies = [
[[package]]
name = "lazy-regex-proc_macros"
-version = "2.4.1"
+version = "3.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8edfc11b8f56ce85e207e62ea21557cfa09bb24a8f6b04ae181b086ff8611c22"
+checksum = "0f0a1d9139f0ee2e862e08a9c5d0ba0470f2aa21cd1e1aa1b1562f83116c725f"
dependencies = [
"proc-macro2",
"quote",
"regex",
- "syn 1.0.109",
+ "syn 2.0.38",
]
[[package]]
@@ -1616,93 +1701,31 @@ version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
dependencies = [
- "spin",
-]
-
-[[package]]
-name = "lexical"
-version = "6.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c7aefb36fd43fef7003334742cbf77b243fcd36418a1d1bdd480d613a67968f6"
-dependencies = [
- "lexical-core",
-]
-
-[[package]]
-name = "lexical-core"
-version = "0.8.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2cde5de06e8d4c2faabc400238f9ae1c74d5412d03a7bd067645ccbc47070e46"
-dependencies = [
- "lexical-parse-float",
- "lexical-parse-integer",
- "lexical-util",
- "lexical-write-float",
- "lexical-write-integer",
-]
-
-[[package]]
-name = "lexical-parse-float"
-version = "0.8.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f"
-dependencies = [
- "lexical-parse-integer",
- "lexical-util",
- "static_assertions",
-]
-
-[[package]]
-name = "lexical-parse-integer"
-version = "0.8.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d0994485ed0c312f6d965766754ea177d07f9c00c9b82a5ee62ed5b47945ee9"
-dependencies = [
- "lexical-util",
- "static_assertions",
-]
-
-[[package]]
-name = "lexical-util"
-version = "0.8.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5255b9ff16ff898710eb9eb63cb39248ea8a5bb036bea8085b1a767ff6c4e3fc"
-dependencies = [
- "static_assertions",
-]
-
-[[package]]
-name = "lexical-write-float"
-version = "0.8.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "accabaa1c4581f05a3923d1b4cfd124c329352288b7b9da09e766b0668116862"
-dependencies = [
- "lexical-util",
- "lexical-write-integer",
- "static_assertions",
-]
-
-[[package]]
-name = "lexical-write-integer"
-version = "0.8.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e1b6f3d1f4422866b68192d62f77bc5c700bee84f3069f2469d7bc8c77852446"
-dependencies = [
- "lexical-util",
- "static_assertions",
+ "spin 0.5.2",
]
[[package]]
name = "libc"
-version = "0.2.147"
+version = "0.2.149"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b"
[[package]]
name = "libm"
-version = "0.2.7"
+version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4"
+checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058"
+
+[[package]]
+name = "libsqlite3-sys"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "afc22eff61b133b115c6e8c74e818c628d6d5e7a502afea6f64dee076dd94326"
+dependencies = [
+ "cc",
+ "pkg-config",
+ "vcpkg",
+]
[[package]]
name = "linux-raw-sys"
@@ -1712,9 +1735,9 @@ checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
[[package]]
name = "linux-raw-sys"
-version = "0.3.8"
+version = "0.4.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f"
[[package]]
name = "lock_api"
@@ -1728,9 +1751,9 @@ dependencies = [
[[package]]
name = "log"
-version = "0.4.19"
+version = "0.4.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
[[package]]
name = "matchers"
@@ -1756,18 +1779,19 @@ dependencies = [
[[package]]
name = "md-5"
-version = "0.10.5"
+version = "0.10.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca"
+checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf"
dependencies = [
+ "cfg-if",
"digest 0.10.7",
]
[[package]]
name = "memchr"
-version = "2.5.0"
+version = "2.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
[[package]]
name = "memoffset"
@@ -1823,9 +1847,9 @@ dependencies = [
name = "models"
version = "0.1.0"
dependencies = [
- "base64 0.21.2",
+ "base64 0.21.4",
"color-eyre",
- "ed25519-dalek",
+ "ed25519-dalek 2.0.0",
"emver",
"ipnet",
"lazy_static",
@@ -1883,20 +1907,6 @@ dependencies = [
"memoffset 0.6.5",
]
-[[package]]
-name = "nix"
-version = "0.25.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4"
-dependencies = [
- "autocfg",
- "bitflags 1.3.2",
- "cfg-if",
- "libc",
- "memoffset 0.6.5",
- "pin-utils",
-]
-
[[package]]
name = "nix"
version = "0.26.4"
@@ -1910,6 +1920,17 @@ dependencies = [
"pin-utils",
]
+[[package]]
+name = "nix"
+version = "0.27.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053"
+dependencies = [
+ "bitflags 2.4.1",
+ "cfg-if",
+ "libc",
+]
+
[[package]]
name = "nom"
version = "7.1.3"
@@ -1932,9 +1953,9 @@ dependencies = [
[[package]]
name = "num-bigint"
-version = "0.4.3"
+version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
+checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
dependencies = [
"autocfg",
"num-integer",
@@ -1983,9 +2004,9 @@ dependencies = [
[[package]]
name = "num-traits"
-version = "0.2.15"
+version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
dependencies = [
"autocfg",
"libm",
@@ -1997,15 +2018,15 @@ version = "1.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
dependencies = [
- "hermit-abi 0.3.2",
+ "hermit-abi 0.3.3",
"libc",
]
[[package]]
name = "object"
-version = "0.31.1"
+version = "0.32.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1"
+checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
dependencies = [
"memchr",
]
@@ -2024,11 +2045,11 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
[[package]]
name = "openssl"
-version = "0.10.55"
+version = "0.10.57"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d"
+checksum = "bac25ee399abb46215765b1cb35bc0212377e58a061560d8b29b024fd0430e7c"
dependencies = [
- "bitflags 1.3.2",
+ "bitflags 2.4.1",
"cfg-if",
"foreign-types",
"libc",
@@ -2045,7 +2066,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.18",
+ "syn 2.0.38",
]
[[package]]
@@ -2056,18 +2077,18 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
[[package]]
name = "openssl-src"
-version = "111.26.0+1.1.1u"
+version = "300.1.5+3.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "efc62c9f12b22b8f5208c23a7200a442b2e5999f8bdf80233852122b5a4f6f37"
+checksum = "559068e4c12950d7dcaa1857a61725c0d38d4fc03ff8e070ab31a75d6e316491"
dependencies = [
"cc",
]
[[package]]
name = "openssl-sys"
-version = "0.9.90"
+version = "0.9.93"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6"
+checksum = "db4d56a4c0478783083cfafcc42493dd4a981d41669da64b4572a2a089b51b1d"
dependencies = [
"cc",
"libc",
@@ -2078,9 +2099,9 @@ dependencies = [
[[package]]
name = "os_str_bytes"
-version = "6.5.1"
+version = "6.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4d5d9eb14b174ee9aa2ef96dc2b94637a2d4b6e7cb873c7e171f0c20c6cf3eac"
+checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1"
[[package]]
name = "overload"
@@ -2096,35 +2117,26 @@ checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f"
[[package]]
name = "p256"
-version = "0.11.1"
+version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594"
+checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b"
dependencies = [
"ecdsa",
"elliptic-curve",
- "sha2 0.10.7",
+ "primeorder",
+ "sha2 0.10.8",
]
[[package]]
name = "p384"
-version = "0.11.2"
+version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dfc8c5bf642dde52bb9e87c0ecd8ca5a76faac2eeed98dedb7c717997e1080aa"
+checksum = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209"
dependencies = [
"ecdsa",
"elliptic-curve",
- "sha2 0.10.7",
-]
-
-[[package]]
-name = "parking_lot"
-version = "0.11.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
-dependencies = [
- "instant",
- "lock_api",
- "parking_lot_core 0.8.6",
+ "primeorder",
+ "sha2 0.10.8",
]
[[package]]
@@ -2134,21 +2146,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
dependencies = [
"lock_api",
- "parking_lot_core 0.9.8",
-]
-
-[[package]]
-name = "parking_lot_core"
-version = "0.8.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc"
-dependencies = [
- "cfg-if",
- "instant",
- "libc",
- "redox_syscall 0.2.16",
- "smallvec",
- "winapi",
+ "parking_lot_core",
]
[[package]]
@@ -2159,9 +2157,9 @@ checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
dependencies = [
"cfg-if",
"libc",
- "redox_syscall 0.3.5",
+ "redox_syscall",
"smallvec",
- "windows-targets 0.48.1",
+ "windows-targets 0.48.5",
]
[[package]]
@@ -2219,9 +2217,9 @@ checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
[[package]]
name = "pem-rfc7468"
-version = "0.6.0"
+version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "24d159833a9105500e0398934e205e0773f0b27529557134ecfc51c27646adac"
+checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412"
dependencies = [
"base64ct",
]
@@ -2278,29 +2276,29 @@ dependencies = [
[[package]]
name = "pin-project"
-version = "1.1.2"
+version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "030ad2bc4db10a8944cb0d837f158bdfec4d4a4873ab701a95046770d11f8842"
+checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422"
dependencies = [
"pin-project-internal",
]
[[package]]
name = "pin-project-internal"
-version = "1.1.2"
+version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec2e072ecce94ec471b13398d5402c188e76ac03cf74dd1a975161b23a3f6d9c"
+checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.18",
+ "syn 2.0.38",
]
[[package]]
name = "pin-project-lite"
-version = "0.2.10"
+version = "0.2.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c40d25201921e5ff0c862a505c6557ea88568a4e3ace775ab55e93f2f4f9d57"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
[[package]]
name = "pin-utils"
@@ -2310,21 +2308,20 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
name = "pkcs1"
-version = "0.4.1"
+version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eff33bdbdfc54cc98a2eca766ebdec3e1b8fb7387523d5c9c9a2891da856f719"
+checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f"
dependencies = [
"der",
"pkcs8",
"spki",
- "zeroize",
]
[[package]]
name = "pkcs8"
-version = "0.9.0"
+version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba"
+checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
dependencies = [
"der",
"spki",
@@ -2337,14 +2334,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
[[package]]
-name = "pmutil"
-version = "0.5.3"
+name = "platforms"
+version = "3.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3894e5d549cccbe44afecf72922f277f603cd4bb0219c8342631ef18fffbe004"
+checksum = "4503fa043bf02cee09a9582e9554b4c6403b2ef55e4612e96561d294419429f8"
+
+[[package]]
+name = "pmutil"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52a40bc70c2c58040d2d8b167ba9a5ff59fc9dab7ad44771cfde3dcfde7a09c6"
dependencies = [
"proc-macro2",
"quote",
- "syn 1.0.109",
+ "syn 2.0.38",
]
[[package]]
@@ -2359,6 +2362,15 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+[[package]]
+name = "primeorder"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c2fcef82c0ec6eefcc179b978446c399b3cdf73c392c35604e399eee6df1ee3"
+dependencies = [
+ "elliptic-curve",
+]
+
[[package]]
name = "proc-macro-crate"
version = "1.3.1"
@@ -2377,18 +2389,18 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
[[package]]
name = "proc-macro2"
-version = "1.0.66"
+version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
+checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
dependencies = [
"unicode-ident",
]
[[package]]
name = "procfs"
-version = "0.14.2"
+version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b1de8dacb0873f77e6aefc6d71e044761fcc68060290f5b1089fcdf84626bb69"
+checksum = "943ca7f9f29bab5844ecd8fdb3992c5969b6622bb9609b9502fef9b4310e3f1f"
dependencies = [
"bitflags 1.3.2",
"byteorder",
@@ -2396,7 +2408,7 @@ dependencies = [
"flate2",
"hex",
"lazy_static",
- "rustix 0.36.15",
+ "rustix 0.36.16",
]
[[package]]
@@ -2410,9 +2422,9 @@ dependencies = [
[[package]]
name = "quote"
-version = "1.0.31"
+version = "1.0.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5fe8a65d69dd0808184ebb5f836ab526bb259db23c657efa38711b1072ee47f0"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
dependencies = [
"proc-macro2",
]
@@ -2503,15 +2515,6 @@ dependencies = [
"rand_core 0.6.4",
]
-[[package]]
-name = "redox_syscall"
-version = "0.2.16"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
-dependencies = [
- "bitflags 1.3.2",
-]
-
[[package]]
name = "redox_syscall"
version = "0.3.5"
@@ -2521,27 +2524,16 @@ dependencies = [
"bitflags 1.3.2",
]
-[[package]]
-name = "redox_users"
-version = "0.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
-dependencies = [
- "getrandom 0.2.10",
- "redox_syscall 0.2.16",
- "thiserror",
-]
-
[[package]]
name = "regex"
-version = "1.9.1"
+version = "1.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575"
+checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
dependencies = [
"aho-corasick",
"memchr",
- "regex-automata 0.3.3",
- "regex-syntax 0.7.4",
+ "regex-automata 0.4.3",
+ "regex-syntax 0.8.2",
]
[[package]]
@@ -2555,13 +2547,13 @@ dependencies = [
[[package]]
name = "regex-automata"
-version = "0.3.3"
+version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "39354c10dd07468c2e73926b23bb9c2caca74c5501e38a35da70406f1d923310"
+checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
dependencies = [
"aho-corasick",
"memchr",
- "regex-syntax 0.7.4",
+ "regex-syntax 0.8.2",
]
[[package]]
@@ -2572,17 +2564,17 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
[[package]]
name = "regex-syntax"
-version = "0.7.4"
+version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
[[package]]
name = "reqwest"
-version = "0.11.18"
+version = "0.11.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55"
+checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b"
dependencies = [
- "base64 0.21.2",
+ "base64 0.21.4",
"bytes",
"encoding_rs",
"futures-core",
@@ -2603,6 +2595,7 @@ dependencies = [
"serde",
"serde_json",
"serde_urlencoded",
+ "system-configuration",
"tokio",
"tokio-native-tls",
"tower-service",
@@ -2615,13 +2608,12 @@ dependencies = [
[[package]]
name = "rfc6979"
-version = "0.3.1"
+version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb"
+checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2"
dependencies = [
- "crypto-bigint",
"hmac 0.12.1",
- "zeroize",
+ "subtle",
]
[[package]]
@@ -2633,7 +2625,7 @@ dependencies = [
"cc",
"libc",
"once_cell",
- "spin",
+ "spin 0.5.2",
"untrusted",
"web-sys",
"winapi",
@@ -2685,11 +2677,12 @@ dependencies = [
[[package]]
name = "rsa"
-version = "0.7.2"
+version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "094052d5470cbcef561cb848a7209968c9f12dfa6d668f4bca048ac5de51099c"
+checksum = "6ab43bb47d23c1a631b4b680199a45255dce26fa9ab2fa902581f624ff13e6a8"
dependencies = [
"byteorder",
+ "const-oid",
"digest 0.10.7",
"num-bigint-dig",
"num-integer",
@@ -2698,8 +2691,9 @@ dependencies = [
"pkcs1",
"pkcs8",
"rand_core 0.6.4",
- "signature",
- "smallvec",
+ "sha2 0.10.8",
+ "signature 2.1.0",
+ "spki",
"subtle",
"zeroize",
]
@@ -2731,14 +2725,14 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
dependencies = [
- "semver 1.0.18",
+ "semver 1.0.20",
]
[[package]]
name = "rustix"
-version = "0.36.15"
+version = "0.36.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c37f1bd5ef1b5422177b7646cba67430579cfe2ace80f284fee876bca52ad941"
+checksum = "6da3636faa25820d8648e0e31c5d519bbb01f72fdf57131f0f5f7da5fed36eab"
dependencies = [
"bitflags 1.3.2",
"errno",
@@ -2750,28 +2744,26 @@ dependencies = [
[[package]]
name = "rustix"
-version = "0.37.23"
+version = "0.38.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06"
+checksum = "745ecfa778e66b2b63c88a61cb36e0eea109e803b0b86bf9879fbc77c70e86ed"
dependencies = [
- "bitflags 1.3.2",
+ "bitflags 2.4.1",
"errno",
- "io-lifetimes",
"libc",
- "linux-raw-sys 0.3.8",
+ "linux-raw-sys 0.4.10",
"windows-sys 0.48.0",
]
[[package]]
name = "rustls"
-version = "0.20.8"
+version = "0.21.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f"
+checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8"
dependencies = [
- "log",
"ring",
+ "rustls-webpki",
"sct",
- "webpki",
]
[[package]]
@@ -2780,7 +2772,17 @@ version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2"
dependencies = [
- "base64 0.21.2",
+ "base64 0.21.4",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.101.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c7d5dece342910d9ba34d259310cae3e0154b873b35408b787b59bce53d34fe"
+dependencies = [
+ "ring",
+ "untrusted",
]
[[package]]
@@ -2828,9 +2830,9 @@ dependencies = [
[[package]]
name = "sec1"
-version = "0.3.0"
+version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928"
+checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc"
dependencies = [
"base16ct",
"der",
@@ -2842,9 +2844,9 @@ dependencies = [
[[package]]
name = "security-framework"
-version = "2.9.1"
+version = "2.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8"
+checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
dependencies = [
"bitflags 1.3.2",
"core-foundation",
@@ -2855,9 +2857,9 @@ dependencies = [
[[package]]
name = "security-framework-sys"
-version = "2.9.0"
+version = "2.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7"
+checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"
dependencies = [
"core-foundation-sys",
"libc",
@@ -2874,9 +2876,9 @@ dependencies = [
[[package]]
name = "semver"
-version = "1.0.18"
+version = "1.0.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918"
+checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090"
[[package]]
name = "semver-parser"
@@ -2937,7 +2939,7 @@ checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.18",
+ "syn 2.0.38",
]
[[package]]
@@ -2946,7 +2948,7 @@ version = "1.0.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "46266871c240a00b8f503b877622fe33430b3c7d963bdc0f2adc511e54a1eae3"
dependencies = [
- "indexmap 2.0.0",
+ "indexmap 2.0.2",
"itoa",
"ryu",
"serde",
@@ -2966,9 +2968,9 @@ dependencies = [
[[package]]
name = "serde_v8"
-version = "0.106.0"
+version = "0.131.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1506733ba5b864018c44320fa3bb11dbb4bf01b62dd09eda007be73034371c51"
+checksum = "38cafa16d0a4288d75925351bb54d06d2e830118ad3fad393947bb11f91b18f3"
dependencies = [
"bytes",
"derive_more",
@@ -2993,9 +2995,9 @@ dependencies = [
[[package]]
name = "sha1"
-version = "0.10.5"
+version = "0.10.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
+checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
dependencies = [
"cfg-if",
"cpufeatures",
@@ -3017,9 +3019,9 @@ dependencies = [
[[package]]
name = "sha2"
-version = "0.10.7"
+version = "0.10.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
+checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
dependencies = [
"cfg-if",
"cpufeatures",
@@ -3040,9 +3042,9 @@ dependencies = [
[[package]]
name = "sharded-slab"
-version = "0.1.4"
+version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
+checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
dependencies = [
"lazy_static",
]
@@ -3061,6 +3063,12 @@ name = "signature"
version = "1.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c"
+
+[[package]]
+name = "signature"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500"
dependencies = [
"digest 0.10.7",
"rand_core 0.6.4",
@@ -3068,24 +3076,24 @@ dependencies = [
[[package]]
name = "siphasher"
-version = "0.3.10"
+version = "0.3.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
[[package]]
name = "slab"
-version = "0.4.8"
+version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
dependencies = [
"autocfg",
]
[[package]]
name = "smallvec"
-version = "1.11.0"
+version = "1.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
+checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a"
[[package]]
name = "smartstring"
@@ -3118,12 +3126,39 @@ dependencies = [
]
[[package]]
-name = "sourcemap"
-version = "6.2.3"
+name = "socket2"
+version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eed16231c92d0a6f0388f56e0ab2be24ecff1173f8e22f0ea5e074d0525631cb"
+checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "sourcemap"
+version = "6.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4cbf65ca7dc576cf50e21f8d0712d96d4fcfd797389744b7b222a85cdf5bd90"
dependencies = [
"data-encoding",
+ "debugid",
+ "if_chain",
+ "rustc_version 0.2.3",
+ "serde",
+ "serde_json",
+ "unicode-id",
+ "url",
+]
+
+[[package]]
+name = "sourcemap"
+version = "7.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbecc42a2b6131acc3bf9a25c9fe4161dba438eb52131bba83c5d781b5b70be3"
+dependencies = [
+ "data-encoding",
+ "debugid",
"if_chain",
"rustc_version 0.2.3",
"serde",
@@ -3139,10 +3174,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
[[package]]
-name = "spki"
-version = "0.6.0"
+name = "spin"
+version = "0.9.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+dependencies = [
+ "lock_api",
+]
+
+[[package]]
+name = "spki"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a"
dependencies = [
"base64ct",
"der",
@@ -3150,84 +3194,90 @@ dependencies = [
[[package]]
name = "sqlformat"
-version = "0.2.1"
+version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c12bc9199d1db8234678b7051747c07f517cdcf019262d1847b94ec8b1aee3e"
+checksum = "6b7b278788e7be4d0d29c0f39497a0eef3fba6bbc8e70d8bf7fde46edeaa9e85"
dependencies = [
- "itertools 0.10.5",
+ "itertools 0.11.0",
"nom",
"unicode_categories",
]
[[package]]
name = "sqlx"
-version = "0.6.3"
+version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8de3b03a925878ed54a954f621e64bf55a3c1bd29652d0d1a17830405350188"
+checksum = "0e50c216e3624ec8e7ecd14c6a6a6370aad6ee5d8cfc3ab30b5162eeeef2ed33"
dependencies = [
"sqlx-core",
"sqlx-macros",
+ "sqlx-mysql",
+ "sqlx-postgres",
+ "sqlx-sqlite",
]
[[package]]
name = "sqlx-core"
-version = "0.6.3"
+version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa8241483a83a3f33aa5fff7e7d9def398ff9990b2752b6c6112b83c6d246029"
+checksum = "8d6753e460c998bbd4cd8c6f0ed9a64346fcca0723d6e75e52fdc351c5d2169d"
dependencies = [
- "ahash 0.7.6",
+ "ahash",
"atoi",
- "base64 0.13.1",
- "bitflags 1.3.2",
"byteorder",
"bytes",
"chrono",
"crc",
"crossbeam-queue",
- "dirs",
"dotenvy",
"either",
"event-listener",
"futures-channel",
"futures-core",
"futures-intrusive",
+ "futures-io",
"futures-util",
"hashlink",
"hex",
- "hkdf",
- "hmac 0.12.1",
- "indexmap 1.9.3",
- "itoa",
- "libc",
+ "indexmap 2.0.2",
"log",
- "md-5",
"memchr",
"once_cell",
"paste",
"percent-encoding",
- "rand 0.8.5",
"rustls",
"rustls-pemfile",
"serde",
"serde_json",
- "sha1",
- "sha2 0.10.7",
+ "sha2 0.10.8",
"smallvec",
"sqlformat",
- "sqlx-rt",
- "stringprep",
"thiserror",
+ "tokio",
"tokio-stream",
+ "tracing",
"url",
"webpki-roots",
- "whoami",
]
[[package]]
name = "sqlx-macros"
-version = "0.6.3"
+version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9966e64ae989e7e575b19d7265cb79d7fc3cbbdf179835cb0d716f294c2049c9"
+checksum = "9a793bb3ba331ec8359c1853bd39eed32cdd7baaf22c35ccf5c92a7e8d1189ec"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "sqlx-core",
+ "sqlx-macros-core",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "sqlx-macros-core"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a4ee1e104e00dedb6aa5ffdd1343107b0a4702e862a84320ee7cc74782d96fc"
dependencies = [
"dotenvy",
"either",
@@ -3238,50 +3288,160 @@ dependencies = [
"quote",
"serde",
"serde_json",
- "sha2 0.10.7",
+ "sha2 0.10.8",
"sqlx-core",
- "sqlx-rt",
+ "sqlx-mysql",
+ "sqlx-postgres",
+ "sqlx-sqlite",
"syn 1.0.109",
+ "tempfile",
+ "tokio",
"url",
]
[[package]]
-name = "sqlx-rt"
-version = "0.6.3"
+name = "sqlx-mysql"
+version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "804d3f245f894e61b1e6263c84b23ca675d96753b5abfd5cc8597d86806e8024"
+checksum = "864b869fdf56263f4c95c45483191ea0af340f9f3e3e7b4d57a61c7c87a970db"
dependencies = [
+ "atoi",
+ "base64 0.21.4",
+ "bitflags 2.4.1",
+ "byteorder",
+ "bytes",
+ "chrono",
+ "crc",
+ "digest 0.10.7",
+ "dotenvy",
+ "either",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-util",
+ "generic-array",
+ "hex",
+ "hkdf",
+ "hmac 0.12.1",
+ "itoa",
+ "log",
+ "md-5",
+ "memchr",
"once_cell",
- "tokio",
- "tokio-rustls",
+ "percent-encoding",
+ "rand 0.8.5",
+ "rsa",
+ "serde",
+ "sha1",
+ "sha2 0.10.8",
+ "smallvec",
+ "sqlx-core",
+ "stringprep",
+ "thiserror",
+ "tracing",
+ "whoami",
+]
+
+[[package]]
+name = "sqlx-postgres"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb7ae0e6a97fb3ba33b23ac2671a5ce6e3cabe003f451abd5a56e7951d975624"
+dependencies = [
+ "atoi",
+ "base64 0.21.4",
+ "bitflags 2.4.1",
+ "byteorder",
+ "chrono",
+ "crc",
+ "dotenvy",
+ "etcetera",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-util",
+ "hex",
+ "hkdf",
+ "hmac 0.12.1",
+ "home",
+ "itoa",
+ "log",
+ "md-5",
+ "memchr",
+ "once_cell",
+ "rand 0.8.5",
+ "serde",
+ "serde_json",
+ "sha1",
+ "sha2 0.10.8",
+ "smallvec",
+ "sqlx-core",
+ "stringprep",
+ "thiserror",
+ "tracing",
+ "whoami",
+]
+
+[[package]]
+name = "sqlx-sqlite"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d59dc83cf45d89c555a577694534fcd1b55c545a816c816ce51f20bbe56a4f3f"
+dependencies = [
+ "atoi",
+ "chrono",
+ "flume",
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-intrusive",
+ "futures-util",
+ "libsqlite3-sys",
+ "log",
+ "percent-encoding",
+ "serde",
+ "sqlx-core",
+ "tracing",
+ "url",
+]
+
+[[package]]
+name = "ssh-cipher"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "caac132742f0d33c3af65bfcde7f6aa8f62f0e991d80db99149eb9d44708784f"
+dependencies = [
+ "cipher",
+ "ssh-encoding",
]
[[package]]
name = "ssh-encoding"
-version = "0.1.0"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "19cfdc32e0199062113edf41f344fbf784b8205a94600233c84eb838f45191e1"
+checksum = "eb9242b9ef4108a78e8cd1a2c98e193ef372437f8c22be363075233321dd4a15"
dependencies = [
"base64ct",
"pem-rfc7468",
- "sha2 0.10.7",
+ "sha2 0.10.8",
]
[[package]]
name = "ssh-key"
-version = "0.5.1"
+version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "288d8f5562af5a3be4bda308dd374b2c807b940ac370b5efa1c99311da91d9a1"
+checksum = "2180b3bc4955efd5661a97658d3cf4c8107e0d132f619195afe9486c13cca313"
dependencies = [
- "ed25519-dalek",
"p256",
"p384",
"rand_core 0.6.4",
"rsa",
"sec1",
- "sha2 0.10.7",
- "signature",
+ "sha2 0.10.8",
+ "signature 2.1.0",
+ "ssh-cipher",
"ssh-encoding",
+ "subtle",
"zeroize",
]
@@ -3318,7 +3478,7 @@ checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b"
dependencies = [
"new_debug_unreachable",
"once_cell",
- "parking_lot 0.12.1",
+ "parking_lot",
"phf_shared",
"precomputed-hash",
"serde",
@@ -3338,23 +3498,24 @@ dependencies = [
[[package]]
name = "string_enum"
-version = "0.4.0"
+version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0090512bdfee4b56d82480d66c0fd8a6f53f0fe0f97e075e949b252acdd482e0"
+checksum = "8fa4d4f81d7c05b9161f8de839975d3326328b8ba2831164b465524cc2f55252"
dependencies = [
"pmutil",
"proc-macro2",
"quote",
"swc_macros_common",
- "syn 1.0.109",
+ "syn 2.0.38",
]
[[package]]
name = "stringprep"
-version = "0.1.3"
+version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "db3737bde7edce97102e0e2b15365bf7a20bfdb5f60f4f9e8d7004258a51a8da"
+checksum = "bb41d74e231a107a1b4ee36bd1214b11285b77768d2e3824aedafa988fd36ee6"
dependencies = [
+ "finl_unicode",
"unicode-bidi",
"unicode-normalization",
]
@@ -3367,24 +3528,24 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
[[package]]
name = "strum"
-version = "0.24.1"
+version = "0.25.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f"
+checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125"
dependencies = [
"strum_macros",
]
[[package]]
name = "strum_macros"
-version = "0.24.3"
+version = "0.25.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59"
+checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0"
dependencies = [
"heck",
"proc-macro2",
"quote",
"rustversion",
- "syn 1.0.109",
+ "syn 2.0.38",
]
[[package]]
@@ -3395,9 +3556,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
[[package]]
name = "swc_atoms"
-version = "0.5.6"
+version = "0.5.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "93d0307dc4bfd107d49c7528350c372758cfca94fb503629b9a056e6a1572860"
+checksum = "9f54563d7dcba626d4acfe14ed12def7ecc28e004debe3ecd2c3ee07cc47e449"
dependencies = [
"once_cell",
"rustc-hash",
@@ -3409,11 +3570,10 @@ dependencies = [
[[package]]
name = "swc_common"
-version = "0.31.12"
+version = "0.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "19c774005489d2907fb67909cf42af926e72edee1366512777c605ba2ef19c94"
+checksum = "39cb7fcd56655c8ae7dcf2344f0be6cbff4d9c7cb401fe3ec8e56e1de8dfe582"
dependencies = [
- "ahash 0.7.6",
"ast_node",
"better_scoped_tls",
"cfg-if",
@@ -3425,7 +3585,7 @@ dependencies = [
"rustc-hash",
"serde",
"siphasher",
- "sourcemap",
+ "sourcemap 6.4.1",
"string_cache",
"swc_atoms",
"swc_eq_ignore_macros",
@@ -3437,9 +3597,9 @@ dependencies = [
[[package]]
name = "swc_config"
-version = "0.1.5"
+version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89c8fc2c12bb1634c7c32fc3c9b6b963ad8f034cc62c4ecddcf215dc4f6f959d"
+checksum = "9ba1c7a40d38f9dd4e9a046975d3faf95af42937b34b2b963be4d8f01239584b"
dependencies = [
"indexmap 1.9.3",
"serde",
@@ -3449,24 +3609,24 @@ dependencies = [
[[package]]
name = "swc_config_macro"
-version = "0.1.1"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7dadb9998d4f5fc36ef558ed5a092579441579ee8c6fcce84a5228cca9df4004"
+checksum = "e5b5aaca9a0082be4515f0fbbecc191bf5829cd25b5b9c0a2810f6a2bb0d6829"
dependencies = [
"pmutil",
"proc-macro2",
"quote",
"swc_macros_common",
- "syn 1.0.109",
+ "syn 2.0.38",
]
[[package]]
name = "swc_ecma_ast"
-version = "0.104.5"
+version = "0.109.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5cf9dd351d0c285dcd36535267953a18995d4dda0cbe34ac9d1df61aa415b26"
+checksum = "7bc2286cedd688a68f214faa1c19bb5cceab7c9c54d0cbe3273e4c1704e38f69"
dependencies = [
- "bitflags 2.3.3",
+ "bitflags 2.4.1",
"is-macro",
"num-bigint",
"scoped-tls",
@@ -3479,16 +3639,16 @@ dependencies = [
[[package]]
name = "swc_ecma_codegen"
-version = "0.139.17"
+version = "0.144.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c66d1ea16bb9b7ea6f87f17325742ff256fcbd65b188af57c2bf415fe4afc945"
+checksum = "8e62ba2c0ed1f119fc1a76542d007f1b2c12854d54dea15f5491363227debe11"
dependencies = [
"memchr",
"num-bigint",
"once_cell",
"rustc-hash",
"serde",
- "sourcemap",
+ "sourcemap 6.4.1",
"swc_atoms",
"swc_common",
"swc_ecma_ast",
@@ -3498,24 +3658,23 @@ dependencies = [
[[package]]
name = "swc_ecma_codegen_macros"
-version = "0.7.2"
+version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bf4ee0caee1018808d94ecd09490cb7affd3d504b19aa11c49238f5fc4b54901"
+checksum = "dcdff076dccca6cc6a0e0b2a2c8acfb066014382bc6df98ec99e755484814384"
dependencies = [
"pmutil",
"proc-macro2",
"quote",
"swc_macros_common",
- "syn 1.0.109",
+ "syn 2.0.38",
]
[[package]]
name = "swc_ecma_loader"
-version = "0.43.14"
+version = "0.44.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fe45f1e5dcc1b005544ff78253b787dea5dfd5e2f712b133964cdc3545c954a4"
+checksum = "e7d7c322462657ae27ac090a2c89f7e456c94416284a2f5ecf66c43a6a3c19d1"
dependencies = [
- "ahash 0.7.6",
"anyhow",
"pathdiff",
"serde",
@@ -3525,13 +3684,13 @@ dependencies = [
[[package]]
name = "swc_ecma_parser"
-version = "0.134.12"
+version = "0.139.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f0a3fcfe3d83dd445cbd9321882e47b467594433d9a21c4d6c37a27f534bb89e"
+checksum = "3eab46cb863bc5cd61535464e07e5b74d5f792fa26a27b9f6fd4c8daca9903b7"
dependencies = [
"either",
- "lexical",
"num-bigint",
+ "num-traits",
"serde",
"smallvec",
"smartstring",
@@ -3545,12 +3704,12 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_base"
-version = "0.127.18"
+version = "0.132.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f9c33ec5369178f3a0580ab86cfe89ffb9c3fbd122aed379cfb71d469d9d61c1"
+checksum = "01ffd4a8149052bfc1ec1832fcbe04f317846ce635a49ec438df33b06db27d26"
dependencies = [
"better_scoped_tls",
- "bitflags 2.3.3",
+ "bitflags 2.4.1",
"indexmap 1.9.3",
"once_cell",
"phf",
@@ -3568,9 +3727,9 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_classes"
-version = "0.116.18"
+version = "0.121.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6e3b0d5f362f0da97be1f1b06d7b0d8667ea70b4adeabff0dcaecb6259c09525"
+checksum = "f4b7fee0e2c6f12456d2aefb2418f2f26529b995945d493e1dce35a5a22584fc"
dependencies = [
"swc_atoms",
"swc_common",
@@ -3582,22 +3741,22 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_macros"
-version = "0.5.1"
+version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "984d5ac69b681fc5438f9abf82b0fda34fe04e119bc75f8213b7e01128c7c9a2"
+checksum = "8188eab297da773836ef5cf2af03ee5cca7a563e1be4b146f8141452c28cc690"
dependencies = [
"pmutil",
"proc-macro2",
"quote",
"swc_macros_common",
- "syn 1.0.109",
+ "syn 2.0.38",
]
[[package]]
name = "swc_ecma_transforms_proposal"
-version = "0.161.22"
+version = "0.166.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0cdce42d44ef775bc29f5ada3678a80ff72fa17a0ef705e14f63cfd0e0155e0e"
+checksum = "122fd9a69f464694edefbf9c59106b3c15e5cc8cb8575a97836e4fb79018e98f"
dependencies = [
"either",
"rustc-hash",
@@ -3615,11 +3774,10 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_react"
-version = "0.173.20"
+version = "0.178.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5fb9481ad4e2acba34c6fbb6d4ccc64efe9f1821675e883dcfa732d7220f4b1e"
+checksum = "675b5c755b0448268830e85e59429095d3423c0ce4a850b209c6f0eeab069f63"
dependencies = [
- "ahash 0.7.6",
"base64 0.13.1",
"dashmap",
"indexmap 1.9.3",
@@ -3640,9 +3798,9 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_typescript"
-version = "0.177.23"
+version = "0.182.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1fe2eea4f5b8a25c93cdaa29fb1ce4108893da88a11e61e04b7f5295b5468829"
+checksum = "4eba97b1ea71739fcf278aedad4677a3cacb52288a3f3566191b70d16a889de6"
dependencies = [
"serde",
"swc_atoms",
@@ -3656,9 +3814,9 @@ dependencies = [
[[package]]
name = "swc_ecma_utils"
-version = "0.117.13"
+version = "0.122.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad791bbfdafcebd878584021e050964c8ab68aba7eeac9d0ee4afba4c284a629"
+checksum = "11006a3398ffd4693c4d3b0a1b1a5030edbdc04228159f5301120a6178144708"
dependencies = [
"indexmap 1.9.3",
"num_cpus",
@@ -3674,9 +3832,9 @@ dependencies = [
[[package]]
name = "swc_ecma_visit"
-version = "0.90.5"
+version = "0.95.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ce3ac941ae1d6c7e683aa375fc71fbf58df58b441f614d757fbb10554936ca2"
+checksum = "0f628ec196e76e67892441e14eef2e423a738543d32bffdabfeec20c29582117"
dependencies = [
"num-bigint",
"swc_atoms",
@@ -3688,33 +3846,33 @@ dependencies = [
[[package]]
name = "swc_eq_ignore_macros"
-version = "0.1.1"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c20468634668c2bbab581947bb8c75c97158d5a6959f4ba33df20983b20b4f6"
+checksum = "05a95d367e228d52484c53336991fdcf47b6b553ef835d9159db4ba40efb0ee8"
dependencies = [
"pmutil",
"proc-macro2",
"quote",
- "syn 1.0.109",
+ "syn 2.0.38",
]
[[package]]
name = "swc_macros_common"
-version = "0.3.7"
+version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3e582c3e3c2269238524923781df5be49e011dbe29cf7683a2215d600a562ea6"
+checksum = "7a273205ccb09b51fabe88c49f3b34c5a4631c4c00a16ae20e03111d6a42e832"
dependencies = [
"pmutil",
"proc-macro2",
"quote",
- "syn 1.0.109",
+ "syn 2.0.38",
]
[[package]]
name = "swc_visit"
-version = "0.5.6"
+version = "0.5.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f412dd4fbc58f509a04e64f5c8038333142fc139e8232f01b883db0094b3b51"
+checksum = "e87c337fbb2d191bf371173dea6a957f01899adb8f189c6c31b122a6cfc98fc3"
dependencies = [
"either",
"swc_visit_macros",
@@ -3722,16 +3880,16 @@ dependencies = [
[[package]]
name = "swc_visit_macros"
-version = "0.5.7"
+version = "0.5.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4cfc226380ba54a5feed2c12f3ccd33f1ae8e959160290e5d2d9b4e918b6472a"
+checksum = "0f322730fb82f3930a450ac24de8c98523af7d34ab8cb2f46bcb405839891a99"
dependencies = [
"Inflector",
"pmutil",
"proc-macro2",
"quote",
"swc_macros_common",
- "syn 1.0.109",
+ "syn 2.0.38",
]
[[package]]
@@ -3747,15 +3905,36 @@ dependencies = [
[[package]]
name = "syn"
-version = "2.0.18"
+version = "2.0.38"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e"
+checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
+[[package]]
+name = "system-configuration"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "system-configuration-sys",
+]
+
+[[package]]
+name = "system-configuration-sys"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
[[package]]
name = "tap"
version = "1.0.1"
@@ -3764,23 +3943,22 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
[[package]]
name = "tempfile"
-version = "3.6.0"
+version = "3.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6"
+checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef"
dependencies = [
- "autocfg",
"cfg-if",
"fastrand",
- "redox_syscall 0.3.5",
- "rustix 0.37.23",
+ "redox_syscall",
+ "rustix 0.38.19",
"windows-sys 0.48.0",
]
[[package]]
name = "termcolor"
-version = "1.2.0"
+version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64"
dependencies = [
"winapi-util",
]
@@ -3817,7 +3995,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.18",
+ "syn 2.0.38",
]
[[package]]
@@ -3847,20 +4025,19 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "tokio"
-version = "1.29.1"
+version = "1.33.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "532826ff75199d5833b9d2c5fe410f29235e25704ee5f0ef599fb51c21f4a4da"
+checksum = "4f38200e3ef7995e5ef13baec2f432a6da0aa9ac495b2c0e8f3b7eec2c92d653"
dependencies = [
- "autocfg",
"backtrace",
"bytes",
"libc",
"mio",
"num_cpus",
- "parking_lot 0.12.1",
+ "parking_lot",
"pin-project-lite",
"signal-hook-registry",
- "socket2",
+ "socket2 0.5.4",
"tokio-macros",
"windows-sys 0.48.0",
]
@@ -3873,7 +4050,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.18",
+ "syn 2.0.38",
]
[[package]]
@@ -3886,17 +4063,6 @@ dependencies = [
"tokio",
]
-[[package]]
-name = "tokio-rustls"
-version = "0.23.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
-dependencies = [
- "rustls",
- "tokio",
- "webpki",
-]
-
[[package]]
name = "tokio-stream"
version = "0.1.14"
@@ -3911,9 +4077,9 @@ dependencies = [
[[package]]
name = "tokio-util"
-version = "0.7.8"
+version = "0.7.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
+checksum = "1d68074620f57a0b21594d9735eb2e98ab38b17f80d3fcb189fca266771ca60d"
dependencies = [
"bytes",
"futures-core",
@@ -3931,11 +4097,11 @@ checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
[[package]]
name = "toml_edit"
-version = "0.19.14"
+version = "0.19.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a"
+checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
dependencies = [
- "indexmap 2.0.0",
+ "indexmap 2.0.2",
"toml_datetime",
"winnow",
]
@@ -3949,7 +4115,7 @@ dependencies = [
"base32",
"base64 0.13.1",
"derive_more",
- "ed25519-dalek",
+ "ed25519-dalek 1.0.1",
"hex",
"hmac 0.11.0",
"rand 0.7.3",
@@ -3968,11 +4134,11 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
[[package]]
name = "tracing"
-version = "0.1.37"
+version = "0.1.39"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+checksum = "ee2ef2af84856a50c1d430afce2fdded0a4ec7eda868db86409b4543df0797f9"
dependencies = [
- "cfg-if",
+ "log",
"pin-project-lite",
"tracing-attributes",
"tracing-core",
@@ -3980,20 +4146,20 @@ dependencies = [
[[package]]
name = "tracing-attributes"
-version = "0.1.26"
+version = "0.1.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
+checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.18",
+ "syn 2.0.38",
]
[[package]]
name = "tracing-core"
-version = "0.1.31"
+version = "0.1.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
dependencies = [
"once_cell",
"valuable",
@@ -4081,9 +4247,9 @@ checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a"
[[package]]
name = "typenum"
-version = "1.16.0"
+version = "1.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
[[package]]
name = "unicode-bidi"
@@ -4093,15 +4259,15 @@ checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
[[package]]
name = "unicode-id"
-version = "0.3.3"
+version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d70b6494226b36008c8366c288d77190b3fad2eb4c10533139c1c1f461127f1a"
+checksum = "b1b6def86329695390197b82c1e244a54a131ceb66c996f2088a3876e2ae083f"
[[package]]
name = "unicode-ident"
-version = "1.0.11"
+version = "1.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
[[package]]
name = "unicode-normalization"
@@ -4120,9 +4286,9 @@ checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
[[package]]
name = "unicode-width"
-version = "0.1.10"
+version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
[[package]]
name = "unicode_categories"
@@ -4138,9 +4304,9 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
[[package]]
name = "url"
-version = "2.4.0"
+version = "2.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb"
+checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5"
dependencies = [
"form_urlencoded",
"idna",
@@ -4149,10 +4315,16 @@ dependencies = [
]
[[package]]
-name = "v8"
-version = "0.74.2"
+name = "uuid"
+version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7568bf38565bd5b350d96abbf3d09417e8c9dd74fbb38860e91b759e46f9009c"
+checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d"
+
+[[package]]
+name = "v8"
+version = "0.79.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15561535230812a1db89a696f1f16a12ae6c2c370c6b2241c68d4cb33963faf"
dependencies = [
"bitflags 1.3.2",
"fslock",
@@ -4220,7 +4392,7 @@ dependencies = [
"once_cell",
"proc-macro2",
"quote",
- "syn 2.0.18",
+ "syn 2.0.38",
"wasm-bindgen-shared",
]
@@ -4254,7 +4426,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.18",
+ "syn 2.0.38",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@@ -4275,34 +4447,25 @@ dependencies = [
"wasm-bindgen",
]
-[[package]]
-name = "webpki"
-version = "0.22.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
-dependencies = [
- "ring",
- "untrusted",
-]
-
[[package]]
name = "webpki-roots"
-version = "0.22.6"
+version = "0.24.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87"
+checksum = "b291546d5d9d1eab74f069c77749f2cb8504a12caa20f0f2de93ddbf6f411888"
dependencies = [
- "webpki",
+ "rustls-webpki",
]
[[package]]
name = "which"
-version = "4.4.0"
+version = "4.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269"
+checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7"
dependencies = [
"either",
- "libc",
+ "home",
"once_cell",
+ "rustix 0.38.19",
]
[[package]]
@@ -4310,10 +4473,6 @@ name = "whoami"
version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22fc3756b8a9133049b26c7f61ab35416c130e8c09b660f5b3958b446f52cc50"
-dependencies = [
- "wasm-bindgen",
- "web-sys",
-]
[[package]]
name = "winapi"
@@ -4333,9 +4492,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-util"
-version = "0.1.5"
+version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
dependencies = [
"winapi",
]
@@ -4347,12 +4506,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
-name = "windows"
-version = "0.48.0"
+name = "windows-core"
+version = "0.51.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64"
dependencies = [
- "windows-targets 0.48.1",
+ "windows-targets 0.48.5",
]
[[package]]
@@ -4370,7 +4529,7 @@ version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
dependencies = [
- "windows-targets 0.48.1",
+ "windows-targets 0.48.5",
]
[[package]]
@@ -4390,17 +4549,17 @@ dependencies = [
[[package]]
name = "windows-targets"
-version = "0.48.1"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
dependencies = [
- "windows_aarch64_gnullvm 0.48.0",
- "windows_aarch64_msvc 0.48.0",
- "windows_i686_gnu 0.48.0",
- "windows_i686_msvc 0.48.0",
- "windows_x86_64_gnu 0.48.0",
- "windows_x86_64_gnullvm 0.48.0",
- "windows_x86_64_msvc 0.48.0",
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
]
[[package]]
@@ -4411,9 +4570,9 @@ checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
[[package]]
name = "windows_aarch64_gnullvm"
-version = "0.48.0"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
[[package]]
name = "windows_aarch64_msvc"
@@ -4423,9 +4582,9 @@ checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
[[package]]
name = "windows_aarch64_msvc"
-version = "0.48.0"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
[[package]]
name = "windows_i686_gnu"
@@ -4435,9 +4594,9 @@ checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
[[package]]
name = "windows_i686_gnu"
-version = "0.48.0"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
[[package]]
name = "windows_i686_msvc"
@@ -4447,9 +4606,9 @@ checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
[[package]]
name = "windows_i686_msvc"
-version = "0.48.0"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
[[package]]
name = "windows_x86_64_gnu"
@@ -4459,9 +4618,9 @@ checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
[[package]]
name = "windows_x86_64_gnu"
-version = "0.48.0"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
[[package]]
name = "windows_x86_64_gnullvm"
@@ -4471,9 +4630,9 @@ checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
[[package]]
name = "windows_x86_64_gnullvm"
-version = "0.48.0"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
[[package]]
name = "windows_x86_64_msvc"
@@ -4483,26 +4642,27 @@ checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
[[package]]
name = "windows_x86_64_msvc"
-version = "0.48.0"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
[[package]]
name = "winnow"
-version = "0.5.0"
+version = "0.5.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "81fac9742fd1ad1bd9643b991319f72dd031016d44b77039a26977eb667141e7"
+checksum = "a3b801d0e0a6726477cc207f60162da452f3a95adb368399bef20a946e06f65c"
dependencies = [
"memchr",
]
[[package]]
name = "winreg"
-version = "0.10.1"
+version = "0.50.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
dependencies = [
- "winapi",
+ "cfg-if",
+ "windows-sys 0.48.0",
]
[[package]]
@@ -4543,7 +4703,7 @@ version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f355ab62ebe30b758c1f4ab096a306722c4b7dbfb9d8c07d18c70d71a945588"
dependencies = [
- "ahash 0.8.3",
+ "ahash",
"hashbrown 0.13.2",
"lazy_static",
"serde",
@@ -4566,5 +4726,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.18",
+ "syn 2.0.38",
]
diff --git a/libs/build-arm-v8-snapshot.sh b/libs/build-arm-v8-snapshot.sh
index 19e700dc4..4c11adfb4 100755
--- a/libs/build-arm-v8-snapshot.sh
+++ b/libs/build-arm-v8-snapshot.sh
@@ -22,7 +22,7 @@ rust-gnu-builder sh -c "(cd libs/ && cargo build -p snapshot_creator --release -
cd -
echo "Creating Arm v8 Snapshot"
-docker run $USE_TTY --platform linux/arm64/v8 --mount type=bind,src=$(pwd),dst=/mnt arm64v8/ubuntu:20.04 /bin/sh -c "cd /mnt && /mnt/target/aarch64-unknown-linux-gnu/release/snapshot_creator"
+docker run $USE_TTY --platform linux/arm64/v8 --mount type=bind,src=$(pwd),dst=/mnt arm64v8/ubuntu:22.04 /bin/sh -c "cd /mnt && /mnt/target/aarch64-unknown-linux-gnu/release/snapshot_creator"
sudo chown -R $USER target
sudo chown -R $USER ~/.cargo
sudo chown $USER JS_SNAPSHOT.bin
diff --git a/libs/embassy_container_init/Cargo.toml b/libs/embassy_container_init/Cargo.toml
index 27fb2a834..c7da951f7 100644
--- a/libs/embassy_container_init/Cargo.toml
+++ b/libs/embassy_container_init/Cargo.toml
@@ -20,7 +20,7 @@ serde = { version = "1", features = ["derive", "rc"] }
serde_json = "1"
helpers = { path = "../helpers" }
imbl = "2"
-nix = "0.25"
+nix = { version = "0.27", features = ["process", "signal"] }
tokio = { version = "1", features = ["full"] }
tokio-stream = { version = "0.1", features = ["io-util", "sync", "net"] }
tracing = "0.1"
@@ -30,7 +30,7 @@ tracing-subscriber = { version = "0.3", features = ["env-filter"] }
yajrc = { version = "*", git = "https://github.com/dr-bonez/yajrc.git", branch = "develop" }
[target.'cfg(target_os = "linux")'.dependencies]
-procfs = "0.14"
+procfs = "0.15"
[profile.test]
opt-level = 3
diff --git a/libs/helpers/Cargo.toml b/libs/helpers/Cargo.toml
index bc82a968b..0c6f5f028 100644
--- a/libs/helpers/Cargo.toml
+++ b/libs/helpers/Cargo.toml
@@ -8,13 +8,13 @@ edition = "2021"
[dependencies]
async-trait = "0.1.64"
color-eyre = "0.6.2"
-futures = "0.3.21"
+futures = "0.3.28"
lazy_async_pool = "0.3.3"
models = { path = "../models" }
-pin-project = "1.0.11"
+pin-project = "1.1.3"
serde = { version = "1.0", features = ["derive", "rc"] }
serde_json = "1.0"
-tokio = { version = "1.23", features = ["full"] }
-tokio-stream = { version = "0.1.9", features = ["io-util", "sync"] }
-tracing = "0.1.35"
+tokio = { version = "1", features = ["full"] }
+tokio-stream = { version = "0.1.14", features = ["io-util", "sync"] }
+tracing = "0.1.39"
yajrc = { version = "*", git = "https://github.com/dr-bonez/yajrc.git", branch = "develop" }
diff --git a/libs/helpers/src/lib.rs b/libs/helpers/src/lib.rs
index edbfce271..d7c51d5e1 100644
--- a/libs/helpers/src/lib.rs
+++ b/libs/helpers/src/lib.rs
@@ -72,6 +72,12 @@ pub async fn canonicalize(
#[pin_project::pin_project(PinnedDrop)]
pub struct NonDetachingJoinHandle(#[pin] JoinHandle);
+impl NonDetachingJoinHandle {
+ pub async fn wait_for_abort(self) -> Result