diff --git a/crates-cli/yaak-cli/src/commands/request.rs b/crates-cli/yaak-cli/src/commands/request.rs index 66b731fd..cf8e19be 100644 --- a/crates-cli/yaak-cli/src/commands/request.rs +++ b/crates-cli/yaak-cli/src/commands/request.rs @@ -585,7 +585,7 @@ async fn send_http_request_by_id( encryption_manager: ctx.encryption_manager.clone(), plugin_context: &plugin_context, cancelled_rx: None, - connection_manager: None, + connection_manager: ctx.connection_manager(), }) .await; diff --git a/crates-cli/yaak-cli/src/context.rs b/crates-cli/yaak-cli/src/context.rs index da3f2e20..8cafe68e 100644 --- a/crates-cli/yaak-cli/src/context.rs +++ b/crates-cli/yaak-cli/src/context.rs @@ -5,6 +5,7 @@ use std::path::{Path, PathBuf}; use std::sync::Arc; use tokio::sync::Mutex; use yaak_crypto::manager::EncryptionManager; +use yaak_http::manager::HttpConnectionManager; use yaak_models::blob_manager::BlobManager; use yaak_models::client_db::ClientDb; use yaak_models::query_manager::QueryManager; @@ -31,6 +32,7 @@ pub struct CliContext { query_manager: QueryManager, blob_manager: BlobManager, pub encryption_manager: Arc, + connection_manager: Arc, plugin_manager: Option>, plugin_event_bridge: Mutex>, } @@ -54,6 +56,7 @@ impl CliContext { query_manager, blob_manager, encryption_manager, + connection_manager: Arc::new(HttpConnectionManager::new()), plugin_manager: None, plugin_event_bridge: Mutex::new(None), } @@ -91,6 +94,7 @@ impl CliContext { self.query_manager.clone(), self.blob_manager.clone(), self.encryption_manager.clone(), + self.connection_manager.clone(), self.data_dir.clone(), execution_context, ) @@ -120,6 +124,10 @@ impl CliContext { &self.blob_manager } + pub fn connection_manager(&self) -> &HttpConnectionManager { + &self.connection_manager + } + pub fn plugin_manager(&self) -> Arc { self.plugin_manager.clone().expect("Plugin manager was not initialized for this command") } diff --git a/crates-cli/yaak-cli/src/plugin_events.rs b/crates-cli/yaak-cli/src/plugin_events.rs index f71f5ba9..d232a88a 100644 --- a/crates-cli/yaak-cli/src/plugin_events.rs +++ b/crates-cli/yaak-cli/src/plugin_events.rs @@ -15,6 +15,7 @@ use yaak::render::{render_grpc_request, render_http_request}; use yaak::send::{SendHttpRequestWithPluginsParams, send_http_request_with_plugins}; use yaak_crypto::manager::EncryptionManager; use yaak_http::cookies::get_cookie_value_from_jar; +use yaak_http::manager::HttpConnectionManager; use yaak_models::blob_manager::BlobManager; use yaak_models::models::Environment; use yaak_models::queries::any_request::AnyRequest; @@ -42,6 +43,7 @@ struct CliHostContext { blob_manager: BlobManager, plugin_manager: Arc, encryption_manager: Arc, + connection_manager: Arc, response_dir: PathBuf, execution_context: CliExecutionContext, } @@ -52,6 +54,7 @@ impl CliPluginEventBridge { query_manager: QueryManager, blob_manager: BlobManager, encryption_manager: Arc, + connection_manager: Arc, data_dir: PathBuf, execution_context: CliExecutionContext, ) -> Self { @@ -63,6 +66,7 @@ impl CliPluginEventBridge { blob_manager, plugin_manager, encryption_manager, + connection_manager, response_dir: data_dir.join("responses"), execution_context, }); @@ -214,7 +218,7 @@ async fn build_plugin_reply( encryption_manager: host_context.encryption_manager.clone(), plugin_context: &plugin_context, cancelled_rx: None, - connection_manager: None, + connection_manager: &host_context.connection_manager, }) .await { diff --git a/crates-tauri/yaak-app-client/src/http_request.rs b/crates-tauri/yaak-app-client/src/http_request.rs index c345ee4e..95e35e4d 100644 --- a/crates-tauri/yaak-app-client/src/http_request.rs +++ b/crates-tauri/yaak-app-client/src/http_request.rs @@ -160,7 +160,7 @@ async fn send_http_request_inner( encryption_manager, plugin_context, cancelled_rx: Some(cancelled_rx.clone()), - connection_manager: Some(connection_manager.inner()), + connection_manager: connection_manager.inner(), }) .await .map_err(|e| GenericError(e.to_string()))?; diff --git a/crates/yaak/src/send.rs b/crates/yaak/src/send.rs index 113a3903..da8dcb00 100644 --- a/crates/yaak/src/send.rs +++ b/crates/yaak/src/send.rs @@ -127,31 +127,6 @@ pub struct CookieBehavior { pub store_cookies: bool, } -struct DefaultSendRequestExecutor; - -#[async_trait] -impl SendRequestExecutor for DefaultSendRequestExecutor { - async fn send( - &self, - sendable_request: SendableHttpRequest, - event_tx: mpsc::Sender, - cookie_behavior: CookieBehavior, - ) -> yaak_http::error::Result { - let sender = ReqwestSender::new()?; - let transaction = match cookie_behavior.store { - Some(store) => HttpTransaction::with_cookie_behavior( - sender, - store, - cookie_behavior.send_cookies, - cookie_behavior.store_cookies, - ), - None => HttpTransaction::new(sender), - }; - let (_cancel_tx, cancel_rx) = watch::channel(false); - transaction.execute_with_cancellation(sendable_request, cancel_rx, event_tx).await - } -} - struct PluginPrepareSendableRequest { plugin_manager: Arc, plugin_context: PluginContext, @@ -259,7 +234,7 @@ pub struct SendHttpRequestByIdParams<'a, T: TemplateCallback> { pub emit_response_body_chunks_to: Option>>, pub cancelled_rx: Option>, pub prepare_sendable_request: Option<&'a dyn PrepareSendableRequest>, - pub executor: Option<&'a dyn SendRequestExecutor>, + pub executor: &'a dyn SendRequestExecutor, } pub struct SendHttpRequestParams<'a, T: TemplateCallback> { @@ -278,7 +253,7 @@ pub struct SendHttpRequestParams<'a, T: TemplateCallback> { pub auth_context_id: Option, pub existing_response: Option, pub prepare_sendable_request: Option<&'a dyn PrepareSendableRequest>, - pub executor: Option<&'a dyn SendRequestExecutor>, + pub executor: &'a dyn SendRequestExecutor, } pub struct SendHttpRequestWithPluginsParams<'a> { @@ -296,7 +271,7 @@ pub struct SendHttpRequestWithPluginsParams<'a> { pub encryption_manager: Arc, pub plugin_context: &'a PluginContext, pub cancelled_rx: Option>, - pub connection_manager: Option<&'a HttpConnectionManager>, + pub connection_manager: &'a HttpConnectionManager, } pub struct SendHttpRequestByIdWithPluginsParams<'a> { @@ -313,7 +288,7 @@ pub struct SendHttpRequestByIdWithPluginsParams<'a> { pub encryption_manager: Arc, pub plugin_context: &'a PluginContext, pub cancelled_rx: Option>, - pub connection_manager: Option<&'a HttpConnectionManager>, + pub connection_manager: &'a HttpConnectionManager, } pub struct SendHttpRequestResult { @@ -403,14 +378,13 @@ pub async fn send_http_request_with_plugins( plugin_context: params.plugin_context.clone(), cancelled_rx: params.cancelled_rx.clone(), }; - let executor = - params.connection_manager.map(|connection_manager| ConnectionManagerSendRequestExecutor { - connection_manager, - plugin_context_id: params.plugin_context.id.clone(), - query_manager: params.query_manager.clone(), - request: params.request.clone(), - cancelled_rx: params.cancelled_rx.clone(), - }); + let executor = ConnectionManagerSendRequestExecutor { + connection_manager: params.connection_manager, + plugin_context_id: params.plugin_context.id.clone(), + query_manager: params.query_manager.clone(), + request: params.request.clone(), + cancelled_rx: params.cancelled_rx.clone(), + }; send_http_request(SendHttpRequestParams { query_manager: params.query_manager, @@ -428,7 +402,7 @@ pub async fn send_http_request_with_plugins( auth_context_id: None, existing_response: params.existing_response, prepare_sendable_request: Some(&auth_hook), - executor: executor.as_ref().map(|e| e as &dyn SendRequestExecutor), + executor: &executor, }) .await } @@ -613,8 +587,7 @@ pub async fn send_http_request( } }); - let default_executor = DefaultSendRequestExecutor; - let executor = params.executor.unwrap_or(&default_executor); + let executor = params.executor; let started_at = Instant::now(); let request_started_url = sendable_request.url.clone(); diff --git a/package-lock.json b/package-lock.json index 39f0dd43..e97a5745 100644 --- a/package-lock.json +++ b/package-lock.json @@ -83,7 +83,7 @@ "@tauri-apps/cli": "npm:@tauri-apps/cli-cef@3.0.0-alpha.6", "@types/babel__core": "^7.20.5", "@vitejs/plugin-react": "^6.0.1", - "@yaakapp/cli": "*", + "@yaakapp/cli": "latest", "babel-plugin-react-compiler": "^1.0.0", "dotenv-cli": "^11.0.0", "nodejs-file-downloader": "^4.13.0",