mirror your GitHub repos to tangled.org automatically
1

Configure Feed

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

1import { inArray } from 'drizzle-orm' 2import { installation, userIdentity } from '#server/db/schema' 3import { useDb } from '#server/utils/db' 4import { getDeviceSession, requireSession } from '#server/utils/server-session' 5 6export interface AccountSummary { 7 did: string 8 installationId: number 9 handle: string | null 10 accountLogin: string | null 11 active: boolean 12} 13 14export interface AccountsPayload { 15 active: string 16 accounts: AccountSummary[] 17} 18 19export default defineEventHandler(async (event): Promise<AccountsPayload> => { 20 await requireSession(event) 21 const data = (await getDeviceSession(event))! 22 23 const db = useDb() 24 const dids = data.accounts.map(a => a.did) 25 const installIds = data.accounts.map(a => a.installationId) 26 27 const [identityRows, installRows] = await Promise.all([ 28 dids.length > 0 29 ? db.select({ did: userIdentity.did, handle: userIdentity.handle }) 30 .from(userIdentity) 31 .where(inArray(userIdentity.did, dids)) 32 : Promise.resolve([]), 33 installIds.length > 0 34 ? db.select({ id: installation.id, accountLogin: installation.accountLogin }) 35 .from(installation) 36 .where(inArray(installation.id, installIds)) 37 : Promise.resolve([]), 38 ]) 39 40 const handleByDid = new Map(identityRows.map(r => [r.did, r.handle])) 41 const loginById = new Map(installRows.map(r => [r.id, r.accountLogin])) 42 43 return { 44 active: data.active, 45 accounts: data.accounts.map(a => ({ 46 did: a.did, 47 installationId: a.installationId, 48 handle: a.handle ?? handleByDid.get(a.did) ?? null, 49 accountLogin: loginById.get(a.installationId) ?? null, 50 active: a.did === data.active, 51 })), 52 } 53})