96 lines
4.3 KiB
TOML
96 lines
4.3 KiB
TOML
[package]
|
|
name = "meta-feeder-sdk"
|
|
version = "1.7.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]
|
|
default = ["feeder"]
|
|
# Everything a feeder sidecar (and the transport contract) builds on: the
|
|
# FeederPlugin trait, hashing, the redb cache, the axum harness. On by default
|
|
# so existing consumers build exactly what they always did.
|
|
feeder = [
|
|
"beacon",
|
|
"dep:axum", "dep:hyper", "dep:reqwest", "dep:base64", "dep:futures",
|
|
"dep:async-trait", "dep:anyhow", "dep:thiserror", "dep:sha2", "dep:bytes",
|
|
"dep:regex", "dep:redb",
|
|
]
|
|
# Beacon v2 local discovery (`src/beacon/`). Needs only tokio/serde/tracing/libc,
|
|
# so a meta-* service takes the SDK with `default-features = false,
|
|
# features = ["beacon"]` and pulls in none of the feeder machinery.
|
|
beacon = ["dep:libc"]
|
|
# 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 = ["feeder", "dep:cid", "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"], optional = true }
|
|
hyper = { version = "1", features = ["full"], optional = true }
|
|
reqwest = { version = "0.12", features = ["json", "rustls-tls", "stream"], default-features = false, optional = true }
|
|
|
|
# Serialization
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
base64 = { version = "0.22", optional = true }
|
|
|
|
# Utilities
|
|
futures = { version = "0.3", optional = true }
|
|
async-trait = { version = "0.1", optional = true }
|
|
anyhow = { version = "1", optional = true }
|
|
thiserror = { version = "1", optional = true }
|
|
tracing = "0.1"
|
|
sha2 = { version = "0.10", optional = true }
|
|
bytes = { version = "1", optional = true }
|
|
# Title-tag parsing (shared filename_meta — season/episode/quality/codec/languages).
|
|
regex = { version = "1", optional = true }
|
|
|
|
# Per-plugin midhash/blob cache. Schema is identical to meta-share v1 — see
|
|
# cache.rs. Pure-Rust single-process embedded store.
|
|
redb = { version = "2", optional = true }
|
|
|
|
# CID parsing for the transport contract only (`transport::cid`). Optional so
|
|
# feeders don't pull it.
|
|
cid = { version = "0.11", optional = true }
|
|
# Raw sockets for `beacon` (per-interface multicast) and 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"] }
|