Transport
Explicit Swarm wiring, per-service deduplication and verified local ingestion.
WovenTransport::topic_for_space deterministically derives a Swarm topic from a space. Topic derivation is namespacing, not encryption or a cryptographic guarantee that unrelated traffic is impossible.
encode_event emits the woven.transport.event version-1 envelope. decode_event checks protocol/version, envelope-space equality and event signature/ID validity. It does not resolve the author string to an independently trusted identity.
| Service API | Behavior |
|---|---|
WovenTransportService::new(spaces, strand) | Starts with an empty dedup set. |
WovenTransportService::open(spaces, strand).await | Hydrates dedup state from verified persisted event records; use this when reopening a durable Strand. |
join_spaces(&swarm).await | Joins configured topics; does not run the incoming-event loop. |
handle_payload(bytes).await | Verifies an envelope, checks accepted spaces and serializes dedup/append within this service instance. |
handle_swarm_event(event).await | Additionally checks the topic for SwarmEvent::Data; RawMessage uses payload handling without a topic field. |
An empty configured space set accepts any valid payload space; it does not mean reject all. Separate service instances have separate dedup sets. Do not claim global exactly-once ingestion or that a receiver's append order equals each author's original publish order.
broadcast_event(&swarm, &event).await delegates to the Swarm broadcast and returns its send count. That count is not a remote application acceptance/durability receipt. Offline peers require an explicitly configured retrieval/replication path; WOVEN does not create one automatically.