From 42f7dd6174dff08b8e2b24e186ebb50dd36a4b04 Mon Sep 17 00:00:00 2001 From: Yuto Nishida Date: Fri, 26 Dec 2025 21:18:13 -0800 Subject: [PATCH] [ATMii] Get mii binary blob --- .../packages/client/src/pages/Profile.tsx | 37 ++++++++++++++++--- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/experimental/atmii/packages/client/src/pages/Profile.tsx b/experimental/atmii/packages/client/src/pages/Profile.tsx index 7281d91..9a8f324 100644 --- a/experimental/atmii/packages/client/src/pages/Profile.tsx +++ b/experimental/atmii/packages/client/src/pages/Profile.tsx @@ -11,6 +11,7 @@ import { PlcDidDocumentResolver, WebDidDocumentResolver, LocalActorResolver, + ResolvedActor, } from '@atcute/identity-resolver' import { getPdsEndpoint @@ -39,9 +40,10 @@ const actorResolver = new LocalActorResolver({ const Profile = () => { const { handle } = useParams() - const [pds, setPds] = useState(null); + const [resolvedActor, setResolvedActor] = useState(null); const [rpc, setRpc] = useState(); - const [mii, setMii] = useState(new ArrayBuffer()) + const [miiCid, setMiiCid] = useState(null); + const [mii, setMii] = useState(new Uint8Array()) useEffect(() => { if (!handle || !isActorIdentifier(handle)) return; @@ -51,10 +53,10 @@ const Profile = () => { const fetchMii = async () => { // Fetch pds endpoint - const { pds } = await actorResolver.resolve(handle); - setPds(pds); + const resolvedActor = await actorResolver.resolve(handle); + setResolvedActor(resolvedActor) - const rpc = new Client({ handler: simpleFetchHandler({ service: pds }), }); + const rpc = new Client({ handler: simpleFetchHandler({ service: resolvedActor.pds }), }); setRpc(rpc) const result = await rpc.get('com.atproto.repo.getRecord', { @@ -65,6 +67,31 @@ const Profile = () => { }, }); console.debug('Fetched Mii record:', result); + + if (!('value' in result.data)) { + console.log('result.data.value does not exist'); + return; + } + + // TODO: add type safety + const cid = (result.data.value.mii as any).ref["$link"] as string; + setMiiCid(cid); + + // Get blob + const blobResult = await rpc.get('com.atproto.sync.getBlob', { + params: { + did: resolvedActor.did, + cid: cid, + }, + as: 'bytes', + }); + console.debug('Fetched mii blob: ', blobResult) + if (!blobResult.ok) { + console.log('blobResult is not ok'); + return; + } + const miiData = new Uint8Array(blobResult.data); + setMii(miiData); }; fetchMii(); -- 2.54.0