mockforge-plugin-loader 0.3.145

Plugin loader with security sandboxing and validation for MockForge
Documentation
[package]
name = "mockforge-plugin-loader"
version.workspace = true
edition.workspace = true
authors.workspace = true
license.workspace = true
repository.workspace = true
homepage.workspace = true
documentation.workspace = true
readme.workspace = true
keywords = ["plugin", "loader", "wasm", "security", "sandbox"]
categories = ["development-tools", "api-bindings"]
description = "Plugin loader with security sandboxing and validation for MockForge"

[lints.rust]
missing_docs = "deny"

[dependencies]
# Plugin core types and traits
mockforge-plugin-core = { version = "0.3.70", path = "../mockforge-plugin-core" }

# Serialization
serde.workspace = true
serde_json.workspace = true

# Async runtime
tokio = { workspace = true, features = ["fs"] }

# Error handling
anyhow.workspace = true
thiserror.workspace = true

# Logging
tracing.workspace = true

# Utility libraries
uuid.workspace = true
regex.workspace = true

# WebAssembly runtime for plugin execution
wasmtime = "36.0.9"
wasmtime-wasi = "36.0.9"
wasmparser = "0.239"

# Plugin communication
wit-bindgen = "0.46"

# Async traits
async-trait = "0.1"

# Additional utilities
rand.workspace = true
url.workspace = true
serde_yaml.workspace = true
urlencoding.workspace = true
base64.workspace = true

# Path expansion
shellexpand = "2.1"

# Date/time handling
chrono.workspace = true

# Cryptography for plugin validation
ring = "0.17"
hex.workspace = true

# HTTP client for remote plugin downloads
reqwest = { version = "0.12", features = ["stream", "rustls-tls", "json"], default-features = false }

# Archive extraction
zip = "2.2"
flate2 = "1.0"
tar = "0.4"

# Git repository cloning
git2 = { version = "0.19", optional = true }

# Progress tracking
indicatif = "0.17"

# Directory utilities
dirs = "5.0"

# Temporary file handling
tempfile = "3.27"

# Dedicated scanner binary deps (gated behind `scanner-bin` feature).
clap = { version = "4.6", features = ["derive"], optional = true }
sha2 = { version = "0.10", optional = true }

[features]
default = ["git"]
git = ["git2"]

# Builds the dedicated `mockforge-plugin-scanner` binary. The registry
# server invokes this binary as a subprocess so wasmtime instantiation
# lives in a separate process (clean crash/timeout boundary). Library
# consumers of this crate do not need to enable it.
scanner-bin = ["dep:clap", "dep:sha2"]

[[bin]]
name = "mockforge-plugin-scanner"
path = "src/bin/scanner.rs"
required-features = ["scanner-bin"]

[dev-dependencies]
tokio = { workspace = true, features = ["test-util"] }
tempfile = "3.27"
wiremock = "0.6"