import os from typing import List from app.core._config import PROJECT_HOST from .constants import NODE_TYPE_PUBLIC, NODE_TYPE_PRIVATE def _csv_list(val: str) -> List[str]: return [x.strip() for x in (val or "").split(",") if x.strip()] # Handshake / network config driven by env NODE_PRIVACY = os.getenv("NODE_PRIVACY", NODE_TYPE_PUBLIC).strip().lower() if NODE_PRIVACY not in (NODE_TYPE_PUBLIC, NODE_TYPE_PRIVATE): NODE_PRIVACY = NODE_TYPE_PUBLIC # Public endpoint for network (can be empty for private nodes) _env_public_host = os.getenv("PUBLIC_HOST") PUBLIC_HOST = _env_public_host if (_env_public_host is not None and _env_public_host.strip() != "") else None HANDSHAKE_INTERVAL_SEC = int(os.getenv("HANDSHAKE_INTERVAL_SEC", "5")) UNSUPPORTED_RECHECK_INTERVAL_SEC = int(os.getenv("UNSUPPORTED_RECHECK_INTERVAL_SEC", str(24 * 3600))) BOOTSTRAP_SEEDS = _csv_list(os.getenv("BOOTSTRAP_SEEDS", "")) BOOTSTRAP_REQUIRED = int(os.getenv("BOOTSTRAP_REQUIRED", "1")) == 1 BOOTSTRAP_TIMEOUT_SEC = int(os.getenv("BOOTSTRAP_TIMEOUT_SEC", "20")) # Security knobs NETWORK_TLS_VERIFY = int(os.getenv("NETWORK_TLS_VERIFY", "1")) == 1 HANDSHAKE_TS_TOLERANCE_SEC = int(os.getenv("HANDSHAKE_TS_TOLERANCE_SEC", "300")) HANDSHAKE_RATE_LIMIT_PER_MIN = int(os.getenv("HANDSHAKE_RATE_LIMIT_PER_MIN", "60")) # Capabilities NODE_IS_BOOTSTRAP = int(os.getenv("NODE_IS_BOOTSTRAP", "0")) == 1 MAX_CONTENT_SIZE_MB = int(os.getenv("MAX_CONTENT_SIZE_MB", "512")) # Privacy allowlist (for NODE_PRIVACY=private) PRIVATE_ALLOWLIST = _csv_list(os.getenv("PRIVATE_ALLOWLIST", "/api/system.version"))