use h2ts_client::ConnectOptions;
use wasm_bindgen::JsValue;
use crate::client::Client;
use crate::status::Status;
use crate::url::websocket_url;
pub fn connect(base_url: &str) -> Result<Client, Status> {
connect_with(base_url, ConnectOptions::default())
}
pub fn connect_with(base_url: &str, options: ConnectOptions) -> Result<Client, Status> {
let (ws_url, authority) = websocket_url(base_url)?;
let connector: crate::Connector = std::rc::Rc::new(move || {
let ws_url = ws_url.clone();
let options = options.clone();
Box::pin(async move {
h2ts_client::connect_websocket(&ws_url, &[crate::H2TS_SUBPROTOCOL], options)
.await
.map_err(|e| {
Status::unavailable(format!("could not open the tunnel: {}", describe(&e)))
})
})
});
Ok(Client::with_connector(connector, authority))
}
fn describe(value: &JsValue) -> String {
value.as_string().unwrap_or_else(|| format!("{value:?}"))
}