const path = require('path'); const config = require('../config'); const packageJSON = require('../package.json'); const logger = require('./logger'); const blinkstick = require('./blinkstick'); const parser = require('./parser.js'); const express = require('express'); const favicon = require('serve-favicon'); const bodyparser = require('body-parser'); const app = express(); app.use(favicon(path.join(path.dirname(__dirname), 'public', 'favicon.ico'))); app.use(bodyparser.json()); app.use(bodyparser.urlencoded({extended: true})); const MODE_SET = require('./blinkstick.js').MODE_SET; const MODE_MORPH = require('./blinkstick.js').MODE_MORPH; const MODE_BLINK = require('./blinkstick.js').MODE_BLINK; const MODE_PULSE = require('./blinkstick.js').MODE_PULSE; const MODE_POWEROFF = require('./blinkstick.js').MODE_POWEROFF; const html = require('./index.js').get(); // run the express http server and handle gets/posts function start() { return new Promise(function (resolve, reject) { app.listen(config.server.port, config.server.listen) .on('listening', function () { return resolve('server listening on ' + config.server.listen + ':' + config.server.port + '...') }) .on('error', function (err) { return reject('error starting server (' + err + ')'); }); }); } async function handleRequests() { // GET html page app.get('*', (request, response) => { logger.http(request); response.send(html); response.end(); }); // POST '/set' app.post('/' + MODE_SET, (request, response) => { logger.http(request); blinkstick.simple(parser.parseRequest(request.body, MODE_SET)) .then((result) => { response.end(JSON.stringify(result)); }) .catch((err) => { response.status(500); response.end({status: 'error', error: err}); }); }); // POST '/morph' app.post('/' + MODE_MORPH, (request, response) => { logger.http(request); blinkstick.simple(parser.parseRequest(request.body, MODE_MORPH)) .then((result) => { response.end(JSON.stringify(result)); }) .catch((err) => { response.status(500); response.end({status: 'error', error: err}); }); }); // POST '/blink' app.post('/' + MODE_BLINK, (request, response) => { logger.http(request); const config = parser.parseRequest(request.body, MODE_BLINK); if (blinkstick.isInfiniteAnimation(config)) { response.end(JSON.stringify({status: 'ok'})); response = undefined; } blinkstick.complex(config) .then((result) => { if (response === undefined) { return; } response.end(JSON.stringify(result)); }) .catch((err) => { if (response === undefined) { return; } response.status(500); response.end({status: 'error', error: err}); }); }); // POST '/pulse' app.post('/' + MODE_PULSE, (request, response) => { logger.http(request); const config = parser.parseRequest(request.body, MODE_PULSE); if (blinkstick.isInfiniteAnimation(config)) { response.end(JSON.stringify({status: 'ok'})); response = undefined; } blinkstick.complex(config) .then((result) => { if (response === undefined) { return; } response.end(JSON.stringify(result)); }) .catch((err) => { if (response === undefined) { return; } response.status(500); response.end({status: 'error', error: err}); }); }); // POST '/poweroff' app.post('/' + MODE_POWEROFF, (request, response) => { logger.http(request); blinkstick.powerOff(parser.parseRequest(request.body, MODE_POWEROFF)) .then((result) => { response.end(JSON.stringify(result)); }) .catch((err) => { response.status(500); response.end({status: 'error', error: err}); }); }); } function checkForInfiniteAnimation(response, config) { } // exports module.exports = { start, handleRequests };