sdk-javascript/lib/bindings/http/emitter_binary.js

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;