From fa3ede1565d6732e6fb0e17f44e510074faa0739 Mon Sep 17 00:00:00 2001 From: Syrus Akbary Date: Mon, 7 Oct 2024 12:16:59 +0400 Subject: [PATCH 1/4] Trying to fix js build --- lib/wasix/src/http/reqwest.rs | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/lib/wasix/src/http/reqwest.rs b/lib/wasix/src/http/reqwest.rs index bece975b195..0e2707ad6e4 100644 --- a/lib/wasix/src/http/reqwest.rs +++ b/lib/wasix/src/http/reqwest.rs @@ -44,9 +44,11 @@ impl ReqwestHttpClient { // TODO: use persistent client? let builder = { let _guard = Handle::try_current().map_err(|_| self.handle.enter()); - let mut builder = reqwest::ClientBuilder::new().connect_timeout(self.connect_timeout); - if let Some(proxy) = get_proxy()? { - builder = builder.proxy(proxy); + // let _guard = Handle::try_current().map_err(|_| self.handle.enter()); + let mut builder = reqwest::ClientBuilder::new(); + #[cfg(not(feature = "js"))] + { + builder = builder.connect_timeout(self.connect_timeout); } builder }; @@ -71,6 +73,7 @@ impl ReqwestHttpClient { let status = response.status(); // Download the body. + #[cfg(not(feature = "js"))] let data = if let Some(timeout) = self.response_body_chunk_timeout { // Download the body with a chunk timeout. // The timeout prevents long stalls. @@ -126,6 +129,8 @@ impl ReqwestHttpClient { } else { response.bytes().await?.to_vec() }; + #[cfg(feature = "js")] + let data = response.bytes().await?.to_vec(); Ok(HttpResponse { status, @@ -137,19 +142,26 @@ impl ReqwestHttpClient { } impl super::HttpClient for ReqwestHttpClient { + #[cfg(not(feature = "js"))] fn request(&self, request: HttpRequest) -> BoxFuture<'_, Result> { let client = self.clone(); let f = async move { client.request(request).await }; Box::pin(f) } -} - -pub fn get_proxy() -> Result, anyhow::Error> { - if let Ok(scheme) = env::var("http_proxy").or_else(|_| env::var("HTTP_PROXY")) { - let proxy = reqwest::Proxy::all(scheme)?; - Ok(Some(proxy)) - } else { - Ok(None) + #[cfg(feature = "js")] + fn request(&self, request: HttpRequest) -> BoxFuture<'_, Result> { + let client = self.clone(); + let (sender, receiver) = futures::channel::oneshot::channel(); + wasm_bindgen_futures::spawn_local(async move { + let result = client.request(request).await; + let _ = sender.send(result); + }); + Box::pin(async move { + match receiver.await { + Ok(result) => result, + Err(e) => Err(anyhow::Error::new(e)), + } + }) } } From 4d977d9d4143a0613425e409e7cada6b9141a4bd Mon Sep 17 00:00:00 2001 From: Syrus Akbary Date: Mon, 7 Oct 2024 12:43:26 +0400 Subject: [PATCH 2/4] Remove unused line --- lib/wasix/src/http/reqwest.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/wasix/src/http/reqwest.rs b/lib/wasix/src/http/reqwest.rs index 0e2707ad6e4..c084def6278 100644 --- a/lib/wasix/src/http/reqwest.rs +++ b/lib/wasix/src/http/reqwest.rs @@ -44,7 +44,6 @@ impl ReqwestHttpClient { // TODO: use persistent client? let builder = { let _guard = Handle::try_current().map_err(|_| self.handle.enter()); - // let _guard = Handle::try_current().map_err(|_| self.handle.enter()); let mut builder = reqwest::ClientBuilder::new(); #[cfg(not(feature = "js"))] { From c63ccf487a85b50c49e43d80430da50968e66e69 Mon Sep 17 00:00:00 2001 From: Syrus Akbary Date: Mon, 7 Oct 2024 12:52:54 +0400 Subject: [PATCH 3/4] Fix current dir --- lib/wasix/src/runners/wasi.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/wasix/src/runners/wasi.rs b/lib/wasix/src/runners/wasi.rs index bf4818b5387..e8728059bc7 100644 --- a/lib/wasix/src/runners/wasi.rs +++ b/lib/wasix/src/runners/wasi.rs @@ -264,6 +264,9 @@ impl WasiRunner { if self.wasi.is_home_mapped { builder.set_current_dir(MAPPED_CURRENT_DIR_DEFAULT_PATH); } + if let Some(current_dir) = &self.wasi.current_dir { + builder.set_current_dir(current_dir.clone()); + } Ok(builder) } From 6ca08176ff2b40afc2129a13ed7577d1627be2f3 Mon Sep 17 00:00:00 2001 From: Syrus Akbary Date: Mon, 7 Oct 2024 17:13:15 +0400 Subject: [PATCH 4/4] Fixed issues --- lib/wasix/src/http/reqwest.rs | 2 +- lib/wasix/tests/runners.rs | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/wasix/src/http/reqwest.rs b/lib/wasix/src/http/reqwest.rs index c084def6278..54a04836c30 100644 --- a/lib/wasix/src/http/reqwest.rs +++ b/lib/wasix/src/http/reqwest.rs @@ -1,4 +1,4 @@ -use std::{env, time::Duration}; +use std::time::Duration; use anyhow::Context; use futures::{future::BoxFuture, TryStreamExt}; diff --git a/lib/wasix/tests/runners.rs b/lib/wasix/tests/runners.rs index cd77428bdd0..467091ad494 100644 --- a/lib/wasix/tests/runners.rs +++ b/lib/wasix/tests/runners.rs @@ -12,7 +12,7 @@ use reqwest::Client; use tokio::runtime::Handle; use wasmer::Engine; use wasmer_wasix::{ - http::{reqwest::get_proxy, HttpClient}, + http::HttpClient, runners::Runner, runtime::{ module_cache::{FileSystemCache, ModuleCache, SharedCache}, @@ -228,6 +228,15 @@ async fn download_cached(url: &str) -> bytes::Bytes { body } +pub fn get_proxy() -> Result, anyhow::Error> { + if let Ok(scheme) = std::env::var("http_proxy").or_else(|_| std::env::var("HTTP_PROXY")) { + let proxy = reqwest::Proxy::all(scheme)?; + Ok(Some(proxy)) + } else { + Ok(None) + } +} + fn client() -> Client { let builder = { let mut builder = reqwest::ClientBuilder::new().connect_timeout(Duration::from_secs(30));