import { IdentityContext } from '@app/server/identity'; import { prisma } from '@app/server/prisma/client'; import { MutationLoginArgs, Session } from '@generated/types'; import bcrypt from 'bcrypt'; import jwt from 'jsonwebtoken'; export async function LoginResolver( _: any, { input }: MutationLoginArgs, { req, res, identity }: IdentityContext ): Promise { const error = 'Invalid password or email'; const user = await prisma.user.findUnique({ where: { email: input.email } }); if (user == null) throw new Error(error); const match = await bcrypt.compare(input.password, user.password); if (!match) throw new Error(error); const accessTokenSecret = process.env.ACCESS_TOKEN_SECRET; const refreshTokenSecret = process.env.REFRESH_TOKEN_SECRET; if (accessTokenSecret == null || refreshTokenSecret == null) throw new Error('No secrets found'); const accessToken = jwt.sign({ userId: user.id }, accessTokenSecret, { expiresIn: '30s' }); const refreshToken = jwt.sign({ userId: user.id }, refreshTokenSecret, { expiresIn: '1d' }); await prisma.user.update({ where: { id: user.id }, data: { refreshToken } }); res.cookie('jwt', refreshToken, { httpOnly: true, sameSite: 'none', secure: true, maxAge: 24 * 60 * 60 * 1000 }); return { accessToken // refreshToken: { // token: refreshToken, // httpOnly: true, // secure: true, // maxAge: 24 * 60 * 60 * 1000, // sameSite: 'None' // } }; }