your personal website on atproto - mirror blento.app
at update-link-card 40 lines 1.1 kB view raw
1import type { ActorIdentifier, Did } from '@atcute/lexicons'; 2import type { CacheService } from './cache'; 3import { env as publicEnv } from '$env/dynamic/public'; 4import { resolveHandle } from './atproto'; 5import { isHandle } from '@atcute/lexicons/syntax'; 6 7export async function getActor({ 8 request, 9 paramActor, 10 platform, 11 blockBoth = true 12}: { 13 request: Request; 14 paramActor?: ActorIdentifier; 15 platform: Readonly<App.Platform> | undefined; 16 blockBoth?: boolean; 17}): Promise<Did | undefined> { 18 const customDomain = request.headers.get('X-Custom-Domain')?.toLowerCase(); 19 let actor = paramActor; 20 21 if (!actor) { 22 const kv = platform?.env?.CUSTOM_DOMAINS; 23 24 if (kv && customDomain) { 25 try { 26 const did = await kv.get(customDomain); 27 28 if (did) actor = did as ActorIdentifier; 29 } catch (error) { 30 console.error('failed to get custom domain kv', error); 31 } 32 } else { 33 actor = publicEnv.PUBLIC_HANDLE as ActorIdentifier; 34 } 35 } else if (customDomain && paramActor && blockBoth) { 36 actor = undefined; 37 } 38 39 return isHandle(actor) ? await resolveHandle({ handle: actor }) : actor; 40}