Scratch space for learning atproto app development
1'use server' 2 3import assert from 'node:assert' 4import type { IncomingMessage, ServerResponse } from 'node:http' 5import { getIronSession } from 'iron-session' 6import { env } from '#/env' 7 8export type Session = { did: string } 9 10export async function createSession(req: IncomingMessage, res: ServerResponse<IncomingMessage>, did: string) { 11 const session = await getSessionRaw(req, res) 12 assert(!session.did, 'session already exists') 13 session.did = did 14 await session.save() 15 return { did: session.did } 16} 17 18export async function destroySession(req: IncomingMessage, res: ServerResponse<IncomingMessage>) { 19 const session = await getSessionRaw(req, res) 20 await session.destroy() 21 return null 22} 23 24export async function getSession(req: IncomingMessage, res: ServerResponse<IncomingMessage>) { 25 const session = await getSessionRaw(req, res) 26 if (!session.did) return null 27 return { did: session.did } 28} 29 30async function getSessionRaw(req: IncomingMessage, res: ServerResponse<IncomingMessage>) { 31 return await getIronSession<Session>(req, res, { 32 cookieName: 'sid', 33 password: env.COOKIE_SECRET, 34 }) 35}