[package] name = "meta-feeder-sdk" version = "1.5.0" edition = "2021" rust-version = "1.85" license = "MIT" repository = "https://github.com/worph/meta-feeder-sdk" description = "Source-agnostic foundation for MetaMesh gateway feeders: the FeederPlugin trait, the content-addressing hash families, the structured-query evaluator, and an axum harness that serves any set of plugins over the feeder HTTP contract." readme = "README.md" keywords = ["metamesh", "feeder", "gateway", "content-addressing", "plugin"] categories = ["api-bindings", "web-programming::http-server"] # Not on crates.io yet โ€” consumers depend on a git tag while the contract is # still moving (see docs/project-architecture/feeder-architecture.md ยง8). # Flip this, not the dep form, when `cargo add meta-feeder-sdk` should work. publish = false # This repo IS the crate. The explicit (empty) workspace table stops it being # absorbed into a parent workspace when it is vendored or path-overridden into # a feeder checkout during local development. [workspace] # Source-agnostic foundation shared by the gateway core and every feeder # sidecar binary: the `FeederPlugin` trait, the content-addressing hash # families, the per-plugin redb cache, the shared HTTP/cache helpers, the # structured-query evaluator, and the axum `serve_feeders` harness that wraps # any set of `FeederPlugin`s in the feeder HTTP contract. # # Deliberately libp2p-free / blockstore-free: a feeder finds + fetches bytes; # the gateway core owns hashing-into-the-blockstore, the meta-core store-back, # and the libp2p wire. Keep heavy deps (librqbit, beetswap, cid, libp2p) OUT # of here so feeders that don't need them don't pay for them. [features] # The meta-share transport-plugin contract (`src/transport/`): the hull's # client, the plugins' axum harness, the focus replica, shared error/range # types. Off by default so feeders build exactly what they always did. transport = ["dep:cid", "dep:libc", "dep:tokio-util"] # Conformance checks any transport implementation must pass. testkit = ["transport"] [dependencies] # Async runtime + HTTP server (the serve_feeders harness) tokio = { version = "1.40", features = ["full"] } axum = { version = "0.7", features = ["json"] } hyper = { version = "1", features = ["full"] } reqwest = { version = "0.12", features = ["json", "rustls-tls", "stream"], default-features = false } # Serialization serde = { version = "1", features = ["derive"] } serde_json = "1" base64 = "0.22" # Utilities futures = "0.3" async-trait = "0.1" anyhow = "1" thiserror = "1" tracing = "0.1" sha2 = "0.10" bytes = "1" # Title-tag parsing (shared filename_meta โ€” season/episode/quality/codec/languages). regex = "1" # Per-plugin midhash/blob cache. Schema is identical to meta-share v1 โ€” see # cache.rs. Pure-Rust single-process embedded store. redb = "2" # CID parsing for the transport contract only (`transport::cid`). Optional so # feeders don't pull it. cid = { version = "0.11", optional = true } # statvfs(2) for `transport::fsutil::available_bytes`. libc = { version = "0.2", optional = true } # `ReaderStream` for `transport::file`. tokio-util = { version = "0.7", features = ["io"], optional = true } [dev-dependencies] tempfile = "3" tower = { version = "0.4", features = ["util"] } tokio = { version = "1.40", features = ["full", "test-util"] }