endo-core
Version:
Put some description here
55 lines (40 loc) • 2.44 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)}
auth = auth
return callback () unless auth.token?
return {auth, senderUuid, userDeviceUuid, error, respondTo}, callback if error?
._handleRefreshToken {credentialsUuid, endo, userDeviceUuid}, (error, endo) =>
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()
_cleanAuth: (auth) =>
auth.bearerToken = null if auth.uuid? && auth.token?
return auth
_respondWithError: ({auth, senderUuid, userDeviceUuid, error, respondTo}, callback) =>
auth = auth
.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