from __future__ import annotations from typing import Any from yuxi.utils.logging_config import logger async def resolve_contact(bridge, address: str) -> dict[str, Any]: try: contacts = await bridge.query_contacts([address]) if contacts: contact = contacts[0] return { "address": contact.get("address", address), "display_name": contact.get("displayName", ""), "first_name": contact.get("firstName", ""), "last_name": contact.get("lastName", ""), } return {"address": address, "display_name": ""} except Exception as e: logger.warning(f"[iMessage] Contact resolution failed for {address}: {e}") return {"address": address, "display_name": ""} async def resolve_contacts_batch(bridge, addresses: list[str]) -> dict[str, dict[str, Any]]: if not addresses: return {} try: contacts = await bridge.query_contacts(addresses) resolved: dict[str, dict[str, Any]] = {} for contact in contacts: addr = contact.get("address", "") resolved[addr] = { "address": addr, "display_name": contact.get("displayName", ""), "first_name": contact.get("firstName", ""), "last_name": contact.get("lastName", ""), } for addr in addresses: if addr not in resolved: resolved[addr] = {"address": addr, "display_name": ""} return resolved except Exception as e: logger.warning(f"[iMessage] Batch contact resolution failed: {e}") return {addr: {"address": addr, "display_name": ""} for addr in addresses}