Files
buzz/crates/buzz-push-gateway/Cargo.toml
Tom Brow 7e96f91229 feat(mobile-infra): support development App Attest (#7744)
Development-signed iOS apps cannot enroll with the current gateway
because their Apple App Attest AAGUID is rejected.

Add an explicit personal development build feature and environment
setting so a development gateway can use a developer's own application
identity and sandbox APNs credentials.

Ordinary gateway builds remain production-only. Special builds also
default to production, enforce exactly the selected signed AAGUID, and
retain certificate-chain, pinned-root, nonce, app-ID, key,
credential-ID, and counter verification.

Document the matching mobile signing configuration and expose the
feature through an optional Docker build argument.

### Validation

The development image deployed successfully to a personal Railway stack;
private readiness, enrollment challenges, authenticated relay access,
and APNs sandbox TLS/HTTP2 connectivity passed.

Signed-off-by: Tom Brow <tomb@block.xyz>
2026-09-22 22:53:46 +00:00

54 lines
1.4 KiB
TOML

[package]
name = "buzz-push-gateway"
description = "Blind, capability-gated NIP-PL gateway for the Buzz mobile app"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
repository.workspace = true
[lib]
name = "buzz_push_gateway"
path = "src/lib.rs"
[[bin]]
name = "buzz-push-gateway"
path = "src/main.rs"
[features]
# Personal device development only. Production builds remain production-only.
personal-dev-app-attest = ["appattest/testing"]
[dependencies]
aes-gcm = "0.10"
appattest = { version = "0.1.1", default-features = false }
axum = { workspace = true }
async-trait = "0.1"
base64 = "0.22"
byteorder = "1.5"
minicbor = "0.25"
chrono = { workspace = true }
hex = { workspace = true }
getrandom = "0.4"
metrics = { workspace = true }
metrics-exporter-prometheus = { workspace = true }
nostr = { workspace = true }
rand = { workspace = true }
reqwest = { workspace = true, features = ["http2"] }
serde = { workspace = true }
serde_json = { workspace = true }
sqlx = { workspace = true }
sha2 = { workspace = true }
thiserror = { workspace = true }
tokio = { workspace = true }
tower = { workspace = true }
tower-http = { workspace = true }
tracing = { workspace = true }
tracing-subscriber = { workspace = true }
url = { workspace = true }
uuid = { workspace = true }
[dev-dependencies]
proptest = { workspace = true }
reqwest = { workspace = true }