50 lines
1.1 KiB
TypeScript
50 lines
1.1 KiB
TypeScript
|
|
import { TRPCError } from '@trpc/server'
|
||
|
|
import { ChatLog } from '@typebot.io/schemas'
|
||
|
|
import { formatLogDetails } from '../logs/helpers/formatLogDetails'
|
||
|
|
import { getSession } from '../queries/getSession'
|
||
|
|
import { saveLogs } from '../queries/saveLogs'
|
||
|
|
|
||
|
|
type Props = {
|
||
|
|
sessionId: string
|
||
|
|
clientLogs: ChatLog[]
|
||
|
|
}
|
||
|
|
|
||
|
|
export const saveClientLogs = async ({ sessionId, clientLogs }: Props) => {
|
||
|
|
const session = await getSession(sessionId)
|
||
|
|
|
||
|
|
if (!session) {
|
||
|
|
throw new TRPCError({
|
||
|
|
code: 'NOT_FOUND',
|
||
|
|
message: 'Session not found.',
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
const resultId = session.state.typebotsQueue[0].resultId
|
||
|
|
|
||
|
|
if (!resultId) {
|
||
|
|
throw new TRPCError({
|
||
|
|
code: 'NOT_FOUND',
|
||
|
|
message: 'Result not found.',
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
try {
|
||
|
|
await saveLogs(
|
||
|
|
clientLogs.map((log) => ({
|
||
|
|
...log,
|
||
|
|
resultId,
|
||
|
|
details: formatLogDetails(log.details),
|
||
|
|
}))
|
||
|
|
)
|
||
|
|
return {
|
||
|
|
message: 'Logs successfully saved.',
|
||
|
|
}
|
||
|
|
} catch (e) {
|
||
|
|
console.error('Failed to save logs', e)
|
||
|
|
throw new TRPCError({
|
||
|
|
code: 'INTERNAL_SERVER_ERROR',
|
||
|
|
message: 'Failed to save logs.',
|
||
|
|
})
|
||
|
|
}
|
||
|
|
}
|