endo-core
Version:
Put some description here
45 lines (33 loc) • 2.06 kB
text/coffeescript
RouteParser = require './route-parser'
class MessageRouter
constructor: ({, , })->
throw new Error('messagesService is required') unless ?
throw new Error('credentialsDeviceService is required') unless ?
throw new Error('meshbluConfig is required') unless ?
route: ({auth, message, route, respondTo}, callback) =>
routeParser = new RouteParser {route, serviceUuid: .uuid}
return callback () if routeParser.isBadRoute()
{credentialsUuid, userDeviceUuid, senderUuid} = routeParser.parse()
.getEndoByUuid credentialsUuid, (error, endo) =>
return {auth, senderUuid, userDeviceUuid, error, respondTo}, callback if error?
auth ?= {uuid: credentialsUuid, token: .getCredentialsTokenFromEndo(endo)}
return callback () unless auth.token?
return {auth, senderUuid, userDeviceUuid, error, respondTo}, callback if error?
.send {endo, message}, (error, response) =>
return {auth, senderUuid, userDeviceUuid, error, respondTo}, callback if error?
.reply {auth, userDeviceUuid, senderUuid, response, respondTo}, (error) =>
return {auth, senderUuid, userDeviceUuid, error, respondTo}, callback if error?
callback()
_respondWithError: ({auth, senderUuid, userDeviceUuid, error, respondTo}, callback) =>
.replyWithError {auth, senderUuid, userDeviceUuid, error, respondTo}, (newError) =>
return callback newError if newError?
callback error
_badRouteError: =>
error = new Error "Bad route"
error.code = 422
return error
_noCredentialsTokenError: =>
error = new Error "Could not find the token for the credentials device"
error.code = 422
return error
module.exports = MessageRouter