47 lines
1.7 KiB
Python
47 lines
1.7 KiB
Python
|
|
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}
|