import { SessionStore } from '../../sqlite/SessionStore.js'; import { logger } from '../../../utils/logger.js'; /** * Validates user prompt privacy for session operations * * Centralizes privacy checks to avoid duplicate validation logic across route handlers. * If user prompt was entirely private (stripped to empty string), we skip processing. */ export class PrivacyCheckValidator { /** * Check if user prompt is public (not entirely private) * * @param store - SessionStore instance * @param contentSessionId - Claude session ID * @param promptNumber - Prompt number within session * @param operationType - Type of operation being validated ('observation' or 'summarize') * @returns User prompt text if public, null if private */ static checkUserPromptPrivacy( store: SessionStore, contentSessionId: string, promptNumber: number, operationType: 'observation' | 'summarize', sessionDbId: number, additionalContext?: Record ): string | null { const userPrompt = store.getUserPrompt(contentSessionId, promptNumber); if (!userPrompt || userPrompt.trim() === '') { logger.debug('HOOK', `Skipping ${operationType} - user prompt was entirely private`, { sessionId: sessionDbId, promptNumber, ...additionalContext }); return null; } return userPrompt; } }