import { stringify } from 'querystring'; import camelcaseKeys from 'camelcase-keys'; import snakecaseKeys from 'snakecase-keys'; import { FieldResolver, mutationField, arg } from '@nexus/schema'; import { discourseClient } from '../../client'; import { CONTENT_FORM_URLENCODED } from '../../constants'; import { errorHandler, getCsrfSession, getHpChallenge } from '../../helpers'; export let registerMutationResolver: FieldResolver< 'Mutation', 'register' > = async (_, { registerInput }, __) => { try { let csrfSession = await getCsrfSession(); let { cookies, ...hpChallenge } = await getHpChallenge(csrfSession); const config = { headers: { withCredentials: true, Cookie: cookies, 'x-csrf-token': csrfSession.csrf, 'Content-Type': CONTENT_FORM_URLENCODED, }, }; let snakecaseBody = snakecaseKeys({ ...registerInput, ...hpChallenge }); let { data } = await discourseClient.post( '/users.json', stringify(snakecaseBody), config, ); if (data.user_id) { return camelcaseKeys(data, { deep: true }); } return { success: false, message: `Registration is unavailable.` }; } catch (error) { errorHandler(error); } }; export let registerMutation = mutationField('register', { type: 'RegisterOutput', args: { registerInput: arg({ type: 'RegisterInput' }), }, resolve: registerMutationResolver, });