This commit is contained in:
2026-02-16 22:03:40 +03:00
commit d632bf0f40
16 changed files with 772 additions and 0 deletions

64
src/handles.ts Normal file
View File

@@ -0,0 +1,64 @@
import { HttpStatusCodes } from './constants.ts'
import type { LoginDto, WebSocketData } from './types/types.ts'
import { createAccessToken, verifyAccessToken } from './utils/jwt.ts'
import { grpcClient } from './grpc/client.ts'
import { config } from './config.ts'
export async function loginRequest(req: Request) {
try {
const body: LoginDto = await req.json()
const versionResponse = await grpcClient.getVersion({})
console.log(versionResponse.data)
const { email } = body
if (!email) return Response.json({ message: 'email required' }, { status: HttpStatusCodes.BAD_REQUEST })
const userResponse = await grpcClient.getUserByEmail({ email: 'vadim.olonin@gmail.com' })
const user = userResponse.data
if (!user) return Response.json({ message: 'Invalid email or password' }, { status: HttpStatusCodes.NOT_FOUND })
const accessToken = await createAccessToken(user.id, user.email)
const expires = new Date(Date.now() + config.cookieExpiry * 1000)
const sessionCookie = new Bun.Cookie('token', accessToken.token, {
path: '/',
expires: expires,
// maxAge: config.cookieExpiry,
httpOnly: true,
// secure: true,
sameSite: 'strict',
})
return Response.json(
{
accessToken: accessToken.token,
tokenType: 'Bearer',
expires: expires,
},
{ status: HttpStatusCodes.CREATED, headers: { 'Set-Cookie': sessionCookie.toString() } },
)
} catch (error) {
console.log({ error })
return Response.json({ message: 'Login failed' }, { status: HttpStatusCodes.BAD_REQUEST })
}
}
export async function wsRequest(req: Request, server: Bun.Server<WebSocketData>) {
try {
const cookieHeader = req.headers.get('cookie') ?? ''
const cookies = new Bun.CookieMap(cookieHeader)
const token = cookies.get('token')
if (!token) return Response.json({ message: 'Invalid token' }, { status: HttpStatusCodes.NOT_FOUND })
const payload = await verifyAccessToken(token)
const success = server.upgrade(req, { data: { userId: +payload.sub } })
if (success) return undefined
return new Response('Upgrade failed', { status: HttpStatusCodes.INTERNAL_SERVER_ERROR })
} catch (error) {
console.log(error)
return new Response('Upgrade failed', { status: HttpStatusCodes.INTERNAL_SERVER_ERROR })
}
}