summaryrefslogtreecommitdiff
path: root/lambda-calcul/javascript/src/client.js
blob: 08b967d27246df3474d0bd26ba8604671690537a (plain)
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
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 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,
    solve,
    start,
    unregister,
  };
};

module.exports = {
  newClient,
};