personal web client for Bluesky
typescript solidjs bluesky atcute
4
fork

Configure Feed

Select the types of activity you want to include in your feed.

at ffc69e48bf9657408de2c506b10200cbab9700ca 86 lines 2.4 kB view raw
1import { ComAtprotoIdentityResolveDid, ComAtprotoIdentityResolveHandle } from '@atcute/atproto'; 2import { 3 AmbiguousHandleError, 4 CompositeDidDocumentResolver, 5 CompositeHandleResolver, 6 DidNotFoundError, 7 DocumentNotFoundError, 8 DohJsonHandleResolver, 9 ImproperDidError, 10 InvalidResolvedHandleError, 11 PlcDidDocumentResolver, 12 UnsupportedDidMethodError, 13 WebDidDocumentResolver, 14 WellKnownHandleResolver, 15} from '@atcute/identity-resolver'; 16import { InvalidRequestError, XRPCRouter, json } from '@atcute/xrpc-server'; 17 18const handleResolver = new CompositeHandleResolver({ 19 methods: { 20 dns: new DohJsonHandleResolver({ dohUrl: 'https://mozilla.cloudflare-dns.com/dns-query' }), 21 http: new WellKnownHandleResolver(), 22 }, 23}); 24 25const didDocResolver = new CompositeDidDocumentResolver<string>({ 26 methods: { 27 plc: new PlcDidDocumentResolver(), 28 web: new WebDidDocumentResolver(), 29 }, 30}); 31 32const router = new XRPCRouter(); 33 34router.add(ComAtprotoIdentityResolveHandle.mainSchema, { 35 async handler({ params: { handle } }) { 36 try { 37 const did = await handleResolver.resolve(handle); 38 39 return json({ did }); 40 } catch (err) { 41 console.error(`resolveHandleToDid`, handle, err); 42 43 if (err instanceof DidNotFoundError) { 44 throw new InvalidRequestError({ description: `no did found under that handle` }); 45 } 46 47 if (err instanceof InvalidResolvedHandleError) { 48 throw new InvalidRequestError({ description: `did found but is invalid atproto did` }); 49 } 50 51 if (err instanceof AmbiguousHandleError) { 52 throw new InvalidRequestError({ description: `multiple did found under that handle` }); 53 } 54 55 throw err; 56 } 57 }, 58}); 59 60router.add(ComAtprotoIdentityResolveDid.mainSchema, { 61 async handler({ params: { did } }) { 62 try { 63 const doc = await didDocResolver.resolve(did); 64 65 return json({ didDoc: doc as unknown as Record<string, unknown> }); 66 } catch (err) { 67 console.error(`resolveDidToDoc`, did, err); 68 69 if (err instanceof DocumentNotFoundError) { 70 throw new InvalidRequestError({ description: `no document found under that did` }); 71 } 72 73 if (err instanceof UnsupportedDidMethodError) { 74 throw new InvalidRequestError({ description: `unsupported did method` }); 75 } 76 77 if (err instanceof ImproperDidError) { 78 throw new InvalidRequestError({ description: `invalid did` }); 79 } 80 81 throw err; 82 } 83 }, 84}); 85 86export default { fetch: router.fetch } satisfies ExportedHandler<Env>;