Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions overlay_social/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,13 @@ def _interp_resolve(ok: bool, data: Any) -> dict[str, ResolvedIdentity]:
return {k: ResolvedIdentity.from_dict(v) for k, v in ids.items() if isinstance(v, dict)}


def _interp_list_identities(data: Any) -> list[ResolvedIdentity]:
if not isinstance(data, dict):
return []
ids = data.get("identities") or []
return [ResolvedIdentity.from_dict(v) for v in ids if isinstance(v, dict)]


def _interp_identity(data: Any) -> IdentityBundle | None:
if not isinstance(data, dict) or data.get("error") or not data.get("pubkey"):
return None
Expand Down Expand Up @@ -201,6 +208,20 @@ def resolve_identities(
except Exception:
return {}

def list_identities(self, *, limit: int = 50, offset: int = 0) -> list[ResolvedIdentity]:
"""GET /v1/identities — people-discovery: canonical profiles, newest
first ("who's on the overlay"). Returns [] on any error."""
try:
r = self._client.get(
f"{self.base_url}/v1/identities",
params={"limit": limit, "offset": offset},
)
if r.status_code // 100 != 2:
return []
return _interp_list_identities(r.json() if r.content else None)
except Exception:
return []

def get_identity(self, pubkey: str) -> IdentityBundle | None:
if not pubkey:
return None
Expand Down
2 changes: 2 additions & 0 deletions overlay_social/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ class ResolvedIdentity:
display_name: str | None = None
avatar_ref: str | None = None
profile_outpoint: str | None = None
minted_at: str | None = None # set by GET /v1/identities (discovery); None from resolve

@classmethod
def from_dict(cls, d: dict[str, Any]) -> "ResolvedIdentity":
Expand All @@ -38,6 +39,7 @@ def from_dict(cls, d: dict[str, Any]) -> "ResolvedIdentity":
display_name=d.get("displayName"),
avatar_ref=d.get("avatarRef"),
profile_outpoint=d.get("profileOutpoint"),
minted_at=d.get("mintedAt"),
)


Expand Down
Loading