import { inputObjectType, mutationField, arg, objectType } from '@nexus/schema'; import { AuthenticationError } from 'apollo-server-micro'; import { generateJWT } from '../../../server/authentication/authenticate'; import { User } from '../../../app/user'; export const SessionType = objectType({ name: 'Session', definition: t => { t.string('token'); }, }); export const LoginUserIputType = inputObjectType({ name: 'LoginUserInput', definition(t) { t.string('email', { required: true }); t.string('password', { required: true }); }, }); /** * Fetch a single Recipe */ export const loginUserMF = mutationField('login', { type: 'Session', args: { input: arg({ type: LoginUserIputType }), }, resolve: async (root, args, ctx, info) => { const { email, password } = args.input; const user = await User.findOne({ email }); if (!user || !user.isValidPassword(password)) { throw new AuthenticationError( 'Incorrect username / passowrd combination' ); } const token = await generateJWT(user); return { token }; }, });