Files
caravel/backend
2026-02-25 13:27:45 -08:00
..
2026-02-25 13:27:45 -08:00
2026-02-25 13:27:45 -08:00
2026-02-25 13:27:45 -08:00
2026-02-25 13:27:45 -08:00

Backend

Rust backend for the Nostr relay hosting platform. This service manages tenants, relays, invoices, and billing, and provisions relays by calling the zooid HTTP API. It authenticates requests using NIP-98.

Tech Stack

  • Rust (Edition 2024)
  • Axum (HTTP server)
  • SQLx + SQLite (persistence)
  • Nostr SDK (NIP-98 verification)

Layout

backend/
  migrations/          # SQL migrations
  src/
    auth.rs            # NIP-98 verification helper
    config.rs          # Env-based configuration
    db.rs              # SQLite pool + migrations
    main.rs            # Axum server entrypoint
    models.rs          # Data models
    repo.rs            # Data access layer

Configuration

Environment variables:

Variable Description Default
DATABASE_URL SQLite database URL sqlite://data/hosting.db
HOST Bind host 127.0.0.1
PORT Bind port 3000
ZOOID_API_URL Zooid API base URL http://127.0.0.1:8032
PLATFORM_SECRET Platform Nostr secret key for NIP-98 auth required
RELAY_DOMAIN Relay base domain for subdomains spaces.coracle.social

The database directory is created automatically if it doesnt exist.

Database Schema

Created via migrations/0001_init.sql:

  • tenants
  • relays
  • invoices
  • invoice_items

Running

cd backend
cargo run

Health check:

GET /healthz

NIP-98 Authentication

NIP-98 verification is implemented in auth.rs using the Rust Nostr SDK. It verifies:

  • Authorization header format
  • Event signature and kind
  • URL + HTTP method tags
  • Timestamp validity

This is ready to be used by API routes.

API Routes

Tenant routes (all require NIP-98 auth; pubkey is inferred from the token):

  • GET /tenant — fetch (or create) tenant
  • GET /tenant/relays — list tenant relays
  • POST /tenant/relays — create relay
  • GET /tenant/relays/:id — get relay
  • PUT /tenant/relays/:id — update relay
  • DELETE /tenant/relays/:id — deactivate relay
  • GET /tenant/invoices — list invoices

Admin routes (all require NIP-98 auth; pubkey must be in HOSTING_ADMIN_PUBKEYS):

  • GET /admin/tenants — list tenants
  • GET /admin/tenants/:pubkey — tenant detail (includes relays)
  • PUT /admin/tenants/:pubkey — update tenant status
  • GET /admin/relays — list relays
  • GET /admin/relays/:id — get relay
  • PUT /admin/relays/:id — update relay
  • DELETE /admin/relays/:id — deactivate relay

Next Steps

  • Add invoice generation and billing jobs