[package]
name = "yumechi-no-kuni-proxy-worker"
description = "A Misskey proxy worker for ゆめちのくに (Yumechi-no-kuni) instance."
repository = "https://forge.yumechi.jp/yume/yumechi-no-kuni-proxy-worker"
license = "Apache-2.0"
version = "0.1.0"
edition = "2021"
authors = [ "eternal-flame-AD <yume@yumechi.jp>" ]

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

[profile.release]
lto = true
strip = true
opt-level = "z"
codegen-units = 1
panic = "abort"

[profile.release-local]
inherits = "release"
opt-level = 3
strip = false
panic = "unwind"

[features]
default = []

# Base feature sets based on the environment
env-local = ["axum/http1", "axum/http2", 
             "axum-server",
             "reqwest", "tokio", 
             "env_logger", 
             "governor", 
             "clap", "toml",
             "image/ico",
             "lossy-webp",
             "tower-http",
             "metrics",
            ]
cf-worker = ["dep:worker", "dep:worker-macros", "dep:wasm-bindgen", "image/ico", "panic-console-error"]

# Observability and tracing features
panic-console-error = ["dep:console_error_panic_hook"]
metrics = ["prometheus"]
prometheus = ["dep:prometheus"]

# Processing capabilities
lossy-webp = ["dep:webp"]

# Server runtime features
tokio = ["dep:tokio", "axum/tokio", "dep:libc"]
axum-server = ["dep:axum-server", "tower-http"]
governor = ["dep:governor"]
env_logger = ["dep:env_logger"]
tower-http = ["dep:tower-http"]
reuse-port = []
reqwest = ["dep:reqwest", "dep:url"]

# Sandbox features
apparmor = ["dep:siphasher", "dep:libc"]

[dependencies]
worker = { version="0.4.2", features=['http', 'axum'], optional = true }
worker-macros = { version="0.4.2", features=['http'], optional = true }
axum = { version = "0.7", default-features = false, features = ["query", "json"] }
tower-service = "0.3"
console_error_panic_hook = { version = "0.1.1", optional = true }
serde = { version = "1", features = ["derive"] }
futures = { version = "0.3.31", default-features = false, features = ["std"] }
image = { version = "0.25.5", default-features = false, features = ["avif", "bmp", "gif", "jpeg", "png", "webp"] }
reqwest = { version = "0.12.9", features = ["brotli", "gzip", "stream", "zstd"], optional = true }
getrandom = { version = "0.2", features = ["js"] }
siphasher = { version = "1.0.1", optional = true }
tokio = { version = "1.41.1", features = ["rt", "rt-multi-thread", "macros", "sync", "signal"], optional = true }
clap = { version = "4.5.20", features = ["derive"], optional = true }
toml = { version = "0.8", optional = true }
log = "0.4"
env_logger = { version = "0.11", optional = true }
governor = { version = "0.7.0", features = ["dashmap"], optional = true }
thiserror = "2.0"
serde_json = "1"
wasm-bindgen = { version = "0.2", optional = true }
libc = { version = "0.2.162", optional = true }
axum-server = { version = "0.7.1", optional = true }
webp = { version = "0.3.0", optional = true }
url = { version = "2", optional = true }
tower-http = { version = "0.6.2", features = ["catch-panic", "timeout"], optional = true }
dashmap = "6.1.0"
lru = "0.12.5"
prometheus = { version = "0.13.4", optional = true }
xml = "0.8.20"

[build-dependencies]
chumsky = "0.9.3"
quote = "1.0.37"
serde = { version = "1.0.214", features = ["derive"] }
serde_json = "1.0.132"

[[bin]]
name = "yumechi-no-kuni-proxy-worker"
required-features = ["env-local"]