From 8115f5eb9514839dd6a04923bfe04ae79f9cd65d Mon Sep 17 00:00:00 2001
From: Neshura <neshura@neshweb.net>
Date: Wed, 7 Aug 2024 21:11:19 +0200
Subject: [PATCH 01/19] Release Candidate 0.0.1-rc.8

---
 .forgejo/workflows/build+release.yml | 6 +++---
 Cargo.lock                           | 2 +-
 Cargo.toml                           | 2 +-
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/.forgejo/workflows/build+release.yml b/.forgejo/workflows/build+release.yml
index 8d4509c..5367d52 100644
--- a/.forgejo/workflows/build+release.yml
+++ b/.forgejo/workflows/build+release.yml
@@ -47,9 +47,9 @@ jobs:
     runs-on: docker
     container: forgejo.neshweb.net/ci-docker-images/rust-node:latest
     outputs:
-      DEBIAN_NAME: ${{ steps.deb_bundle.outputs.debian_name }}
-      DEBIAN_REV: ${{ steps.deb_bundle.outputs.debian_rev }}
-      DEBIAN_REF: ${{ steps.deb_bundle.outputs.debian_ref }}
+      DEBIAN_NAME: ${{ steps.deb.outputs.debian_name }}
+      DEBIAN_REV: ${{ steps.deb.outputs.debian_rev }}
+      DEBIAN_REF: ${{ steps.deb.outputs.debian_ref }}
     steps:
       - name: Checking Out Repository Code
         uses: https://code.forgejo.org/actions/checkout@v3
diff --git a/Cargo.lock b/Cargo.lock
index 224c60e..fef82f0 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -34,7 +34,7 @@ dependencies = [
 
 [[package]]
 name = "api-backend"
-version = "0.0.1-rc.7"
+version = "0.0.1-rc.8"
 dependencies = [
  "axum",
  "chrono",
diff --git a/Cargo.toml b/Cargo.toml
index 39695b8..e3aa9fa 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["Neshura"]
 name = "api-backend"
-version = "0.0.1-rc.7"
+version = "0.0.1-rc.8"
 edition = "2021"
 description = "API Backend For Easier Uploading To Kavita"
 license = "GPL-3.0-or-later"

From 85ec2d8b0910871483bcf70b40b45679e7ceee5a Mon Sep 17 00:00:00 2001
From: Neshura <neshura@neshweb.net>
Date: Wed, 7 Aug 2024 21:18:22 +0200
Subject: [PATCH 02/19] Revert use of Var in Debian Upload

---
 .forgejo/workflows/build+release.yml | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/.forgejo/workflows/build+release.yml b/.forgejo/workflows/build+release.yml
index 5367d52..0805480 100644
--- a/.forgejo/workflows/build+release.yml
+++ b/.forgejo/workflows/build+release.yml
@@ -118,20 +118,20 @@ jobs:
         run: |
           echo 'curl -v --user ${{ secrets.FORGEJO_USERNAME }}:${{ secrets.FORGEJO_TOKEN }} \
           --upload-file release_blobs/${{ needs.build.outputs.debian_name }}_'${{ needs.build.outputs.debian_ref }}-${{ needs.build.outputs.debian_rev }}'_amd64.deb \
-          ${{ env.GITHUB_API_URL }}/packages/${{ env.GITHUB_REPOSITORY_OWNER }}/debian/pool/bookworm/staging/upload'
+          https://forgejo.neshweb.net/packages/${{ env.GITHUB_REPOSITORY_OWNER }}/debian/pool/bookworm/staging/upload'
           curl -v --user ${{ secrets.FORGEJO_USERNAME }}:${{ secrets.FORGEJO_TOKEN }} \
           --upload-file release_blobs/${{ needs.build.outputs.debian_name }}_${{ needs.build.outputs.debian_ref }}-${{ needs.build.outputs.debian_rev }}_amd64.deb \
-          ${{ env.GITHUB_API_URL }}/packages/${{ env.GITHUB_REPOSITORY_OWNER }}/debian/pool/bookworm/staging/upload
+          https://forgejo.neshweb.net/packages/${{ env.GITHUB_REPOSITORY_OWNER }}/debian/pool/bookworm/staging/upload
 
       - name: Upload Debian Package to main
         if: (! contains(github.ref_name, '-rc'))
         run: |
           echo 'curl -v --user ${{ secrets.FORGEJO_USERNAME }}:${{ secrets.FORGEJO_TOKEN }} \
           --upload-file release_blobs/${{ needs.build.outputs.debian_name }}_'${{ needs.build.outputs.debian_ref }}-${{ needs.build.outputs.debian_rev }}'_amd64.deb \
-          ${{ env.GITHUB_API_URL }}/packages/${{ env.GITHUB_REPOSITORY_OWNER }}/debian/pool/bookworm/main/upload'
+          https://forgejo.neshweb.net/packages/${{ env.GITHUB_REPOSITORY_OWNER }}/debian/pool/bookworm/main/upload'
           curl -v --user ${{ secrets.FORGEJO_USERNAME }}:${{ secrets.FORGEJO_TOKEN }} \
           --upload-file release_blobs/${{ needs.build.outputs.debian_name }}_${{ needs.build.outputs.debian_ref }}-${{ needs.build.outputs.debian_rev }}_amd64.deb \
-          ${{ env.GITHUB_API_URL }}/packages/${{ env.GITHUB_REPOSITORY_OWNER }}/debian/pool/bookworm/main/upload
+          https://forgejo.neshweb.net/packages/${{ env.GITHUB_REPOSITORY_OWNER }}/debian/pool/bookworm/main/upload
   
   create-release:
     needs: build

From f20fa5b3027e4a55d4f3f7bac7184d22bea7794c Mon Sep 17 00:00:00 2001
From: Neshura <neshura@neshweb.net>
Date: Wed, 7 Aug 2024 21:18:35 +0200
Subject: [PATCH 03/19] Release 0.0.1

---
 Cargo.lock | 2 +-
 Cargo.toml | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index fef82f0..45e9848 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -34,7 +34,7 @@ dependencies = [
 
 [[package]]
 name = "api-backend"
-version = "0.0.1-rc.8"
+version = "0.0.1"
 dependencies = [
  "axum",
  "chrono",
diff --git a/Cargo.toml b/Cargo.toml
index e3aa9fa..788cc4a 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["Neshura"]
 name = "api-backend"
-version = "0.0.1-rc.8"
+version = "0.0.1"
 edition = "2021"
 description = "API Backend For Easier Uploading To Kavita"
 license = "GPL-3.0-or-later"

From 42f48ccbf4fe7eb54cac4829f46a8990d28dc8c2 Mon Sep 17 00:00:00 2001
From: Neshura <neshura@neshweb.net>
Date: Wed, 7 Aug 2024 21:20:23 +0200
Subject: [PATCH 04/19] Use URL Variable for CI instead of Full API Variable

---
 .forgejo/workflows/build+release.yml | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/.forgejo/workflows/build+release.yml b/.forgejo/workflows/build+release.yml
index 0805480..70a0639 100644
--- a/.forgejo/workflows/build+release.yml
+++ b/.forgejo/workflows/build+release.yml
@@ -101,10 +101,10 @@ jobs:
         run: |
           echo 'curl -v --user ${{ secrets.FORGEJO_USERNAME }}:${{ secrets.FORGEJO_TOKEN }} \
           --upload-file release_blobs/${{ github.event.repository.name }}-linux-amd64 \
-          https://forgejo.neshweb.net/api/packages/${{ env.GITHUB_REPOSITORY_OWNER }}/generic/${{ github.event.repository.name }}/${{ github.ref_name }}/${{ github.event.repository.name }}-linux-amd64'
+          ${{ env.GITHUB_SERVER_URL }}/api/packages/${{ env.GITHUB_REPOSITORY_OWNER }}/generic/${{ github.event.repository.name }}/${{ github.ref_name }}/${{ github.event.repository.name }}-linux-amd64'
           curl -v --user ${{ secrets.FORGEJO_USERNAME }}:${{ secrets.FORGEJO_TOKEN }} \
           --upload-file release_blobs/${{ github.event.repository.name }}-linux-amd64 \
-          https://forgejo.neshweb.net/api/packages/${{ env.GITHUB_REPOSITORY_OWNER }}/generic/${{ github.event.repository.name }}/${{ github.ref_name }}/${{ github.event.repository.name }}-linux-amd64
+          ${{ env.GITHUB_SERVER_URL }}/api/packages/${{ env.GITHUB_REPOSITORY_OWNER }}/generic/${{ github.event.repository.name }}/${{ github.ref_name }}/${{ github.event.repository.name }}-linux-amd64
   
   upload-debian-package:
     needs: build
@@ -118,20 +118,20 @@ jobs:
         run: |
           echo 'curl -v --user ${{ secrets.FORGEJO_USERNAME }}:${{ secrets.FORGEJO_TOKEN }} \
           --upload-file release_blobs/${{ needs.build.outputs.debian_name }}_'${{ needs.build.outputs.debian_ref }}-${{ needs.build.outputs.debian_rev }}'_amd64.deb \
-          https://forgejo.neshweb.net/packages/${{ env.GITHUB_REPOSITORY_OWNER }}/debian/pool/bookworm/staging/upload'
+          ${{ env.GITHUB_SERVER_URL }}/packages/${{ env.GITHUB_REPOSITORY_OWNER }}/debian/pool/bookworm/staging/upload'
           curl -v --user ${{ secrets.FORGEJO_USERNAME }}:${{ secrets.FORGEJO_TOKEN }} \
           --upload-file release_blobs/${{ needs.build.outputs.debian_name }}_${{ needs.build.outputs.debian_ref }}-${{ needs.build.outputs.debian_rev }}_amd64.deb \
-          https://forgejo.neshweb.net/packages/${{ env.GITHUB_REPOSITORY_OWNER }}/debian/pool/bookworm/staging/upload
+          ${{ env.GITHUB_SERVER_URL }}/packages/${{ env.GITHUB_REPOSITORY_OWNER }}/debian/pool/bookworm/staging/upload
 
       - name: Upload Debian Package to main
         if: (! contains(github.ref_name, '-rc'))
         run: |
           echo 'curl -v --user ${{ secrets.FORGEJO_USERNAME }}:${{ secrets.FORGEJO_TOKEN }} \
           --upload-file release_blobs/${{ needs.build.outputs.debian_name }}_'${{ needs.build.outputs.debian_ref }}-${{ needs.build.outputs.debian_rev }}'_amd64.deb \
-          https://forgejo.neshweb.net/packages/${{ env.GITHUB_REPOSITORY_OWNER }}/debian/pool/bookworm/main/upload'
+          ${{ env.GITHUB_SERVER_URL }}/packages/${{ env.GITHUB_REPOSITORY_OWNER }}/debian/pool/bookworm/main/upload'
           curl -v --user ${{ secrets.FORGEJO_USERNAME }}:${{ secrets.FORGEJO_TOKEN }} \
           --upload-file release_blobs/${{ needs.build.outputs.debian_name }}_${{ needs.build.outputs.debian_ref }}-${{ needs.build.outputs.debian_rev }}_amd64.deb \
-          https://forgejo.neshweb.net/packages/${{ env.GITHUB_REPOSITORY_OWNER }}/debian/pool/bookworm/main/upload
+          ${{ env.GITHUB_SERVER_URL }}/packages/${{ env.GITHUB_REPOSITORY_OWNER }}/debian/pool/bookworm/main/upload
   
   create-release:
     needs: build
@@ -145,7 +145,7 @@ jobs:
         uses: actions/forgejo-release@v2
         with:
           direction: upload
-          url: https://forgejo.neshweb.net
+          url: ${{ env.GITHUB_SERVER_URL }}
           release-dir: release_blobs
           token: ${{ secrets.FORGEJO_TOKEN }}
           tag: ${{ github.ref_name }}
\ No newline at end of file

From 26950bc106937350d79465c021689d1b0b8d9a8e Mon Sep 17 00:00:00 2001
From: Neshura <neshura@neshweb.net>
Date: Wed, 7 Aug 2024 21:29:00 +0200
Subject: [PATCH 05/19] Fix API Endpoint for Debian Packages

---
 .forgejo/workflows/build+release.yml | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/.forgejo/workflows/build+release.yml b/.forgejo/workflows/build+release.yml
index 70a0639..15213ca 100644
--- a/.forgejo/workflows/build+release.yml
+++ b/.forgejo/workflows/build+release.yml
@@ -118,20 +118,20 @@ jobs:
         run: |
           echo 'curl -v --user ${{ secrets.FORGEJO_USERNAME }}:${{ secrets.FORGEJO_TOKEN }} \
           --upload-file release_blobs/${{ needs.build.outputs.debian_name }}_'${{ needs.build.outputs.debian_ref }}-${{ needs.build.outputs.debian_rev }}'_amd64.deb \
-          ${{ env.GITHUB_SERVER_URL }}/packages/${{ env.GITHUB_REPOSITORY_OWNER }}/debian/pool/bookworm/staging/upload'
+          ${{ env.GITHUB_SERVER_URL }}/api/packages/${{ env.GITHUB_REPOSITORY_OWNER }}/debian/pool/bookworm/staging/upload'
           curl -v --user ${{ secrets.FORGEJO_USERNAME }}:${{ secrets.FORGEJO_TOKEN }} \
           --upload-file release_blobs/${{ needs.build.outputs.debian_name }}_${{ needs.build.outputs.debian_ref }}-${{ needs.build.outputs.debian_rev }}_amd64.deb \
-          ${{ env.GITHUB_SERVER_URL }}/packages/${{ env.GITHUB_REPOSITORY_OWNER }}/debian/pool/bookworm/staging/upload
+          ${{ env.GITHUB_SERVER_URL }}/api/packages/${{ env.GITHUB_REPOSITORY_OWNER }}/debian/pool/bookworm/staging/upload
 
       - name: Upload Debian Package to main
         if: (! contains(github.ref_name, '-rc'))
         run: |
           echo 'curl -v --user ${{ secrets.FORGEJO_USERNAME }}:${{ secrets.FORGEJO_TOKEN }} \
           --upload-file release_blobs/${{ needs.build.outputs.debian_name }}_'${{ needs.build.outputs.debian_ref }}-${{ needs.build.outputs.debian_rev }}'_amd64.deb \
-          ${{ env.GITHUB_SERVER_URL }}/packages/${{ env.GITHUB_REPOSITORY_OWNER }}/debian/pool/bookworm/main/upload'
+          ${{ env.GITHUB_SERVER_URL }}/api/packages/${{ env.GITHUB_REPOSITORY_OWNER }}/debian/pool/bookworm/main/upload'
           curl -v --user ${{ secrets.FORGEJO_USERNAME }}:${{ secrets.FORGEJO_TOKEN }} \
           --upload-file release_blobs/${{ needs.build.outputs.debian_name }}_${{ needs.build.outputs.debian_ref }}-${{ needs.build.outputs.debian_rev }}_amd64.deb \
-          ${{ env.GITHUB_SERVER_URL }}/packages/${{ env.GITHUB_REPOSITORY_OWNER }}/debian/pool/bookworm/main/upload
+          ${{ env.GITHUB_SERVER_URL }}/api/packages/${{ env.GITHUB_REPOSITORY_OWNER }}/debian/pool/bookworm/main/upload
   
   create-release:
     needs: build

From f63dd66c7f2ca953be5cebd1a31559c8a41f48bb Mon Sep 17 00:00:00 2001
From: Neshura <neshura@neshweb.net>
Date: Wed, 7 Aug 2024 21:53:40 +0200
Subject: [PATCH 06/19] Adjust Systemd Service File

---
 debian/{kavita-web-manager-api.service => kwm-api@.service} | 1 +
 1 file changed, 1 insertion(+)
 rename debian/{kavita-web-manager-api.service => kwm-api@.service} (86%)

diff --git a/debian/kavita-web-manager-api.service b/debian/kwm-api@.service
similarity index 86%
rename from debian/kavita-web-manager-api.service
rename to debian/kwm-api@.service
index bab0986..48fa476 100644
--- a/debian/kavita-web-manager-api.service
+++ b/debian/kwm-api@.service
@@ -5,6 +5,7 @@ After=network-online.target
 
 [Service]
 Type=simple
+User=%i
 ExecStart=/usr/local/bin/kwm-api
 Restart=always
 RestartSec=3

From f15b2a59340d9ade26b6589fd05545e4ef858983 Mon Sep 17 00:00:00 2001
From: Neshura <neshura@neshweb.net>
Date: Wed, 7 Aug 2024 21:53:48 +0200
Subject: [PATCH 07/19] Release 0.0.2

---
 Cargo.lock | 2 +-
 Cargo.toml | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index 45e9848..05b99ba 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -34,7 +34,7 @@ dependencies = [
 
 [[package]]
 name = "api-backend"
-version = "0.0.1"
+version = "0.0.2"
 dependencies = [
  "axum",
  "chrono",
diff --git a/Cargo.toml b/Cargo.toml
index 788cc4a..93345e9 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["Neshura"]
 name = "api-backend"
-version = "0.0.1"
+version = "0.0.2"
 edition = "2021"
 description = "API Backend For Easier Uploading To Kavita"
 license = "GPL-3.0-or-later"

From f9881572760733f67fa6300b302861240d7a8396 Mon Sep 17 00:00:00 2001
From: Neshura <neshura@neshweb.net>
Date: Wed, 7 Aug 2024 21:57:39 +0200
Subject: [PATCH 08/19] Further attempt to adjust Systemd Script

---
 debian/{kwm-api@.service => api-backend.service} | 1 -
 1 file changed, 1 deletion(-)
 rename debian/{kwm-api@.service => api-backend.service} (86%)

diff --git a/debian/kwm-api@.service b/debian/api-backend.service
similarity index 86%
rename from debian/kwm-api@.service
rename to debian/api-backend.service
index 48fa476..bab0986 100644
--- a/debian/kwm-api@.service
+++ b/debian/api-backend.service
@@ -5,7 +5,6 @@ After=network-online.target
 
 [Service]
 Type=simple
-User=%i
 ExecStart=/usr/local/bin/kwm-api
 Restart=always
 RestartSec=3

From 514d0871185794e235f777c2b4804ca5c4dc6a7b Mon Sep 17 00:00:00 2001
From: Neshura <neshura@neshweb.net>
Date: Wed, 7 Aug 2024 21:57:49 +0200
Subject: [PATCH 09/19] Release 0.0.3

---
 Cargo.lock | 2 +-
 Cargo.toml | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index 05b99ba..7e346ad 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -34,7 +34,7 @@ dependencies = [
 
 [[package]]
 name = "api-backend"
-version = "0.0.2"
+version = "0.0.3"
 dependencies = [
  "axum",
  "chrono",
diff --git a/Cargo.toml b/Cargo.toml
index 93345e9..5183df8 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["Neshura"]
 name = "api-backend"
-version = "0.0.2"
+version = "0.0.3"
 edition = "2021"
 description = "API Backend For Easier Uploading To Kavita"
 license = "GPL-3.0-or-later"

From 8c1fddc24a09bdb8bb15a2c17bb1d7c4dc514b38 Mon Sep 17 00:00:00 2001
From: Neshura <neshura@neshweb.net>
Date: Wed, 7 Aug 2024 22:01:53 +0200
Subject: [PATCH 10/19] Actual Systemd Fix

---
 Cargo.toml                                      | 2 +-
 debian/{api-backend.service => kwm-api.service} | 0
 2 files changed, 1 insertion(+), 1 deletion(-)
 rename debian/{api-backend.service => kwm-api.service} (100%)

diff --git a/Cargo.toml b/Cargo.toml
index 5183df8..ce4b606 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -20,7 +20,7 @@ assets = [
         "755",
     ]
 ]
-systemd-units = { enable = false }
+systemd-units = { unit-name = "kwm-api", enable = false }
 
 [dependencies]
 axum = "0.7"
diff --git a/debian/api-backend.service b/debian/kwm-api.service
similarity index 100%
rename from debian/api-backend.service
rename to debian/kwm-api.service

From aec25c544909374ff5cf609f672698afb0085212 Mon Sep 17 00:00:00 2001
From: Neshura <neshura@neshweb.net>
Date: Wed, 7 Aug 2024 22:02:02 +0200
Subject: [PATCH 11/19] Release 0.0.4

---
 Cargo.lock | 2 +-
 Cargo.toml | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index 7e346ad..97e782c 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -34,7 +34,7 @@ dependencies = [
 
 [[package]]
 name = "api-backend"
-version = "0.0.3"
+version = "0.0.4"
 dependencies = [
  "axum",
  "chrono",
diff --git a/Cargo.toml b/Cargo.toml
index ce4b606..ef3662e 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["Neshura"]
 name = "api-backend"
-version = "0.0.3"
+version = "0.0.4"
 edition = "2021"
 description = "API Backend For Easier Uploading To Kavita"
 license = "GPL-3.0-or-later"

From f78a5d991c396f73a5070a81f30f02b3220bc5ea Mon Sep 17 00:00:00 2001
From: Neshura <neshura@neshweb.net>
Date: Wed, 7 Aug 2024 22:31:55 +0200
Subject: [PATCH 12/19] Add Library Refresh after File Post

---
 Cargo.lock  | 650 ++++++++++++++++++++++++++++++++++++++++++++++++++--
 Cargo.toml  |   3 +
 src/main.rs |  38 +++
 3 files changed, 673 insertions(+), 18 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index 97e782c..da839ae 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -42,6 +42,9 @@ dependencies = [
  "futures",
  "log",
  "parking_lot",
+ "reqwest",
+ "serde",
+ "serde_json",
  "systemd-journal-logger",
  "tokio",
  "tokio-util",
@@ -59,6 +62,12 @@ dependencies = [
  "syn",
 ]
 
+[[package]]
+name = "atomic-waker"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
+
 [[package]]
 name = "autocfg"
 version = "1.3.0"
@@ -135,6 +144,18 @@ dependencies = [
  "rustc-demangle",
 ]
 
+[[package]]
+name = "base64"
+version = "0.22.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
 [[package]]
 name = "bitflags"
 version = "2.6.0"
@@ -176,7 +197,17 @@ dependencies = [
  "js-sys",
  "num-traits",
  "wasm-bindgen",
- "windows-targets",
+ "windows-targets 0.52.6",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
 ]
 
 [[package]]
@@ -191,6 +222,21 @@ version = "0.15.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f"
 
+[[package]]
+name = "encoding_rs"
+version = "0.8.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
 [[package]]
 name = "errno"
 version = "0.3.9"
@@ -198,15 +244,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba"
 dependencies = [
  "libc",
- "windows-sys",
+ "windows-sys 0.52.0",
 ]
 
+[[package]]
+name = "fastrand"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a"
+
 [[package]]
 name = "fnv"
 version = "1.0.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
 
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
 [[package]]
 name = "form_urlencoded"
 version = "1.2.1"
@@ -305,12 +372,48 @@ dependencies = [
  "slab",
 ]
 
+[[package]]
+name = "getrandom"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
 [[package]]
 name = "gimli"
 version = "0.29.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd"
 
+[[package]]
+name = "h2"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab"
+dependencies = [
+ "atomic-waker",
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
+
 [[package]]
 name = "hermit-abi"
 version = "0.3.9"
@@ -372,6 +475,7 @@ dependencies = [
  "bytes",
  "futures-channel",
  "futures-util",
+ "h2",
  "http",
  "http-body",
  "httparse",
@@ -380,6 +484,40 @@ dependencies = [
  "pin-project-lite",
  "smallvec",
  "tokio",
+ "want",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.27.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155"
+dependencies = [
+ "futures-util",
+ "http",
+ "hyper",
+ "hyper-util",
+ "rustls",
+ "rustls-pki-types",
+ "tokio",
+ "tokio-rustls",
+ "tower-service",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0"
+dependencies = [
+ "bytes",
+ "http-body-util",
+ "hyper",
+ "hyper-util",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+ "tower-service",
 ]
 
 [[package]]
@@ -389,12 +527,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9"
 dependencies = [
  "bytes",
+ "futures-channel",
  "futures-util",
  "http",
  "http-body",
  "hyper",
  "pin-project-lite",
+ "socket2",
  "tokio",
+ "tower",
+ "tower-service",
+ "tracing",
 ]
 
 [[package]]
@@ -420,6 +563,32 @@ dependencies = [
  "cc",
 ]
 
+[[package]]
+name = "idna"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3fc2e30ba82dd1b3911c8de1ffc143c74a914a14e99514d7637e3099df5ea0"
+dependencies = [
+ "equivalent",
+ "hashbrown",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3"
+
 [[package]]
 name = "itoa"
 version = "1.0.11"
@@ -502,7 +671,24 @@ dependencies = [
  "hermit-abi",
  "libc",
  "wasi",
- "windows-sys",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466"
+dependencies = [
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
 ]
 
 [[package]]
@@ -529,6 +715,50 @@ version = "1.19.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
 
+[[package]]
+name = "openssl"
+version = "0.10.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1"
+dependencies = [
+ "bitflags 2.6.0",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.103"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
 [[package]]
 name = "parking_lot"
 version = "0.12.3"
@@ -549,7 +779,7 @@ dependencies = [
  "libc",
  "redox_syscall",
  "smallvec",
- "windows-targets",
+ "windows-targets 0.52.6",
 ]
 
 [[package]]
@@ -590,6 +820,12 @@ version = "0.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
 
+[[package]]
+name = "pkg-config"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec"
+
 [[package]]
 name = "proc-macro2"
 version = "1.0.86"
@@ -614,7 +850,65 @@ version = "0.5.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4"
 dependencies = [
- "bitflags",
+ "bitflags 2.6.0",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.12.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37"
+dependencies = [
+ "base64",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "http-body-util",
+ "hyper",
+ "hyper-rustls",
+ "hyper-tls",
+ "hyper-util",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "native-tls",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustls-pemfile",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "sync_wrapper 1.0.1",
+ "system-configuration",
+ "tokio",
+ "tokio-native-tls",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winreg",
+]
+
+[[package]]
+name = "ring"
+version = "0.17.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d"
+dependencies = [
+ "cc",
+ "cfg-if",
+ "getrandom",
+ "libc",
+ "spin",
+ "untrusted",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
@@ -629,11 +923,51 @@ version = "0.38.34"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f"
 dependencies = [
- "bitflags",
+ "bitflags 2.6.0",
  "errno",
  "libc",
  "linux-raw-sys",
- "windows-sys",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.23.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044"
+dependencies = [
+ "once_cell",
+ "rustls-pki-types",
+ "rustls-webpki",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425"
+dependencies = [
+ "base64",
+ "rustls-pki-types",
+]
+
+[[package]]
+name = "rustls-pki-types"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0"
+
+[[package]]
+name = "rustls-webpki"
+version = "0.102.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e"
+dependencies = [
+ "ring",
+ "rustls-pki-types",
+ "untrusted",
 ]
 
 [[package]]
@@ -648,12 +982,44 @@ version = "1.0.18"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
 
+[[package]]
+name = "schannel"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534"
+dependencies = [
+ "windows-sys 0.52.0",
+]
+
 [[package]]
 name = "scopeguard"
 version = "1.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
 
+[[package]]
+name = "security-framework"
+version = "2.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02"
+dependencies = [
+ "bitflags 2.6.0",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
 [[package]]
 name = "serde"
 version = "1.0.204"
@@ -739,9 +1105,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c"
 dependencies = [
  "libc",
- "windows-sys",
+ "windows-sys 0.52.0",
 ]
 
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+
+[[package]]
+name = "subtle"
+version = "2.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
+
 [[package]]
 name = "syn"
 version = "2.0.72"
@@ -765,6 +1143,27 @@ version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394"
 
+[[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 = "systemd-journal-logger"
 version = "2.1.1"
@@ -775,6 +1174,34 @@ dependencies = [
  "rustix",
 ]
 
+[[package]]
+name = "tempfile"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "once_cell",
+ "rustix",
+ "windows-sys 0.59.0",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
 [[package]]
 name = "tokio"
 version = "1.39.2"
@@ -790,7 +1217,7 @@ dependencies = [
  "signal-hook-registry",
  "socket2",
  "tokio-macros",
- "windows-sys",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
@@ -804,6 +1231,27 @@ dependencies = [
  "syn",
 ]
 
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4"
+dependencies = [
+ "rustls",
+ "rustls-pki-types",
+ "tokio",
+]
+
 [[package]]
 name = "tokio-util"
 version = "0.7.11"
@@ -865,12 +1313,50 @@ dependencies = [
  "once_cell",
 ]
 
+[[package]]
+name = "try-lock"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75"
+
 [[package]]
 name = "unicode-ident"
 version = "1.0.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
 
+[[package]]
+name = "unicode-normalization"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "untrusted"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
+
+[[package]]
+name = "url"
+version = "2.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
 [[package]]
 name = "urlencoding"
 version = "2.1.3"
@@ -883,6 +1369,21 @@ version = "1.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "5a84c137d37ab0142f0f2ddfe332651fdbf252e7b7dbb4e67b6c1f1b2e925101"
 
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "want"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+dependencies = [
+ "try-lock",
+]
+
 [[package]]
 name = "wasi"
 version = "0.11.0+wasi-snapshot-preview1"
@@ -914,6 +1415,18 @@ dependencies = [
  "wasm-bindgen-shared",
 ]
 
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
 [[package]]
 name = "wasm-bindgen-macro"
 version = "0.2.92"
@@ -943,13 +1456,32 @@ version = "0.2.92"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96"
 
+[[package]]
+name = "web-sys"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
 [[package]]
 name = "windows-core"
 version = "0.52.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
 dependencies = [
- "windows-targets",
+ "windows-targets 0.52.6",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.5",
 ]
 
 [[package]]
@@ -958,7 +1490,31 @@ version = "0.52.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
 dependencies = [
- "windows-targets",
+ "windows-targets 0.52.6",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.59.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
+dependencies = [
+ "windows-targets 0.52.6",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "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]]
@@ -967,28 +1523,46 @@ version = "0.52.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
 dependencies = [
- "windows_aarch64_gnullvm",
- "windows_aarch64_msvc",
- "windows_i686_gnu",
+ "windows_aarch64_gnullvm 0.52.6",
+ "windows_aarch64_msvc 0.52.6",
+ "windows_i686_gnu 0.52.6",
  "windows_i686_gnullvm",
- "windows_i686_msvc",
- "windows_x86_64_gnu",
- "windows_x86_64_gnullvm",
- "windows_x86_64_msvc",
+ "windows_i686_msvc 0.52.6",
+ "windows_x86_64_gnu 0.52.6",
+ "windows_x86_64_gnullvm 0.52.6",
+ "windows_x86_64_msvc 0.52.6",
 ]
 
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
 [[package]]
 name = "windows_aarch64_gnullvm"
 version = "0.52.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
 
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
 [[package]]
 name = "windows_aarch64_msvc"
 version = "0.52.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
 
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
 [[package]]
 name = "windows_i686_gnu"
 version = "0.52.6"
@@ -1001,26 +1575,66 @@ version = "0.52.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
 
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
 [[package]]
 name = "windows_i686_msvc"
 version = "0.52.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
 
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
 [[package]]
 name = "windows_x86_64_gnu"
 version = "0.52.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
 
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
 [[package]]
 name = "windows_x86_64_gnullvm"
 version = "0.52.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
 
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
 [[package]]
 name = "windows_x86_64_msvc"
 version = "0.52.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
+
+[[package]]
+name = "winreg"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5"
+dependencies = [
+ "cfg-if",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "zeroize"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
diff --git a/Cargo.toml b/Cargo.toml
index ef3662e..e4fb699 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -29,6 +29,9 @@ dotenv = "0.15"
 futures = "0.3"
 log = "0.4"
 parking_lot = "0.12"
+reqwest = "0.12"
+serde = { version = "1.0", features = ["derive"] }
+serde_json = "1.0"
 systemd-journal-logger = "2.1"
 tokio = {version = "1.39", features = ["full"]}
 tokio-util = { version = "0.7", features = ["io"] }
diff --git a/src/main.rs b/src/main.rs
index 71f2297..f4b1cc2 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,6 +1,7 @@
 mod logging;
 
 use std::collections::HashMap;
+use std::fmt::format;
 use std::path::{Path, PathBuf};
 use axum::body::BodyDataStream;
 use axum::extract::{Request, State};
@@ -10,6 +11,8 @@ use axum::routing::post;
 use dotenv::{dotenv, var};
 use futures::TryStreamExt;
 use log::LevelFilter;
+use reqwest::{Error, Response};
+use serde::Serialize;
 use systemd_journal_logger::JournalLog;
 use tokio::fs::File;
 use tokio::{fs, io};
@@ -192,6 +195,34 @@ async fn upload_file(state: &mut App, request: Request) {
     if let Err(e) = stream_to_file(&pathbuf, file_stream).await {
         state.log.error(format!("{}: {}", e.0, e.1));
     };
+
+    // post to kavita, trigger api refresh
+
+    ///$KAVITA_URL/api/Library/scan-folder
+    let client = reqwest::Client::new();
+    let url = format!("{}/api/Library/scan-folder", var("KAVITA_URL").expect("KAVITA_URL needs to be set in the .env file"));
+
+    let request_body = LibraryScanBody {
+        directory: file.format,
+        api_key: var("KAVITA_API_KEY").expect("KAVITA_API_KEY needs to be set in the .env file")
+    };
+    
+    let body = serde_json::to_string::<LibraryScanBody>(&request_body).expect("Unable to Parse LibraryScanBody");
+
+    let res = client
+        .post(url)
+        .body(body)
+        .send()
+        .await;
+    
+    match res {
+        Ok(_) => {
+            state.log.info("Scan Triggered".to_string());
+        }
+        Err(e) => {
+            state.log.error(format!("Error Triggering Library Scan: {e}"));
+        }
+    }
 }
 
 async fn stream_to_file(path: &PathBuf, stream: BodyDataStream) -> Result<(), (StatusCode, String)>
@@ -214,3 +245,10 @@ async fn stream_to_file(path: &PathBuf, stream: BodyDataStream) -> Result<(), (S
         .await
         .map_err(|err| (StatusCode::INTERNAL_SERVER_ERROR, err.to_string()))
 }
+
+#[derive(Serialize)]
+#[serde(rename_all="camelCase")]
+struct LibraryScanBody {
+    directory: String,
+    api_key: String,
+}

From 33e668be65eef8868cf51ba61cc402c10034f402 Mon Sep 17 00:00:00 2001
From: Neshura <neshura@neshweb.net>
Date: Wed, 7 Aug 2024 22:32:10 +0200
Subject: [PATCH 13/19] Release 0.0.5

---
 Cargo.lock | 2 +-
 Cargo.toml | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index da839ae..a862c8d 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -34,7 +34,7 @@ dependencies = [
 
 [[package]]
 name = "api-backend"
-version = "0.0.4"
+version = "0.0.5"
 dependencies = [
  "axum",
  "chrono",
diff --git a/Cargo.toml b/Cargo.toml
index e4fb699..a6a4e3c 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["Neshura"]
 name = "api-backend"
-version = "0.0.4"
+version = "0.0.5"
 edition = "2021"
 description = "API Backend For Easier Uploading To Kavita"
 license = "GPL-3.0-or-later"

From 37ec615cbddf910d893cecd2d4f6179cfae57868 Mon Sep 17 00:00:00 2001
From: Neshura <neshura@neshweb.net>
Date: Wed, 7 Aug 2024 22:34:10 +0200
Subject: [PATCH 14/19] Hotfix

---
 src/main.rs | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/main.rs b/src/main.rs
index f4b1cc2..95de97f 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -203,7 +203,7 @@ async fn upload_file(state: &mut App, request: Request) {
     let url = format!("{}/api/Library/scan-folder", var("KAVITA_URL").expect("KAVITA_URL needs to be set in the .env file"));
 
     let request_body = LibraryScanBody {
-        directory: file.format,
+        folder_path: file.format,
         api_key: var("KAVITA_API_KEY").expect("KAVITA_API_KEY needs to be set in the .env file")
     };
     
@@ -249,6 +249,6 @@ async fn stream_to_file(path: &PathBuf, stream: BodyDataStream) -> Result<(), (S
 #[derive(Serialize)]
 #[serde(rename_all="camelCase")]
 struct LibraryScanBody {
-    directory: String,
+    folder_path: String,
     api_key: String,
 }

From 3abca4c124d15fef8d3785449e2e9d106b183922 Mon Sep 17 00:00:00 2001
From: Neshura <neshura@neshweb.net>
Date: Wed, 7 Aug 2024 22:34:21 +0200
Subject: [PATCH 15/19] Release 0.0.6

---
 Cargo.lock | 2 +-
 Cargo.toml | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index a862c8d..f8e0f1c 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -34,7 +34,7 @@ dependencies = [
 
 [[package]]
 name = "api-backend"
-version = "0.0.5"
+version = "0.0.6"
 dependencies = [
  "axum",
  "chrono",
diff --git a/Cargo.toml b/Cargo.toml
index a6a4e3c..8d38518 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["Neshura"]
 name = "api-backend"
-version = "0.0.5"
+version = "0.0.6"
 edition = "2021"
 description = "API Backend For Easier Uploading To Kavita"
 license = "GPL-3.0-or-later"

From 3e27cad6a8a277f270431739305837fb8490b929 Mon Sep 17 00:00:00 2001
From: Neshura <neshura@neshweb.net>
Date: Wed, 7 Aug 2024 22:50:02 +0200
Subject: [PATCH 16/19] Fix Scan Trigger by providing JWT Auth

---
 src/main.rs | 64 ++++++++++++++++++++++++++++++++++++-----------------
 1 file changed, 44 insertions(+), 20 deletions(-)

diff --git a/src/main.rs b/src/main.rs
index 95de97f..27c0a9e 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,7 +1,6 @@
 mod logging;
 
 use std::collections::HashMap;
-use std::fmt::format;
 use std::path::{Path, PathBuf};
 use axum::body::BodyDataStream;
 use axum::extract::{Request, State};
@@ -11,8 +10,7 @@ use axum::routing::post;
 use dotenv::{dotenv, var};
 use futures::TryStreamExt;
 use log::LevelFilter;
-use reqwest::{Error, Response};
-use serde::Serialize;
+use serde::{Deserialize, Serialize};
 use systemd_journal_logger::JournalLog;
 use tokio::fs::File;
 use tokio::{fs, io};
@@ -200,29 +198,43 @@ async fn upload_file(state: &mut App, request: Request) {
 
     ///$KAVITA_URL/api/Library/scan-folder
     let client = reqwest::Client::new();
-    let url = format!("{}/api/Library/scan-folder", var("KAVITA_URL").expect("KAVITA_URL needs to be set in the .env file"));
-
-    let request_body = LibraryScanBody {
-        folder_path: file.format,
-        api_key: var("KAVITA_API_KEY").expect("KAVITA_API_KEY needs to be set in the .env file")
-    };
+    let jwt_url = format!("{}/api/Plugin/authenticate?apiKey={}&pluginName=kwm-api", var("KAVITA_URL").expect("KAVITA_URL needs to be set in the .env file"), var("KAVITA_API_KEY").expect("KAVITA_API_KEY needs to be set in the .env file"));
     
-    let body = serde_json::to_string::<LibraryScanBody>(&request_body).expect("Unable to Parse LibraryScanBody");
+    match client.post(jwt_url).send().await {
+        Ok(data) => {
+            let auth: PluginAuthResponse = serde_json::from_str(&data.text().await.unwrap()).unwrap();
+            let url = format!("{}/api/Library/scan-folder", var("KAVITA_URL").expect("KAVITA_URL needs to be set in the .env file"));
 
-    let res = client
-        .post(url)
-        .body(body)
-        .send()
-        .await;
-    
-    match res {
-        Ok(_) => {
-            state.log.info("Scan Triggered".to_string());
+            let request_body = LibraryScanBody {
+                folder_path: file.format,
+                api_key: var("KAVITA_API_KEY").expect("KAVITA_API_KEY needs to be set in the .env file")
+            };
+
+            let body = serde_json::to_string::<LibraryScanBody>(&request_body).expect("Unable to Parse LibraryScanBody");
+
+            let res = client
+                .post(url)
+                .bearer_auth(auth.token)
+                .body(body)
+                .send()
+                .await;
+
+            match res {
+                Ok(_) => {
+                    state.log.info("Scan Triggered".to_string());
+                }
+                Err(e) => {
+                    state.log.error(format!("Error Triggering Library Scan: {e}"));
+                }
+            }
         }
         Err(e) => {
-            state.log.error(format!("Error Triggering Library Scan: {e}"));
+            
         }
     }
+    
+    
+    
 }
 
 async fn stream_to_file(path: &PathBuf, stream: BodyDataStream) -> Result<(), (StatusCode, String)>
@@ -252,3 +264,15 @@ struct LibraryScanBody {
     folder_path: String,
     api_key: String,
 }
+
+#[derive(Deserialize)]
+#[serde(rename_all="camelCase")]
+struct PluginAuthResponse {
+    username: String,
+    token: String,
+    refresh_token: String,
+    api_key: String,
+    preferences: serde_json::Value,
+    age_restriction: serde_json::Value,
+    kavita_version: String
+}

From a9245c1a3cc8f99777fc503505dbcbd894bdbfdf Mon Sep 17 00:00:00 2001
From: Neshura <neshura@neshweb.net>
Date: Wed, 7 Aug 2024 22:50:12 +0200
Subject: [PATCH 17/19] Release 0.0.7

---
 Cargo.lock | 2 +-
 Cargo.toml | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index f8e0f1c..905c186 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -34,7 +34,7 @@ dependencies = [
 
 [[package]]
 name = "api-backend"
-version = "0.0.6"
+version = "0.0.7"
 dependencies = [
  "axum",
  "chrono",
diff --git a/Cargo.toml b/Cargo.toml
index 8d38518..8e36bc4 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["Neshura"]
 name = "api-backend"
-version = "0.0.6"
+version = "0.0.7"
 edition = "2021"
 description = "API Backend For Easier Uploading To Kavita"
 license = "GPL-3.0-or-later"

From 838414f9d6f0e61d2fa82aa492184bd6af9ebaaa Mon Sep 17 00:00:00 2001
From: Neshura <neshura@neshweb.net>
Date: Wed, 7 Aug 2024 23:01:12 +0200
Subject: [PATCH 18/19] Use Authorization Header instead of Bearer Auth Header

---
 src/main.rs | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/main.rs b/src/main.rs
index 27c0a9e..44348fc 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -199,7 +199,7 @@ async fn upload_file(state: &mut App, request: Request) {
     ///$KAVITA_URL/api/Library/scan-folder
     let client = reqwest::Client::new();
     let jwt_url = format!("{}/api/Plugin/authenticate?apiKey={}&pluginName=kwm-api", var("KAVITA_URL").expect("KAVITA_URL needs to be set in the .env file"), var("KAVITA_API_KEY").expect("KAVITA_API_KEY needs to be set in the .env file"));
-    
+
     match client.post(jwt_url).send().await {
         Ok(data) => {
             let auth: PluginAuthResponse = serde_json::from_str(&data.text().await.unwrap()).unwrap();
@@ -214,7 +214,7 @@ async fn upload_file(state: &mut App, request: Request) {
 
             let res = client
                 .post(url)
-                .bearer_auth(auth.token)
+                .header(reqwest::header::AUTHORIZATION, auth.token)
                 .body(body)
                 .send()
                 .await;
@@ -229,12 +229,12 @@ async fn upload_file(state: &mut App, request: Request) {
             }
         }
         Err(e) => {
-            
+
         }
     }
-    
-    
-    
+
+
+
 }
 
 async fn stream_to_file(path: &PathBuf, stream: BodyDataStream) -> Result<(), (StatusCode, String)>

From 7905faa4113d53037ea8304cf9c08351c929d263 Mon Sep 17 00:00:00 2001
From: Neshura <neshura@neshweb.net>
Date: Wed, 7 Aug 2024 23:01:22 +0200
Subject: [PATCH 19/19] Release 0.0.8

---
 Cargo.lock | 2 +-
 Cargo.toml | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index 905c186..194b0f4 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -34,7 +34,7 @@ dependencies = [
 
 [[package]]
 name = "api-backend"
-version = "0.0.7"
+version = "0.0.8"
 dependencies = [
  "axum",
  "chrono",
diff --git a/Cargo.toml b/Cargo.toml
index 8e36bc4..5a1452a 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["Neshura"]
 name = "api-backend"
-version = "0.0.7"
+version = "0.0.8"
 edition = "2021"
 description = "API Backend For Easier Uploading To Kavita"
 license = "GPL-3.0-or-later"