summaryrefslogtreecommitdiff
path: root/ext/kv
diff options
context:
space:
mode:
authorBartek Iwańczuk <biwanczuk@gmail.com>2024-06-13 21:41:26 +0100
committerGitHub <noreply@github.com>2024-06-13 22:41:26 +0200
commitfb31eaa9ca59f6daaee0210d5cd206185c7041b9 (patch)
tree0c4ebc81ed7b44b683f31281accc47d451d09718 /ext/kv
parent518e4d3b3a93838e0f2dbcc4d3b79f8f395db563 (diff)
chore: upgrade to reqwest 0.12.4 and rustls 0.22 (#24056)
This commit updates Deno to use `reqwest` at 0.12.4 and `rustls` at 0.22. Other related crates were updated as well to match versions accepted by `reqwest` and `rustls`. Note: we are not using the latest available `rustls` yet, but this upgrade was non-trivial already, so a bump to 0.23 for `rustls` will be done in a separate commit. Closes #23370 --------- Signed-off-by: Ryan Dahl <ry@tinyclouds.org> Signed-off-by: Bartek Iwańczuk <biwanczuk@gmail.com> Co-authored-by: Ryan Dahl <ry@tinyclouds.org> Co-authored-by: Divy Srivastava <dj.srivastava23@gmail.com>
Diffstat (limited to 'ext/kv')
-rw-r--r--ext/kv/Cargo.toml2
-rw-r--r--ext/kv/remote.rs44
2 files changed, 44 insertions, 2 deletions
diff --git a/ext/kv/Cargo.toml b/ext/kv/Cargo.toml
index d95afd942..c4605fa22 100644
--- a/ext/kv/Cargo.toml
+++ b/ext/kv/Cargo.toml
@@ -17,6 +17,7 @@ path = "lib.rs"
anyhow.workspace = true
async-trait.workspace = true
base64.workspace = true
+bytes.workspace = true
chrono = { workspace = true, features = ["now"] }
deno_core.workspace = true
deno_fetch.workspace = true
@@ -27,6 +28,7 @@ denokv_proto.workspace = true
denokv_remote.workspace = true
denokv_sqlite.workspace = true
faster-hex.workspace = true
+http.workspace = true
log.workspace = true
num-bigint.workspace = true
prost.workspace = true
diff --git a/ext/kv/remote.rs b/ext/kv/remote.rs
index a1273e78b..7541b5a06 100644
--- a/ext/kv/remote.rs
+++ b/ext/kv/remote.rs
@@ -8,10 +8,14 @@ use std::sync::Arc;
use crate::DatabaseHandler;
use anyhow::Context;
use async_trait::async_trait;
+use bytes::Bytes;
use deno_core::error::type_error;
use deno_core::error::AnyError;
+use deno_core::futures::Stream;
+use deno_core::futures::TryStreamExt as _;
use deno_core::OpState;
use deno_fetch::create_http_client;
+use deno_fetch::reqwest;
use deno_fetch::CreateHttpClientOptions;
use deno_tls::rustls::RootCertStore;
use deno_tls::Proxy;
@@ -19,6 +23,8 @@ use deno_tls::RootCertStoreProvider;
use deno_tls::TlsKeys;
use denokv_remote::MetadataEndpoint;
use denokv_remote::Remote;
+use denokv_remote::RemoteResponse;
+use denokv_remote::RemoteTransport;
use url::Url;
#[derive(Clone)]
@@ -102,11 +108,44 @@ impl<P: RemoteDbHandlerPermissions + 'static> denokv_remote::RemotePermissions
}
}
+#[derive(Clone)]
+pub struct ReqwestClient(reqwest::Client);
+pub struct ReqwestResponse(reqwest::Response);
+
+impl RemoteTransport for ReqwestClient {
+ type Response = ReqwestResponse;
+ async fn post(
+ &self,
+ url: Url,
+ headers: http::HeaderMap,
+ body: Bytes,
+ ) -> Result<(Url, http::StatusCode, Self::Response), anyhow::Error> {
+ let res = self.0.post(url).headers(headers).body(body).send().await?;
+ let url = res.url().clone();
+ let status = res.status();
+ Ok((url, status, ReqwestResponse(res)))
+ }
+}
+
+impl RemoteResponse for ReqwestResponse {
+ async fn bytes(self) -> Result<Bytes, anyhow::Error> {
+ Ok(self.0.bytes().await?)
+ }
+ fn stream(
+ self,
+ ) -> impl Stream<Item = Result<Bytes, anyhow::Error>> + Send + Sync {
+ self.0.bytes_stream().map_err(|e| e.into())
+ }
+ async fn text(self) -> Result<String, anyhow::Error> {
+ Ok(self.0.text().await?)
+ }
+}
+
#[async_trait(?Send)]
impl<P: RemoteDbHandlerPermissions + 'static> DatabaseHandler
for RemoteDbHandler<P>
{
- type DB = Remote<PermissionChecker<P>>;
+ type DB = Remote<PermissionChecker<P>, ReqwestClient>;
async fn open(
&self,
@@ -162,13 +201,14 @@ impl<P: RemoteDbHandlerPermissions + 'static> DatabaseHandler
http2: true,
},
)?;
+ let reqwest_client = ReqwestClient(client);
let permissions = PermissionChecker {
state: state.clone(),
_permissions: PhantomData,
};
- let remote = Remote::new(client, permissions, metadata_endpoint);
+ let remote = Remote::new(reqwest_client, permissions, metadata_endpoint);
Ok(remote)
}