Closes #1154 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Added authentication functionality for user sessions in chat API. - Introduced chat-related API endpoints for starting, previewing, and continuing chat sessions, and streaming messages. - Implemented WhatsApp API webhook handling for receiving and processing messages. - Added environment variable `NEXT_PUBLIC_CHAT_API_URL` for chat API URL configuration. - **Bug Fixes** - Adjusted file upload logic to correctly determine the API host. - Fixed message streaming URL in chat integration with OpenAI. - **Documentation** - Updated guides for creating blocks, local installation, self-hosting, and deployment to use `bun` instead of `pnpm`. - **Refactor** - Refactored chat API functionalities to use modular architecture. - Simplified client log saving and session update functionalities by using external functions. - Transitioned package management and workflow commands to use `bun`. - **Chores** - Switched to `bun` for package management in Dockerfiles and GitHub workflows. - Added new Dockerfile for chat API service setup with Bun framework. - Updated `.prettierignore` and documentation with new commands. - **Style** - No visible changes to end-users. - **Tests** - No visible changes to end-users. - **Revert** - No reverts in this release. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
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.',
|
|
})
|
|
}
|
|
}
|