2
0
Files
bot/apps/chat-api/src/auth.ts
Baptiste Arnaud 2fcf83c529 Introduce a new high-performing standalone chat API (#1200)
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 -->
2024-03-21 10:23:23 +01:00

31 lines
869 B
TypeScript

import { env } from '@typebot.io/env'
import { mockedUser } from '@typebot.io/lib/mockedUser'
import prisma from '@typebot.io/lib/prisma'
export const getAuthenticatedUserId = async (
authorizationHeaderValue: string | undefined
): Promise<string | undefined> => {
if (env.NEXT_PUBLIC_E2E_TEST) return mockedUser.id
const bearerToken = extractBearerToken(authorizationHeaderValue)
if (!bearerToken) return
return authenticateByToken(bearerToken)
}
const authenticateByToken = async (
token: string
): Promise<string | undefined> => {
if (typeof window !== 'undefined') return
const apiToken = await prisma.apiToken.findFirst({
where: {
token,
},
select: {
ownerId: true,
},
})
return apiToken?.ownerId
}
const extractBearerToken = (authorizationHeaderValue: string | undefined) =>
authorizationHeaderValue?.slice(7)