endo-core
Version:
Put some description here
77 lines (65 loc) • 3.26 kB
text/coffeescript
cors = require 'cors'
morgan = require 'morgan'
express = require 'express'
bodyParser = require 'body-parser'
cookieParser = require 'cookie-parser'
cookieSession = require 'cookie-session'
errorHandler = require 'errorhandler'
meshbluHealthcheck = require 'express-meshblu-healthcheck'
sendError = require 'express-send-error'
MeshbluHTTP = require 'meshblu-http'
path = require 'path'
passport = require 'passport'
favicon = require 'serve-favicon'
expressVersion = require 'express-package-version'
Router = require './router'
CredentialsDeviceService = require './services/credentials-device-service'
MessagesService = require './services/messages-service'
class Server
constructor: (options)->
{, , , , , , } = options
{, , } = options
{, , } = options
throw new Error('apiStrategy is required') unless ?
throw new Error('appOctobluHost is required') unless ?
throw new Error('deviceType is required') unless ?
throw new Error('meshbluConfig is required') unless ?
throw new Error('messageHandler is required') unless ?
throw new Error('octobluStrategy is required') unless ?
throw new Error('schemas not allowed') if ?
throw new Error('serviceUrl is required') unless ?
throw new Error('userDeviceManagerUrl is required') unless ?
address: =>
.address()
run: (callback) =>
passport.serializeUser (user, done) => done null, user
passport.deserializeUser (user, done) => done null, user
passport.use 'octoblu',
passport.use 'api',
app = express()
app.use favicon path.join(__dirname, '../favicon.ico')
app.use meshbluHealthcheck()
app.use expressVersion format: '{"version": "%s"}'
app.use morgan 'dev', immediate: false unless
app.use cors(exposedHeaders: ['Location'])
app.use errorHandler()
app.use cookieSession secret: .token
app.use cookieParser()
app.use passport.initialize()
app.use passport.session()
app.use bodyParser.urlencoded limit: '1mb', extended : true
app.use bodyParser.json limit : '1mb'
app.use sendError {}
app.options '*', cors()
meshblu = new MeshbluHTTP
meshblu.whoami (error, device) =>
throw new Error('Could not authenticate with meshblu!') if error?
{imageUrl} = device.options
credentialsDeviceService = new CredentialsDeviceService {, imageUrl, , }
messagesService = new MessagesService {, }
router = new Router {credentialsDeviceService, messagesService, , , , }
router.route app
= app.listen , callback
stop: (callback) =>
.close callback
module.exports = Server