const axios = require('axios'); const defaultInterpreter = require('./interpreter'); const defaultParser = require('./parser'); const defaultPrinter = require('./printer'); const newClient = ({ challengerURL, interpreter = defaultInterpreter, parser = defaultParser, playerName, printer = defaultPrinter, }) => { const nextChallenge = (token) => axios ({ url: `${challengerURL}/api/challenge?token=${token}`, }) .then(({ data: { expr } }) => expr); const postSolution = (token, solution) => axios({ method: 'POST', url: `${challengerURL}/api/challenge?token=${token}`, headers: { 'Content-Type': 'application/json;charset=utf-8' }, data: solution, }); const solve = (challenge) => { const parsedExpression = parser.parse(challenge); const evaluatedExpression = interpreter.evaluate(parsedExpression); return printer.print(evaluatedExpression); }; const start = () => axios({ method: 'POST', url: `${challengerURL}/api/register`, headers: { 'Content-Type': 'application/json;charset=utf-8' }, data: playerName, }) .then(({ data }) => data); const unregister = (token) => axios({ method: 'DELETE', url: `${challengerURL}/api/register?token=${token}`, }); return { nextChallenge, postSolution, solve, start, unregister, }; }; module.exports = { newClient, };