your personal website on atproto - mirror
blento.app
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}