Monorepo for wisp.place. A static site hosting service built on top of the AT Protocol. wisp.place
96
fork

Configure Feed

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

at ad393298bc8c5e25b37e68d6ec20cf5674053864 38 lines 1.1 kB view raw
1import { Did } from "@atproto/api"; 2import { NodeOAuthClient } from "@atproto/oauth-client-node"; 3import type { OAuthSession } from "@atproto/oauth-client-node"; 4import { Cookie } from "elysia"; 5import { logger } from "./logger"; 6 7 8export interface AuthenticatedContext { 9 did: Did; 10 session: OAuthSession; 11} 12 13export const authenticateRequest = async ( 14 client: NodeOAuthClient, 15 cookies: Record<string, Cookie<unknown>> 16): Promise<AuthenticatedContext | null> => { 17 try { 18 const did = cookies.did?.value as Did; 19 if (!did) return null; 20 21 const session = await client.restore(did, "auto"); 22 return session ? { did, session } : null; 23 } catch (err) { 24 logger.error('[Auth] Authentication error', err); 25 return null; 26 } 27}; 28 29export const requireAuth = async ( 30 client: NodeOAuthClient, 31 cookies: Record<string, Cookie<unknown>> 32): Promise<AuthenticatedContext> => { 33 const auth = await authenticateRequest(client, cookies); 34 if (!auth) { 35 throw new Error('Authentication required'); 36 } 37 return auth; 38};