from functools import lru_cache import os from pydantic_settings import BaseSettings class Settings(BaseSettings): meta_graph_version: str = "v21.0" meta_webhook_verify_token: str meta_app_id: str | None = None meta_app_secret: str | None = None meta_bridge_internal_api_key: str openclaw_meta_shared_secret: str | None = None openclaw_hook_url: str | None = None openclaw_hook_base_url: str | None = None openclaw_hook_token: str | None = None meta_page_contexts: str = "healthcare,civic" meta_bridge_database_url: str = "sqlite:////data/meta_bridge.db" meta_bridge_require_human_approval: bool = True meta_bridge_allow_low_risk_auto_ack: bool = False meta_bridge_log_level: str = "INFO" class Config: env_file = ".env" extra = "ignore" def app_secrets(self) -> list[str]: return [s for s in [self.meta_app_secret] if s] def page_contexts(self) -> list[str]: return [slug.strip() for slug in self.meta_page_contexts.split(",") if slug.strip()] def page_env(self, slug: str, field: str) -> str | None: safe_slug = slug.upper().replace("-", "_") return os.environ.get(f"META_PAGE_{field.upper()}_{safe_slug}") @lru_cache def get_settings() -> Settings: return Settings()