from __future__ import annotations from dataclasses import dataclass from yuxi.channels.adapters.signal.client import RpcClient @dataclass class RpcContext: client: RpcClient base_url: str account: str @classmethod async def resolve(cls, base_url: str, account: str) -> RpcContext: client = RpcClient(base_url) await client.connect() return cls(client=client, base_url=base_url, account=account) async def disconnect(self) -> None: await self.client.disconnect() async def __aenter__(self) -> RpcContext: return self async def __aexit__(self, exc_type, exc_val, exc_tb) -> None: await self.disconnect()