60 lines
1.6 KiB
JavaScript
60 lines
1.6 KiB
JavaScript
var axios = require("axios");
|
|
var empty = require("is-empty");
|
|
|
|
const Constants = require("./constants.js");
|
|
|
|
function BinaryHTTPEmitter(config, headerByGetter, extensionPrefix){
|
|
this.config = JSON.parse(JSON.stringify(config));
|
|
this.headerByGetter = headerByGetter;
|
|
this.extensionPrefix = extensionPrefix;
|
|
|
|
this.config[Constants.HEADERS] =
|
|
(!this.config[Constants.HEADERS]
|
|
? {}
|
|
: this.config[Constants.HEADERS]);
|
|
|
|
// default is json
|
|
if(!this.config[Constants.HEADERS][Constants.HEADER_CONTENT_TYPE]){
|
|
this.config[Constants.HEADERS][Constants.HEADER_CONTENT_TYPE] =
|
|
Constants.DEFAULT_CONTENT_TYPE;
|
|
}
|
|
}
|
|
|
|
BinaryHTTPEmitter.prototype.emit = function(cloudevent) {
|
|
// Create new request object
|
|
var _config = JSON.parse(JSON.stringify(this.config));
|
|
|
|
// Always set stuff in _config
|
|
var _headers = _config[Constants.HEADERS];
|
|
|
|
Object.keys(this.headerByGetter)
|
|
.filter((getter) => cloudevent[getter]())
|
|
.forEach((getter) => {
|
|
let header = this.headerByGetter[getter];
|
|
_headers[header.name] =
|
|
header.parser(
|
|
cloudevent[getter]()
|
|
);
|
|
});
|
|
|
|
// Set the cloudevent payload
|
|
let formatted = cloudevent.format();
|
|
let data = formatted.data;
|
|
data = (formatted.data_base64 ? formatted.data_base64: data);
|
|
|
|
_config[Constants.DATA_ATTRIBUTE] = data;
|
|
|
|
// Have extensions?
|
|
var exts = cloudevent.getExtensions();
|
|
Object.keys(exts)
|
|
.filter((ext) => Object.hasOwnProperty.call(exts, ext))
|
|
.forEach((ext) => {
|
|
_headers[this.extensionPrefix + ext] = exts[ext];
|
|
});
|
|
|
|
// Return the Promise
|
|
return axios.request(_config);
|
|
};
|
|
|
|
module.exports = BinaryHTTPEmitter;
|