Resolving a handle to a DID
import { CompositeHandleResolver, WellKnownHandleResolver } from '@atcute/identity-resolver';
import { NodeDnsHandleResolver } from '@atcute/identity-resolver-node';
const handleResolver = new CompositeHandleResolver({
strategy: 'race',
methods: {
dns: new NodeDnsHandleResolver(),
http: new WellKnownHandleResolver(),
},
});
const did = await handleResolver.resolve('bsky.app');
// ^ 'did:plc:z72i7hdynmk6r22z27h6tvur'
Resolving a DID to a DID document
import { CompositeDidDocumentResolver, PlcDidDocumentResolver, WebDidDocumentResolver } from '@atcute/identity-resolver';
const docResolver = new CompositeDidDocumentResolver({
methods: {
plc: new PlcDidDocumentResolver(),
web: new WebDidDocumentResolver(),
},
});
const doc = await docResolver.resolve('did:plc:z72i7hdynmk6r22z27h6tvur');
// ^? { '@context': [...], id: 'did:plc:z72i7hdynmk6r22z27h6tvur', ... }
Making requests to the user's personal data server
import { XRPC, simpleFetchHandler } from '@atcute/client';
import { getPdsEndpoint } from '@atcute/identity';
const pdsUrl = getPdsEndpoint(doc);
// ^? 'https://puffball.us-east.host.bsky.network'
{
const url = new URL('/xrpc/com.atproto.sync.getRepo', pdsUrl);
url.searchParams.set('did', did);
const res = await fetch(url);
// ...
}
// Alternatively, use @atcute/client
{
const rpc = new XRPC({ handler: simpleFetchHandler({ service: pdsUrl }) });
const { data } = await rpc.get('com.atproto.server.describeServer', {});
// ^? { did: 'did:web:puffball.us-east.host.bsky.network', ... }
}