import type { SignupEndpoint } from '.' const MoltinGateway = require('@moltin/sdk').gateway const Moltin = MoltinGateway({ client_id: process.env.NEXT_PUBLIC_ELASTICPATH_CLIENTID, client_secret: process.env.ELASTICPATH_SECRET }) const signup: SignupEndpoint['handlers']['signup'] = async ({ res, body: { firstName, lastName, email, password }, config, commerce, }) => { // TODO: Add proper validations with something like Ajv if (!(firstName && lastName && email && password)) { return res.status(400).json({ data: null, errors: [{ message: 'Invalid request' }], }) } // TODO: validate the firstname, lastname, password and email // Passwords must be at least 7 characters and contain both alphabetic // and numeric characters. const customer = { type: 'customer', name: firstName + lastName, email: email, password: password } try { let customerAPI = await Moltin.Customers.Create(customer) return res.status(200).json(customerAPI); } catch (error) { let errorData = error.errors[0]; // Check if the email and password didn't match an existing account if (errorData.status == 409) { return res.status(401).json({ data: null, errors: [ { message: 'Account not created. Please try again', code: 'invalid_credentials', }, ], }) } throw error } } export default signup