From b42d92f5ae42f6468a41c74c30e3b246b2c8d009 Mon Sep 17 00:00:00 2001 From: ashneverdawn <8341280+ashneverdawn@users.noreply.github.com> Date: Wed, 5 Jun 2024 02:37:59 -0400 Subject: [PATCH 1/6] chore: tidy up examples --- .gitignore | 4 +- Cargo.toml | 2 +- README.md | 4 +- extensions/warp-ipfs/Cargo.toml | 3 ++ extensions/warp-ipfs/examples/README.md | 50 ++++++++++++++++++ extensions/warp-ipfs/examples/from-js.rs | 47 ++++++++++++++++ .../examples/from-js}/basic-wasm.html | 0 .../warp-ipfs/examples/from-js}/circle.png | Bin .../warp-ipfs/examples/from-js}/favicon.ico | Bin .../warp-ipfs/examples/from-js}/index.html | 0 .../examples/from-js}/ipfs-friends.html | 0 .../examples/from-js}/ipfs-identity.html | 0 .../examples/from-js}/ipfs-persistent.html | 0 .../examples/from-js}/ipfs-raygun.html | 0 .../examples/from-js}/tesseract.html | 0 .../examples/wasm-ipfs-friends/README.md | 8 +++ tools/wasm-example/Cargo.toml | 16 ------ tools/wasm-example/README.md | 14 ----- tools/wasm-example/src/lib.rs | 28 ---------- 19 files changed, 113 insertions(+), 63 deletions(-) create mode 100644 extensions/warp-ipfs/examples/README.md create mode 100644 extensions/warp-ipfs/examples/from-js.rs rename {tools/wasm-example/www => extensions/warp-ipfs/examples/from-js}/basic-wasm.html (100%) rename {tools/wasm-example/www => extensions/warp-ipfs/examples/from-js}/circle.png (100%) rename {tools/wasm-example/www => extensions/warp-ipfs/examples/from-js}/favicon.ico (100%) rename {tools/wasm-example/www => extensions/warp-ipfs/examples/from-js}/index.html (100%) rename {tools/wasm-example/www => extensions/warp-ipfs/examples/from-js}/ipfs-friends.html (100%) rename {tools/wasm-example/www => extensions/warp-ipfs/examples/from-js}/ipfs-identity.html (100%) rename {tools/wasm-example/www => extensions/warp-ipfs/examples/from-js}/ipfs-persistent.html (100%) rename {tools/wasm-example/www => extensions/warp-ipfs/examples/from-js}/ipfs-raygun.html (100%) rename {tools/wasm-example/www => extensions/warp-ipfs/examples/from-js}/tesseract.html (100%) create mode 100644 extensions/warp-ipfs/examples/wasm-ipfs-friends/README.md delete mode 100644 tools/wasm-example/Cargo.toml delete mode 100644 tools/wasm-example/README.md delete mode 100644 tools/wasm-example/src/lib.rs diff --git a/.gitignore b/.gitignore index f1a479b83..c3fa13d7d 100644 --- a/.gitignore +++ b/.gitignore @@ -25,5 +25,5 @@ Cargo.lock *.csv -# Compiled wasm -www/wasm \ No newline at end of file +# Built wasm files +built-wasm/ \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml index 4d138cb9a..16878a415 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -92,7 +92,7 @@ tracing = { version = "0.1" } either = "1" void = "1" -#ipfs dependency +# ipfs dependency rust-ipfs = "0.11.18" # wasm crates diff --git a/README.md b/README.md index e51aac894..a75187c41 100644 --- a/README.md +++ b/README.md @@ -53,9 +53,9 @@ outside of localhost. | Rust | `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \| sh` | | CMake | `brew install cmake` | -## Building to WASM and using it within the browser +## Usage -[See wasm docs](./tools/wasm-example/README.md) +[See warp-ipfs examples](./extensions/warp-ipfs/examples/README.md) ## Docs diff --git a/extensions/warp-ipfs/Cargo.toml b/extensions/warp-ipfs/Cargo.toml index d853eaa93..23fa7f10b 100644 --- a/extensions/warp-ipfs/Cargo.toml +++ b/extensions/warp-ipfs/Cargo.toml @@ -72,6 +72,9 @@ clap = { version = "4.0", features = ["derive"] } rpassword = "7.3" +# crates for examples +env_logger = "0.11.3" +tiny_file_server = "0.1.5" [features] default = [] diff --git a/extensions/warp-ipfs/examples/README.md b/extensions/warp-ipfs/examples/README.md new file mode 100644 index 000000000..1b22f602f --- /dev/null +++ b/extensions/warp-ipfs/examples/README.md @@ -0,0 +1,50 @@ +# Examples + +Example usages of warp-ipfs + +## Using from Rust (desktop) + +CLI for interacting with Multipass (identity): +``` +cargo run --example identity-interface +``` + +Basic ipfs setup example: +``` +cargo run --example ipfs-example +``` + +Basic friends example: +``` +cargo run --example ipfs-friends +``` + +Basic identity example: +``` +cargo run --example ipfs-identity +``` + +CLI for interacting with Constellation (file management): +``` +cargo run --example ipfs-persisent +``` + +CLI messenger example: +``` +cargo run --example messenger +``` + +## Using from Rust (WASM) + +[wasm-ipfs-friends](./wasm-ipfs-friends/README.md) + +[wasm-ipfs-identity](./wasm-ipfs-identity/README.md) + +[wasm-ipfs-storage](./wasm-ipfs-storage/README.md) + +## Using from Javascript + +Serves web files that contain examples of javascript calling into wasm built from `warp-ipfs`: +``` +cargo run --example from-js +``` \ No newline at end of file diff --git a/extensions/warp-ipfs/examples/from-js.rs b/extensions/warp-ipfs/examples/from-js.rs new file mode 100644 index 000000000..26b1b2b29 --- /dev/null +++ b/extensions/warp-ipfs/examples/from-js.rs @@ -0,0 +1,47 @@ +use env_logger::{Builder, Env}; +use std::process::Command; +use tiny_file_server::FileServer; + +const ADDR: &str = "127.0.0.1:9080"; +const PATH: &str = "extensions/warp-ipfs/examples/from-js"; + +fn main() { + println!("\nInstalling wasm-pack ..."); + let cmd = get_cmd("cargo install wasm-pack"); + spawn_and_wait(cmd); + + println!("\nBuilding warp-ipfs wasm files ..."); + let cmd = get_cmd("wasm-pack build extensions/warp-ipfs --target web --out-dir examples/from-js/built-wasm/warp-ipfs"); + spawn_and_wait(cmd); + + println!("\nStarting file server ..."); + Builder::from_env(Env::default().default_filter_or("info")).init(); + FileServer::http(ADDR) + .expect("Server should be created") + .run(PATH) + .expect("Server should start"); +} + +// assumes all spaces are argument separators. args containing spaces will yield unexpected results (such as strings) +fn get_cmd(cmd_str: &str) -> Command { + let mut split = cmd_str.split(" "); + + // first item is the program, then the rest of the items are the args + let mut cmd = Command::new(split.nth(0).unwrap()); + for arg in split { + cmd.arg(arg); + } + cmd +} + +fn spawn_and_wait(mut cmd: Command) { + let status = cmd + .spawn() + .expect("command failed to start") + .wait() + .expect("failed to get ExitStatus"); + + if !status.success() { + panic!("cmd ExitStatus not successful"); + }; +} diff --git a/tools/wasm-example/www/basic-wasm.html b/extensions/warp-ipfs/examples/from-js/basic-wasm.html similarity index 100% rename from tools/wasm-example/www/basic-wasm.html rename to extensions/warp-ipfs/examples/from-js/basic-wasm.html diff --git a/tools/wasm-example/www/circle.png b/extensions/warp-ipfs/examples/from-js/circle.png similarity index 100% rename from tools/wasm-example/www/circle.png rename to extensions/warp-ipfs/examples/from-js/circle.png diff --git a/tools/wasm-example/www/favicon.ico b/extensions/warp-ipfs/examples/from-js/favicon.ico similarity index 100% rename from tools/wasm-example/www/favicon.ico rename to extensions/warp-ipfs/examples/from-js/favicon.ico diff --git a/tools/wasm-example/www/index.html b/extensions/warp-ipfs/examples/from-js/index.html similarity index 100% rename from tools/wasm-example/www/index.html rename to extensions/warp-ipfs/examples/from-js/index.html diff --git a/tools/wasm-example/www/ipfs-friends.html b/extensions/warp-ipfs/examples/from-js/ipfs-friends.html similarity index 100% rename from tools/wasm-example/www/ipfs-friends.html rename to extensions/warp-ipfs/examples/from-js/ipfs-friends.html diff --git a/tools/wasm-example/www/ipfs-identity.html b/extensions/warp-ipfs/examples/from-js/ipfs-identity.html similarity index 100% rename from tools/wasm-example/www/ipfs-identity.html rename to extensions/warp-ipfs/examples/from-js/ipfs-identity.html diff --git a/tools/wasm-example/www/ipfs-persistent.html b/extensions/warp-ipfs/examples/from-js/ipfs-persistent.html similarity index 100% rename from tools/wasm-example/www/ipfs-persistent.html rename to extensions/warp-ipfs/examples/from-js/ipfs-persistent.html diff --git a/tools/wasm-example/www/ipfs-raygun.html b/extensions/warp-ipfs/examples/from-js/ipfs-raygun.html similarity index 100% rename from tools/wasm-example/www/ipfs-raygun.html rename to extensions/warp-ipfs/examples/from-js/ipfs-raygun.html diff --git a/tools/wasm-example/www/tesseract.html b/extensions/warp-ipfs/examples/from-js/tesseract.html similarity index 100% rename from tools/wasm-example/www/tesseract.html rename to extensions/warp-ipfs/examples/from-js/tesseract.html diff --git a/extensions/warp-ipfs/examples/wasm-ipfs-friends/README.md b/extensions/warp-ipfs/examples/wasm-ipfs-friends/README.md new file mode 100644 index 000000000..19c299e98 --- /dev/null +++ b/extensions/warp-ipfs/examples/wasm-ipfs-friends/README.md @@ -0,0 +1,8 @@ +# wasm-ipfs-identity + +To build do the following: + +1. Install wasm32-unknown-unknown target by doing `rustup target add wasm32-unknown-unknown` +2. Install wasm-pack by doing `cargo install wasm-pack` +3. Run `wasm-pack build --target web --out-dir static` +4. Use a web server to serve the content from `static` directory. E.g with python install you can do `python3 -m http.server -d ./static` \ No newline at end of file diff --git a/tools/wasm-example/Cargo.toml b/tools/wasm-example/Cargo.toml deleted file mode 100644 index c5d2a1a44..000000000 --- a/tools/wasm-example/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "wasm-example" -version.workspace = true -edition.workspace = true -license.workspace = true -rust-version.workspace = true -repository.workspace = true - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[lib] -crate-type = ["cdylib", "rlib"] - -[dependencies] -wasm-bindgen = { workspace = true } -web-sys = { version = "0.3", features = ["console"] } \ No newline at end of file diff --git a/tools/wasm-example/README.md b/tools/wasm-example/README.md deleted file mode 100644 index 0a2284355..000000000 --- a/tools/wasm-example/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# wasm-example - -## Compile & Run - -``` -cargo install wasm-pack -cargo install basic-http-server - -wasm-pack build tools/wasm-example --target web --out-dir www/wasm/wasm-example -wasm-pack build extensions/warp-ipfs --target web --out-dir ../../tools/wasm-example/www/wasm/warp-ipfs - -basic-http-server tools/wasm-example/www -``` -Then navigate to the `basic-wasm` example \ No newline at end of file diff --git a/tools/wasm-example/src/lib.rs b/tools/wasm-example/src/lib.rs deleted file mode 100644 index 817170e71..000000000 --- a/tools/wasm-example/src/lib.rs +++ /dev/null @@ -1,28 +0,0 @@ -use wasm_bindgen::prelude::*; -#[wasm_bindgen] -pub fn function_example(arg: &str) -> String { - web_sys::console::log_1(&format!("WASM: arg: {}", arg).into()); - web_sys::console::log_1(&"WASM: returning: bye".into()); - "bye".to_string() -} - -#[wasm_bindgen] -pub struct StructExample { - internal: String, -} - -#[wasm_bindgen] -impl StructExample { - #[wasm_bindgen(constructor)] - pub fn new(val: String) -> StructExample { - StructExample { internal: val } - } - - pub fn get(&self) -> String { - self.internal.clone() - } - - pub fn set(&mut self, val: String) { - self.internal = val; - } -} From 4e469c3ea6d617e132c18b145e6999b7052ae5b1 Mon Sep 17 00:00:00 2001 From: ashneverdawn <8341280+ashneverdawn@users.noreply.github.com> Date: Wed, 5 Jun 2024 02:43:59 -0400 Subject: [PATCH 2/6] fix typo --- extensions/warp-ipfs/examples/wasm-ipfs-friends/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/warp-ipfs/examples/wasm-ipfs-friends/README.md b/extensions/warp-ipfs/examples/wasm-ipfs-friends/README.md index 19c299e98..b1b594428 100644 --- a/extensions/warp-ipfs/examples/wasm-ipfs-friends/README.md +++ b/extensions/warp-ipfs/examples/wasm-ipfs-friends/README.md @@ -1,4 +1,4 @@ -# wasm-ipfs-identity +# wasm-ipfs-friends To build do the following: From 12d5832da9f03d318aa9466acc5a30f86721ac34 Mon Sep 17 00:00:00 2001 From: ashneverdawn <8341280+ashneverdawn@users.noreply.github.com> Date: Wed, 5 Jun 2024 10:11:04 -0400 Subject: [PATCH 3/6] replace env_logger with tracing_subscriber --- extensions/warp-ipfs/Cargo.toml | 1 - extensions/warp-ipfs/examples/from-js.rs | 12 ++++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/extensions/warp-ipfs/Cargo.toml b/extensions/warp-ipfs/Cargo.toml index 23fa7f10b..2cc3b79e9 100644 --- a/extensions/warp-ipfs/Cargo.toml +++ b/extensions/warp-ipfs/Cargo.toml @@ -73,7 +73,6 @@ clap = { version = "4.0", features = ["derive"] } rpassword = "7.3" # crates for examples -env_logger = "0.11.3" tiny_file_server = "0.1.5" [features] diff --git a/extensions/warp-ipfs/examples/from-js.rs b/extensions/warp-ipfs/examples/from-js.rs index 26b1b2b29..6880018a5 100644 --- a/extensions/warp-ipfs/examples/from-js.rs +++ b/extensions/warp-ipfs/examples/from-js.rs @@ -1,4 +1,4 @@ -use env_logger::{Builder, Env}; +use tracing_subscriber::prelude::*; use std::process::Command; use tiny_file_server::FileServer; @@ -6,6 +6,15 @@ const ADDR: &str = "127.0.0.1:9080"; const PATH: &str = "extensions/warp-ipfs/examples/from-js"; fn main() { + //set up logger so we can get an output from tiny_file_server + if std::env::var("RUST_LOG").is_err() { + std::env::set_var("RUST_LOG", "info"); + } + tracing_subscriber::registry() + .with(tracing_subscriber::EnvFilter::from_default_env()) + .with(tracing_subscriber::fmt::Layer::default().compact()) + .init(); + println!("\nInstalling wasm-pack ..."); let cmd = get_cmd("cargo install wasm-pack"); spawn_and_wait(cmd); @@ -15,7 +24,6 @@ fn main() { spawn_and_wait(cmd); println!("\nStarting file server ..."); - Builder::from_env(Env::default().default_filter_or("info")).init(); FileServer::http(ADDR) .expect("Server should be created") .run(PATH) From a16a224dcfef6239d69ec7468b1dce28baf0ab1a Mon Sep 17 00:00:00 2001 From: ashneverdawn <8341280+ashneverdawn@users.noreply.github.com> Date: Wed, 5 Jun 2024 10:33:10 -0400 Subject: [PATCH 4/6] run cargo fmt --- extensions/warp-ipfs/examples/from-js.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/warp-ipfs/examples/from-js.rs b/extensions/warp-ipfs/examples/from-js.rs index 6880018a5..63ae59a50 100644 --- a/extensions/warp-ipfs/examples/from-js.rs +++ b/extensions/warp-ipfs/examples/from-js.rs @@ -1,6 +1,6 @@ -use tracing_subscriber::prelude::*; use std::process::Command; use tiny_file_server::FileServer; +use tracing_subscriber::prelude::*; const ADDR: &str = "127.0.0.1:9080"; const PATH: &str = "extensions/warp-ipfs/examples/from-js"; From 77cee2e36e89d50d4ff15f523625d6dcd067be8b Mon Sep 17 00:00:00 2001 From: ashneverdawn <8341280+ashneverdawn@users.noreply.github.com> Date: Wed, 5 Jun 2024 10:37:12 -0400 Subject: [PATCH 5/6] modify tracing_subscriber --- extensions/warp-ipfs/examples/from-js.rs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/extensions/warp-ipfs/examples/from-js.rs b/extensions/warp-ipfs/examples/from-js.rs index 63ae59a50..86ef909d5 100644 --- a/extensions/warp-ipfs/examples/from-js.rs +++ b/extensions/warp-ipfs/examples/from-js.rs @@ -1,18 +1,19 @@ use std::process::Command; use tiny_file_server::FileServer; use tracing_subscriber::prelude::*; +use tracing_subscriber::{filter::LevelFilter, EnvFilter}; const ADDR: &str = "127.0.0.1:9080"; const PATH: &str = "extensions/warp-ipfs/examples/from-js"; fn main() { //set up logger so we can get an output from tiny_file_server - if std::env::var("RUST_LOG").is_err() { - std::env::set_var("RUST_LOG", "info"); - } - tracing_subscriber::registry() - .with(tracing_subscriber::EnvFilter::from_default_env()) - .with(tracing_subscriber::fmt::Layer::default().compact()) + tracing_subscriber::fmt() + .with_env_filter( + EnvFilter::builder() + .with_default_directive(LevelFilter::INFO.into()) + .from_env_lossy(), + ) .init(); println!("\nInstalling wasm-pack ..."); From 56078c116f955661702791672dc72a19414db8e6 Mon Sep 17 00:00:00 2001 From: ashneverdawn <8341280+ashneverdawn@users.noreply.github.com> Date: Wed, 5 Jun 2024 10:39:35 -0400 Subject: [PATCH 6/6] remove unused import --- extensions/warp-ipfs/examples/from-js.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/extensions/warp-ipfs/examples/from-js.rs b/extensions/warp-ipfs/examples/from-js.rs index 86ef909d5..b59d97182 100644 --- a/extensions/warp-ipfs/examples/from-js.rs +++ b/extensions/warp-ipfs/examples/from-js.rs @@ -1,6 +1,5 @@ use std::process::Command; use tiny_file_server::FileServer; -use tracing_subscriber::prelude::*; use tracing_subscriber::{filter::LevelFilter, EnvFilter}; const ADDR: &str = "127.0.0.1:9080";