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 222f054f4e3c3cc3a252cec9dc747ffee501cc6f 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};