import { sqlWrapper } from "../../core/db.ts"; export async function getActiveSessions(userId: string) { const sessions = await sqlWrapper.sql` SELECT id, label, is_agent, custom_scopes, last_activity_at, last_activity_action, created_at, expires_at FROM sessions WHERE user_id = ${userId} AND expires_at > NOW() ORDER BY created_at DESC `; return sessions; } export async function delegateSession( sessionId: string, userId: string, label: string, customScopes: string[], expiresAt: Date, ) { await sqlWrapper.sql` INSERT INTO sessions (id, user_id, label, is_agent, custom_scopes, expires_at, created_at) VALUES (${sessionId}, ${userId}, ${label}, true, ${customScopes}, ${expiresAt.toISOString()}, NOW()) `; } export async function getSessionByIdAndUserId( sessionId: string, userId: string, ) { const session = await sqlWrapper.sql` SELECT id, is_agent, expires_at FROM sessions WHERE id = ${sessionId} AND user_id = ${userId} `; if (!session || session.length === 0) return null; return session[0]; } export async function updateSessionScopes( sessionId: string, customScopes: string[], ) { await sqlWrapper.sql` UPDATE sessions SET custom_scopes = ${customScopes} WHERE id = ${sessionId} `; } export async function getSessionById(sessionId: string) { const session = await sqlWrapper.sql` SELECT id FROM sessions WHERE id = ${sessionId} `; if (!session || session.length === 0) return null; return session[0]; } export async function setSessionPaused(sessionId: string, isPaused: boolean) { await sqlWrapper.sql` UPDATE sessions SET is_paused = ${isPaused} WHERE id = ${sessionId} `; } export async function extendSessionExpiry(sessionId: string, newExpiry: Date) { await sqlWrapper.sql` UPDATE sessions SET expires_at = ${newExpiry.toISOString()} WHERE id = ${sessionId} `; } export async function revokeSession(sessionId: string) { await sqlWrapper.sql`DELETE FROM sessions WHERE id = ${sessionId}`; } export async function getSessionWithOwnershipCheck( sessionId: string, userId: string, isAdmin: boolean, ) { const session = await sqlWrapper.sql` SELECT s.id FROM sessions s JOIN users u ON s.user_id = u.id WHERE s.id = ${sessionId} AND ( s.user_id = ${userId} OR ${isAdmin} OR EXISTS ( SELECT 1 FROM event_passes ep WHERE ep.created_by = ${userId} AND u.event_pass_id = ep.id ) ) `; if (!session || session.length === 0) return null; return session[0]; }