[package]
name = "monetize-estate-side"
description = "The estate side of the ONE monetize's wire, shared by every product: the box pump (Fleet.Report / Orders / Ask: the box key, verify, run through the product's executor, ack; the jera round) and the front's signed SoldEstate client (Upgrade, Recharge, TakeMaterial, UpdateTake, UpdateReport) behind a swappable transport. The product writes only its executor and its words."
# OPEN (P4a, 2026-10-25, A22 W7 + W9, A28 §4): moved out of Holger's holger-fleet (the pump) and
# holger-estate-front shop_door.rs (the SoldEstate client), Holger first; Gunnar's gunnar-repair
# and gunnar-front shop_door.rs follow in T16. A NEW crate rather than a module of
# monetize-embed: monetize-embed is the network-free entitlement cache a product compiles in
# (no tonic, no proto). The two monetize-embed lines (0.1.3 here, 0.2.0 on crates.io, A28
# H20) are joined in 0.3.0 (A3, 2026-10-26): one crates.io line for the workspace. The SoldEstate client is THIN on purpose (TASKS-4-v2 T16, A28 H16):
# the SoldEstate → Fleet merge swaps its transport (`sold_door::Wire`) and nothing else.
version.workspace = true
edition.workspace = true
rust-version.workspace = true
repository = "https://git.gunnar.rs/nordisk/monetize"
license.workspace = true
authors.workspace = true
publish = true
[features]
# Both halves by default (the workspace's tests run both); a front takes
# `default-features = false, features = ["sold-door"]`, a box `["pump"]`.
default = ["pump", "sold-door"]
# **The box pump** (a main or twin of an estate): `pump::{config, key, puller, grpc, duty}`.
pump = ["dep:jera", "dep:getrandom", "dep:log", "dep:anyhow"]
# **The front's SoldEstate client**: `sold_door`. It also answers the shared update step's
# `Shop` (nordisk-pairing `frontside::update`), so a front's update pull is the crate's.
# It rides `Fleet.Ask` (P3-FLEET, plan §8: the old door's answer comes back prost-encoded) and
# keeps the old `SoldEstate` door for the overlap release.
sold-door = ["dep:toml", "dep:prost", "nordisk-pairing/frontside-update"]
[dependencies]
# The signed forms (FleetCall, SignedOrder, Report, OrderAck, EstateCall): monetize's own.
monetize-embed = { version = "0.3.0", path = "../monetize-embed" }
# The wire (`monetize.v1.Fleet`, `monetize.v1.SoldEstate`), generated by monetize itself.
monetize-proto = { version = "0.3.0", path = "../monetize-proto" }
# The pull channel's money-free rules (`fleet::seam_refusal`, `fleet::after_refusal`) and the
# update step's `Shop` (feature `sold-door`). 0.5.26 (P4a): `frontside::update`; 0.5.27 (A3): its shared re-admission.
nordisk-pairing = { version = "0.5.27", path = "../../../Skidbladnir/crates/installer/nordisk-pairing" }
tonic.workspace = true
tokio = { workspace = true, features = ["rt", "time", "sync"] }
ed25519-dalek.workspace = true
serde.workspace = true
serde_json.workspace = true
# The box pump's round is a jera ChainQueue job (house rule: server background work is a jera job).
jera = { version = "0.2.1", default-features = false, optional = true }
getrandom = { version = "0.4", optional = true }
log = { version = "0.4", optional = true }
anyhow = { workspace = true, optional = true }
toml = { version = "1", optional = true }
prost = { workspace = true, optional = true }
[dev-dependencies]
tempfile = "3"
tokio = { workspace = true, features = ["rt-multi-thread", "macros", "time", "net"] }
tokio-stream = { version = "0.1", features = ["net"] }