/** * POST /api/debug/chat/modify * Modify chat state (archive, mute, mark read, pin) */ import { baileysManager } from '../../../services/baileys/manager' type ModificationType = 'archive' | 'mute' | 'markRead' | 'pin' export default defineEventHandler(async (event) => { const username = getHeader(event, 'x-authentik-username') if (!username) { throw createError({ statusCode: 401, message: 'Unauthorized' }) } const body = await readBody(event) const { instanceId, jid, type, value, lastMessages } = body as { instanceId: string jid: string type: ModificationType value: boolean | number | null lastMessages?: any[] } if (!instanceId) { throw createError({ statusCode: 400, message: 'instanceId is required' }) } if (!jid) { throw createError({ statusCode: 400, message: 'jid is required' }) } const validTypes: ModificationType[] = ['archive', 'mute', 'markRead', 'pin'] if (!type || !validTypes.includes(type)) { throw createError({ statusCode: 400, message: `type must be one of: ${validTypes.join(', ')}` }) } if (value === undefined) { throw createError({ statusCode: 400, message: 'value is required' }) } const socket = baileysManager.getSocket(instanceId) if (!socket) { throw createError({ statusCode: 400, message: 'Instance not connected' }) } try { let modification: any switch (type) { case 'archive': modification = { archive: value, lastMessages: lastMessages || [] } break case 'mute': // value should be timestamp for mute duration, null to unmute modification = { mute: value } break case 'markRead': modification = { markRead: value, lastMessages: lastMessages || [] } break case 'pin': modification = { pin: value } break } await socket.chatModify(modification, jid) return { success: true, message: `Chat ${type} modified successfully` } } catch (error) { throw createError({ statusCode: 500, message: `Failed to modify chat: ${(error as Error).message}` }) } })