Skip to main content

bitwarden_wasm_internal/
init.rs

1use tracing::Level;
2use tracing_subscriber::{EnvFilter, layer::SubscriberExt as _, util::SubscriberInitExt as _};
3use tracing_web::MakeWebConsoleWriter;
4use wasm_bindgen::prelude::*;
5
6#[wasm_bindgen]
7pub enum LogLevel {
8    Trace,
9    Debug,
10    Info,
11    Warn,
12    Error,
13}
14
15fn convert_level(level: LogLevel) -> Level {
16    match level {
17        LogLevel::Trace => Level::TRACE,
18        LogLevel::Debug => Level::DEBUG,
19        LogLevel::Info => Level::INFO,
20        LogLevel::Warn => Level::WARN,
21        LogLevel::Error => Level::ERROR,
22    }
23}
24
25#[allow(missing_docs)]
26#[wasm_bindgen]
27pub fn init_sdk(log_level: Option<LogLevel>) {
28    console_error_panic_hook::set_once();
29
30    let log_level = convert_level(log_level.unwrap_or(LogLevel::Info));
31
32    let filter = EnvFilter::builder()
33        .with_default_directive(log_level.into())
34        .from_env_lossy();
35
36    let fmt = tracing_subscriber::fmt::layer()
37        .with_ansi(false) // only partially supported across browsers
38        .without_time() // time is not supported in wasm
39        .with_writer(MakeWebConsoleWriter::new()); // write events to the console
40
41    let tracing_subscriber = tracing_subscriber::registry().with(filter).with(fmt);
42    #[cfg(feature = "performance-tracing")]
43    let tracing_subscriber = {
44        let perf_layer = tracing_web::performance_layer()
45            .with_details_from_fields(tracing_subscriber::fmt::format::Pretty::default());
46        tracing_subscriber.with(perf_layer)
47    };
48    tracing_subscriber.init();
49
50    #[cfg(feature = "dangerous-crypto-debug")]
51    tracing::warn!(
52        "Dangerous crypto debug features are enabled. THIS MUST NOT BE USED IN PRODUCTION BUILDS!!"
53    );
54}