1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
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,
};
|