1 | _ = require 'lodash'
|
2 | MeshbluAuthParser = require '../helpers/meshblu-auth-parser'
|
3 |
|
4 | class JobToHttp
|
5 | constructor: () ->
|
6 | @authParser = new MeshbluAuthParser
|
7 |
|
8 | httpToJob: ({jobType, request, toUuid, data}) ->
|
9 | data ?= request.body
|
10 | userMetadata = @getMetadataFromHeaders request.headers
|
11 |
|
12 | auth = @authParser.parse request
|
13 | systemMetadata =
|
14 | auth: auth
|
15 | fromUuid: request.get('x-meshblu-as') ? auth.uuid
|
16 | toUuid: toUuid
|
17 | jobType: jobType
|
18 |
|
19 | job =
|
20 | metadata: _.extend userMetadata, systemMetadata
|
21 | data: data
|
22 |
|
23 | job
|
24 |
|
25 | getMetadataFromHeaders: (headers) =>
|
26 | _.transform headers, (newMetadata, value, header) =>
|
27 | return unless _.startsWith header, 'x-meshblu-'
|
28 | key = _.camelCase( _.replace(header, "x-meshblu-", '' ))
|
29 | newMetadata[key] = value
|
30 |
|
31 | metadataToHeaders: (metadata) =>
|
32 | headers = {}
|
33 | _.each metadata, (value, key) =>
|
34 | header = "x-meshblu-#{_.kebabCase(key)}"
|
35 | _.set headers, header, value
|
36 | headers
|
37 |
|
38 | sendJobResponse: ({jobResponse, res}) ->
|
39 | return res.sendStatus(500) unless jobResponse?
|
40 | res.set @metadataToHeaders(jobResponse.metadata)
|
41 |
|
42 | return res.sendStatus jobResponse.metadata.code unless jobResponse.rawData?
|
43 |
|
44 | res.status(jobResponse.metadata.code).send JSON.parse(jobResponse.rawData)
|
45 |
|
46 | module.exports = JobToHttp
|