Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
96 changes: 81 additions & 15 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ bitwarden-exporters = { path = "crates/bitwarden-exporters", version = "=1.0.0"
bitwarden-fido = { path = "crates/bitwarden-fido", version = "=1.0.0" }
bitwarden-generators = { path = "crates/bitwarden-generators", version = "=1.0.0" }
bitwarden-ipc = { path = "crates/bitwarden-ipc", version = "=1.0.0" }
bitwarden-logging = { path = "crates/bitwarden-logging", version = "=1.0.0" }
bitwarden-pm = { path = "crates/bitwarden-pm", version = "=1.0.0" }
bitwarden-send = { path = "crates/bitwarden-send", version = "=1.0.0" }
bitwarden-sm = { path = "bitwarden_license/bitwarden-sm", version = "=1.0.0" }
Expand Down Expand Up @@ -76,6 +77,12 @@ serde-wasm-bindgen = ">=0.6.0, <0.7"
syn = ">=2.0.87, <3"
thiserror = ">=1.0.40, <3"
tokio = { version = "1.36.0", features = ["macros"] }
tracing = { version = "0.1.41" }
tracing-subscriber = { version = "0.3.20", features = [
"fmt",
"env-filter",
"tracing-log",
] }
tsify = { version = ">=0.5.5, <0.6", features = [
"js",
], default-features = false }
Expand Down
30 changes: 30 additions & 0 deletions crates/bitwarden-logging/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
[package]
name = "bitwarden-logging"
description = """
Internal crate for the bitwarden crate. Do not use.
"""

version.workspace = true
authors.workspace = true
edition.workspace = true
rust-version.workspace = true
readme.workspace = true
homepage.workspace = true
repository.workspace = true
license-file.workspace = true
keywords.workspace = true

[features]
wasm = ["dep:js-sys", "dep:tsify", "dep:wasm-bindgen"]

[dependencies]
js-sys = { workspace = true, optional = true }
tokio = { workspace = true }
tracing = { workspace = true }
tracing_dynamic = "0.3.1"
once_cell = "1.21.3"
tsify = { workspace = true, optional = true }
wasm-bindgen = { workspace = true, optional = true }

[lints]
workspace = true
1 change: 1 addition & 0 deletions crates/bitwarden-logging/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Bitwarden Logging
5 changes: 5 additions & 0 deletions crates/bitwarden-logging/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#![doc = include_str!("../README.md")]

#[cfg(feature = "wasm")]
#[allow(missing_docs)]
pub mod wasm;
33 changes: 33 additions & 0 deletions crates/bitwarden-logging/src/wasm/event.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
use tracing_dynamic::EventFactory;
use wasm_bindgen::prelude::*;

use crate::wasm::level::TracingLevel;

#[wasm_bindgen]
pub struct EventDefinition {
factory: EventFactory<'static>,
}

#[wasm_bindgen]
impl EventDefinition {
#[wasm_bindgen(constructor)]
pub fn new(name: String, target: String, level: TracingLevel, fields: Vec<String>) -> Self {
let fields_slice: &[&str] = &fields.iter().map(String::as_str).collect::<Vec<&str>>();
Self {
factory: EventFactory::new(
&name,
&target,
level.into(),
None,
None,
None,
fields_slice,
),
}
}

// TODO: Add fields
pub fn record(&self) {
self.factory.create().build();
}
}
38 changes: 38 additions & 0 deletions crates/bitwarden-logging/src/wasm/level.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
use tracing::Level;
use wasm_bindgen::prelude::*;

#[wasm_bindgen]
pub enum TracingLevel {
/// The "trace" level.
///
/// Designates very low priority, often extremely verbose, information.
Trace,
/// The "debug" level.
///
/// Designates lower priority information.
Debug,
/// The "info" level.
///
/// Designates useful information.
Info,
/// The "warn" level.
///
/// Designates hazardous situations.
Warn,
/// The "error" level.
///
/// Designates very serious errors.
Error,
}

impl From<TracingLevel> for Level {
fn from(level: TracingLevel) -> Self {
match level {
TracingLevel::Trace => Level::TRACE,
TracingLevel::Debug => Level::DEBUG,
TracingLevel::Info => Level::INFO,
TracingLevel::Warn => Level::WARN,
TracingLevel::Error => Level::ERROR,
}
}
}
7 changes: 7 additions & 0 deletions crates/bitwarden-logging/src/wasm/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
mod event;
mod level;
mod span;

pub use event::*;
pub use level::*;
pub use span::*;
40 changes: 40 additions & 0 deletions crates/bitwarden-logging/src/wasm/span.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
use tracing;
use tracing_dynamic::SpanFactory;
use wasm_bindgen::prelude::*;

use crate::wasm::level::TracingLevel;

#[wasm_bindgen]
pub struct SpanDefinition {
factory: SpanFactory<'static>,
}

#[wasm_bindgen]
impl SpanDefinition {
#[wasm_bindgen(constructor)]
pub fn new(name: String, target: String, level: TracingLevel, fields: Vec<String>) -> Self {
let fields_slice: &[&str] = &fields.iter().map(String::as_str).collect::<Vec<&str>>();
Self {
factory: SpanFactory::new(&name, &target, level.into(), None, None, None, fields_slice),
}
}

// TODO: Add fields
pub fn enter(&self) -> Span {
let span = self.factory.create().build();
Span::new(span)
}
}

#[wasm_bindgen]
pub struct Span {
_span: tracing::span::EnteredSpan,
}

impl Span {
fn new(span: tracing::Span) -> Self {
Self {
_span: span.entered(),
}
}
}
11 changes: 8 additions & 3 deletions crates/bitwarden-wasm-internal/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,10 @@ license-file.workspace = true
keywords.workspace = true

[features]
bitwarden-license = ["bitwarden-pm/bitwarden-license", "dep:bitwarden-commercial-vault"]
bitwarden-license = [
"bitwarden-pm/bitwarden-license",
"dep:bitwarden-commercial-vault",
]

[lib]
crate-type = ["cdylib"]
Expand All @@ -27,15 +30,17 @@ bitwarden-core = { workspace = true, features = ["wasm", "internal"] }
bitwarden-crypto = { workspace = true, features = ["wasm"] }
bitwarden-error = { workspace = true }
bitwarden-ipc = { workspace = true, features = ["wasm"] }
bitwarden-logging = { workspace = true, features = ["wasm"] }
bitwarden-pm = { workspace = true, features = ["wasm"] }
bitwarden-ssh = { workspace = true, features = ["wasm"] }
bitwarden-state = { workspace = true, features = ["wasm"] }
bitwarden-threading = { workspace = true }
bitwarden-vault = { workspace = true, features = ["wasm"] }
console_error_panic_hook = "0.1.7"
console_log = { version = "1.0.0", features = ["color"] }
log = "0.4.20"
serde = { workspace = true }
tracing = { workspace = true }
tracing-subscriber = { workspace = true }
tracing-web = { version = "0.1.3" }
tsify = { workspace = true }
# When upgrading wasm-bindgen, make sure to update the version in the workflows!
wasm-bindgen = { version = "=0.2.105", features = ["serde-serialize"] }
Expand Down
Loading
Loading