Some checks failed
build-and-deploy / build-and-deploy (push) Failing after 13s
57 lines
1.5 KiB
TypeScript
57 lines
1.5 KiB
TypeScript
/**
|
|
* POST /api/messages/:instanceId/:chatId/send
|
|
* Send a message to a chat (from UI)
|
|
*/
|
|
import { query } from '../../../../utils/database'
|
|
import { baileysManager } from '../../../../services/baileys/manager'
|
|
|
|
interface SendMessageBody {
|
|
content?: string
|
|
message?: string
|
|
}
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const username = getHeader(event, 'x-authentik-username')
|
|
if (!username) {
|
|
throw createError({ statusCode: 401, message: 'Unauthorized' })
|
|
}
|
|
|
|
const instanceId = getRouterParam(event, 'instanceId')
|
|
const chatId = getRouterParam(event, 'chatId')
|
|
const body = await readBody<SendMessageBody>(event)
|
|
|
|
// Accept both 'content' and 'message' fields
|
|
const messageText = body.content || body.message
|
|
if (!messageText?.trim()) {
|
|
throw createError({ statusCode: 400, message: 'Message content is required' })
|
|
}
|
|
|
|
// Get chat JID
|
|
const chatResult = await query<{ jid: string }>(
|
|
'SELECT jid FROM chats WHERE id = $1 AND instance_id = $2',
|
|
[chatId, instanceId]
|
|
)
|
|
|
|
if (chatResult.rows.length === 0) {
|
|
throw createError({ statusCode: 404, message: 'Chat not found' })
|
|
}
|
|
|
|
const jid = chatResult.rows[0].jid
|
|
|
|
try {
|
|
const result = await baileysManager.sendMessage(instanceId!, jid, {
|
|
text: messageText
|
|
})
|
|
|
|
return {
|
|
success: true,
|
|
messageId: result.key.id
|
|
}
|
|
} catch (error) {
|
|
throw createError({
|
|
statusCode: 500,
|
|
message: `Failed to send message: ${(error as Error).message}`
|
|
})
|
|
}
|
|
})
|