| 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() |
|
|