2026-03-20 20:44:00 +02:00
|
|
|
from __future__ import annotations
|
|
|
|
|
|
|
|
|
|
import os
|
|
|
|
|
from dotenv import load_dotenv
|
|
|
|
|
|
|
|
|
|
load_dotenv()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _require(name: str) -> str:
|
|
|
|
|
value = os.getenv(name)
|
|
|
|
|
if not value:
|
|
|
|
|
raise RuntimeError(f"Required environment variable {name!r} is not set")
|
|
|
|
|
return value
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOT_TOKEN: str = _require("BOT_TOKEN")
|
|
|
|
|
CHAT_ID: str = _require("CHAT_ID")
|
|
|
|
|
DB_PATH: str = os.getenv("DB_PATH", "baton.db")
|
|
|
|
|
WEBHOOK_SECRET: str = _require("WEBHOOK_SECRET")
|
|
|
|
|
WEBHOOK_URL: str = _require("WEBHOOK_URL")
|
2026-03-20 21:01:48 +02:00
|
|
|
WEBHOOK_ENABLED: bool = os.getenv("WEBHOOK_ENABLED", "true").lower() == "true"
|
2026-03-20 20:44:00 +02:00
|
|
|
FRONTEND_ORIGIN: str = os.getenv("FRONTEND_ORIGIN", "http://localhost:3000")
|
2026-03-20 21:03:45 +02:00
|
|
|
APP_URL: str | None = os.getenv("APP_URL") # Публичный URL приложения для keep-alive self-ping
|
2026-03-20 23:39:28 +02:00
|
|
|
ADMIN_TOKEN: str = _require("ADMIN_TOKEN")
|
2026-03-21 09:34:21 +02:00
|
|
|
ADMIN_CHAT_ID: str = _require("ADMIN_CHAT_ID")
|
2026-03-21 09:19:50 +02:00
|
|
|
VAPID_PRIVATE_KEY: str = os.getenv("VAPID_PRIVATE_KEY", "")
|
|
|
|
|
VAPID_PUBLIC_KEY: str = os.getenv("VAPID_PUBLIC_KEY", "")
|
|
|
|
|
VAPID_CLAIMS_EMAIL: str = os.getenv("VAPID_CLAIMS_EMAIL", "")
|
2026-03-21 12:42:13 +02:00
|
|
|
JWT_SECRET: str = os.getenv("JWT_SECRET", "")
|
|
|
|
|
JWT_TOKEN_EXPIRE_SECONDS: int = int(os.getenv("JWT_TOKEN_EXPIRE_SECONDS", "2592000")) # 30 days
|