import os from dataclasses import dataclass from typing import Mapping @dataclass(frozen=True) class Config: api_key: str api_secret: str api_passphrase: str trading_env: str = "demo" def load_config(env: Mapping[str, str] | None = None) -> Config: source = os.environ if env is None else env api_key = source.get("OKX_API_KEY") api_secret = source.get("OKX_API_SECRET") api_passphrase = source.get("OKX_API_PASSPHRASE") if not api_key or not api_secret or not api_passphrase: raise ValueError("OKX credentials are required") trading_env = source.get("OKX_TRADING_ENV", "demo") if trading_env not in {"demo", "live"}: raise ValueError("OKX_TRADING_ENV must be demo or live") return Config( api_key=api_key, api_secret=api_secret, api_passphrase=api_passphrase, trading_env=trading_env, )