Skip to content

Commit

Permalink
Create bitwarden-wasm-internal
Browse files Browse the repository at this point in the history
  • Loading branch information
Hinton committed Sep 27, 2024
1 parent 2d1c687 commit 22ef11f
Show file tree
Hide file tree
Showing 11 changed files with 202 additions and 2 deletions.
4 changes: 4 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
target
languages/*
!languages/js
languages/js/*
!languages/js/sdk-internal
languages/js/sdk-internal/bitwarden_wasm_internal_bg.wasm.js
schemas
/crates/bitwarden-napi/src-ts/bitwarden_client/schemas.ts
about.hbs
Expand Down
14 changes: 14 additions & 0 deletions Cargo.lock

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

3 changes: 3 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ bitwarden-send = { path = "crates/bitwarden-send", version = "=1.0.0" }
bitwarden-sm = { path = "crates/bitwarden-sm", version = "=1.0.0" }
bitwarden-vault = { path = "crates/bitwarden-vault", version = "=1.0.0" }

wasm-bindgen = { version = "0.2.91", features = ["serde-serialize"] }
wasm-bindgen-futures = "0.4.41"

[workspace.lints.clippy]
unused_async = "deny"
unwrap_used = "deny"
Expand Down
28 changes: 28 additions & 0 deletions crates/bitwarden-wasm-internal/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
[package]
name = "bitwarden-wasm-internal"
version = "0.1.0"
publish = false

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

[lib]
crate-type = ["cdylib"]

[dependencies]
bitwarden = { workspace = true }
console_error_panic_hook = "0.1.7"
console_log = { version = "1.0.0", features = ["color"] }
js-sys = "0.3.68"
log = "0.4.20"
serde_json = ">=1.0.96, <2.0"
wasm-bindgen = { workspace = true }
wasm-bindgen-futures = { workspace = true }

[lints]
workspace = true
25 changes: 25 additions & 0 deletions crates/bitwarden-wasm-internal/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# bitwarden-wasm-internal

**Note:** This is only for internal use. Bitwarden will not provide any support for this crate.

Requirements:

- `wasm32-unknown-unknown` rust target.
- `wasm-bindgen-cli` installed.
- `binaryen` installed for `wasm-opt` and `wasm2js`.

```bash
rustup target add wasm32-unknown-unknown
cargo install -f wasm-bindgen-cli
brew install binaryen
```

#### Build

```bash
# dev
./build.sh

# release
./build.sh -r
```
26 changes: 26 additions & 0 deletions crates/bitwarden-wasm-internal/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Move to the root of the repository
cd "$(dirname "$0")"
cd ../../

if [ "$1" != "-r" ]; then
# Dev
cargo build -p bitwarden-wasm-internal --target wasm32-unknown-unknown
wasm-bindgen --target bundler --out-dir languages/js/sdk-internal ./target/wasm32-unknown-unknown/debug/bitwarden_wasm_internal.wasm
wasm-bindgen --target nodejs --out-dir languages/js/sdk-internal/node ./target/wasm32-unknown-unknown/debug/bitwarden_wasm_internal.wasm
else
# Release
cargo build -p bitwarden-wasm-internal --target wasm32-unknown-unknown --release
wasm-bindgen --target bundler --out-dir languages/js/sdk-internal ./target/wasm32-unknown-unknown/release/bitwarden_wasm_internal.wasm
wasm-bindgen --target nodejs --out-dir languages/js/sdk-internal/node ./target/wasm32-unknown-unknown/release/bitwarden_wasm_internal.wasm
fi

# Format
npx prettier --write ./languages/js/sdk-internal

# Optimize size
wasm-opt -Os ./languages/js/sdk-internal/bitwarden_wasm_internal_bg.wasm -o ./languages/js/sdk-internal/bitwarden_wasm_internal_bg.wasm
wasm-opt -Os ./languages/js/sdk-internal/node/bitwarden_wasm_internal_bg.wasm -o ./languages/js/sdk-internal/node/bitwarden_wasm_internal_bg.wasm

# Transpile to JS
wasm2js ./languages/js/sdk-internal/bitwarden_wasm_internal_bg.wasm -o ./languages/js/sdk-internal/bitwarden_wasm_internal_bg.wasm.js
npx terser ./languages/js/sdk-internal/bitwarden_wasm_internal_bg.wasm.js -o ./languages/js/sdk-internal/bitwarden_wasm_internal_bg.wasm.js
69 changes: 69 additions & 0 deletions crates/bitwarden-wasm-internal/src/client.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
extern crate console_error_panic_hook;
use std::rc::Rc;

use bitwarden::{Client, ClientSettings};
use log::{set_max_level, Level};
use wasm_bindgen::prelude::*;

#[wasm_bindgen]

Check warning on line 8 in crates/bitwarden-wasm-internal/src/client.rs

View check run for this annotation

Codecov / codecov/patch

crates/bitwarden-wasm-internal/src/client.rs#L8

Added line #L8 was not covered by tests
pub enum LogLevel {
Trace,
Debug,
Info,
Warn,
Error,
}

fn convert_level(level: LogLevel) -> Level {
match level {
LogLevel::Trace => Level::Trace,
LogLevel::Debug => Level::Debug,
LogLevel::Info => Level::Info,
LogLevel::Warn => Level::Warn,
LogLevel::Error => Level::Error,

Check warning on line 23 in crates/bitwarden-wasm-internal/src/client.rs

View check run for this annotation

Codecov / codecov/patch

crates/bitwarden-wasm-internal/src/client.rs#L17-L23

Added lines #L17 - L23 were not covered by tests
}
}

Check warning on line 25 in crates/bitwarden-wasm-internal/src/client.rs

View check run for this annotation

Codecov / codecov/patch

crates/bitwarden-wasm-internal/src/client.rs#L25

Added line #L25 was not covered by tests

// Rc<...> is to avoid needing to take ownership of the Client during our async run_command
// function https://github.com/rustwasm/wasm-bindgen/issues/2195#issuecomment-799588401
#[wasm_bindgen]

Check warning on line 29 in crates/bitwarden-wasm-internal/src/client.rs

View check run for this annotation

Codecov / codecov/patch

crates/bitwarden-wasm-internal/src/client.rs#L29

Added line #L29 was not covered by tests
pub struct BitwardenClient(Rc<Client>);

#[wasm_bindgen]

Check warning on line 32 in crates/bitwarden-wasm-internal/src/client.rs

View check run for this annotation

Codecov / codecov/patch

crates/bitwarden-wasm-internal/src/client.rs#L32

Added line #L32 was not covered by tests
impl BitwardenClient {
#[wasm_bindgen(constructor)]
pub fn new(settings_input: Option<String>, log_level: Option<LogLevel>) -> Self {
console_error_panic_hook::set_once();
let log_level = convert_level(log_level.unwrap_or(LogLevel::Info));
if let Err(_e) = console_log::init_with_level(log_level) {
set_max_level(log_level.to_level_filter())
}

Check warning on line 40 in crates/bitwarden-wasm-internal/src/client.rs

View check run for this annotation

Codecov / codecov/patch

crates/bitwarden-wasm-internal/src/client.rs#L35-L40

Added lines #L35 - L40 were not covered by tests

Self(Rc::new(Client::new(Self::parse_settings(settings_input))))
}

Check warning on line 43 in crates/bitwarden-wasm-internal/src/client.rs

View check run for this annotation

Codecov / codecov/patch

crates/bitwarden-wasm-internal/src/client.rs#L42-L43

Added lines #L42 - L43 were not covered by tests

/// Test method, echoes back the input
pub fn echo(&self, msg: String) -> String {
msg
}

Check warning on line 48 in crates/bitwarden-wasm-internal/src/client.rs

View check run for this annotation

Codecov / codecov/patch

crates/bitwarden-wasm-internal/src/client.rs#L46-L48

Added lines #L46 - L48 were not covered by tests

/// Test method, calls http endpoint
pub async fn http_get(&self, url: String) -> Result<String, String> {
let client = self.0.internal.get_http_client();
let res = client.get(&url).send().await.map_err(|e| e.to_string())?;

Check warning on line 53 in crates/bitwarden-wasm-internal/src/client.rs

View check run for this annotation

Codecov / codecov/patch

crates/bitwarden-wasm-internal/src/client.rs#L51-L53

Added lines #L51 - L53 were not covered by tests

res.text().await.map_err(|e| e.to_string())
}

Check warning on line 56 in crates/bitwarden-wasm-internal/src/client.rs

View check run for this annotation

Codecov / codecov/patch

crates/bitwarden-wasm-internal/src/client.rs#L55-L56

Added lines #L55 - L56 were not covered by tests

fn parse_settings(settings_input: Option<String>) -> Option<ClientSettings> {
if let Some(input) = settings_input.as_ref() {
match serde_json::from_str(input) {
Ok(settings) => return Some(settings),
Err(e) => {
log::error!("Failed to parse settings: {}", e);

Check warning on line 63 in crates/bitwarden-wasm-internal/src/client.rs

View check run for this annotation

Codecov / codecov/patch

crates/bitwarden-wasm-internal/src/client.rs#L58-L63

Added lines #L58 - L63 were not covered by tests
}
}
}
None
}

Check warning on line 68 in crates/bitwarden-wasm-internal/src/client.rs

View check run for this annotation

Codecov / codecov/patch

crates/bitwarden-wasm-internal/src/client.rs#L66-L68

Added lines #L66 - L68 were not covered by tests
}
1 change: 1 addition & 0 deletions crates/bitwarden-wasm-internal/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
mod client;
4 changes: 2 additions & 2 deletions crates/bitwarden-wasm/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ console_log = { version = "1.0.0", features = ["color"] }
js-sys = "0.3.68"
log = "0.4.20"
serde = { version = "1.0.196", features = ["derive"] }
wasm-bindgen = { version = "0.2.91", features = ["serde-serialize"] }
wasm-bindgen-futures = "0.4.41"
wasm-bindgen = { workspace = true }
wasm-bindgen-futures = { workspace = true }

[dev-dependencies]
wasm-bindgen-test = "0.3.41"
Expand Down
6 changes: 6 additions & 0 deletions languages/js/sdk-internal/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
bitwarden_wasm_internal_bg.js
bitwarden_wasm_internal_bg.wasm
bitwarden_wasm_internal_bg.wasm.d.ts
bitwarden_wasm_internal_bg.wasm.js
bitwarden_wasm_internal.d.ts
bitwarden_wasm_internal.js
24 changes: 24 additions & 0 deletions languages/js/sdk-internal/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{
"name": "@bitwarden/sdk-internal",
"version": "0.1.0",
"files": [
"bitwarden_wasm_internal_bg.js",
"bitwarden_wasm_internal_bg.wasm",
"bitwarden_wasm_internal_bg.wasm.d.ts",
"bitwarden_wasm_internal_bg.wasm.js",
"bitwarden_wasm_internal.d.ts",
"bitwarden_wasm_internal.js",
"index.js",
"node/bitwarden_wasm_internal.wasm",
"node/bitwarden_wasm_internal.wasm.d.ts",
"node/bitwarden_wasm_internal.d.ts",
"node/bitwarden_wasm_internal.js"
],
"main": "node/bitwarden_wasm_internal.js",
"module": "index.js",
"types": "bitwarden_wasm_internal.d.ts",
"scripts": {},
"sideEffects": [
"./bitwarden_wasm_internal.js"
]
}

0 comments on commit 22ef11f

Please sign in to comment.