A generic binary http emitter for reusable purposes

Signed-off-by: Fabio José <fabiojose@gmail.com>
This commit is contained in:
Fabio José 2019-07-29 14:14:55 -03:00
parent f3a6dbd960
commit f355a3ccba
2 changed files with 63 additions and 39 deletions

View File

@ -0,0 +1,55 @@
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
_config[Constants.DATA_ATTRIBUTE] = cloudevent.format().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;

View File

@ -1,6 +1,8 @@
var axios = require("axios");
var empty = require("is-empty");
const BinaryHTTPEmitter = require("./emitter_binary.js");
const Constants = require("./constants.js");
const headerByGetter = {};
@ -41,48 +43,15 @@ headerByGetter["getSchemaurl"] = {
};
function HTTPBinary02(configuration){
this.config = JSON.parse(JSON.stringify(configuration));
if(!this.config["headers"]){
this.config["headers"] = {};
}
this.config["headers"]
[Constants.HEADER_CONTENT_TYPE] =
Constants.MIME_JSON + "; charset=" + Constants.CHARSET_DEFAULT;
this.emitter = new BinaryHTTPEmitter(
configuration,
headerByGetter,
Constants.BINARY_HEADERS_02.EXTENSIONS_PREFIX
);
}
HTTPBinary02.prototype.emit = function(cloudevent){
// Create new request object
var _config = JSON.parse(JSON.stringify(this.config));
// Always set stuff in _config
var _headers = _config["headers"];
Object.keys(headerByGetter)
.filter((getter) => cloudevent[getter]())
.forEach((getter) => {
let header = headerByGetter[getter];
_headers[header.name] =
header.parser(
cloudevent[getter]()
);
});
// Set the cloudevent payload
_config["data"] = cloudevent.format().data;
// Have extensions?
var exts = cloudevent.getExtensions();
Object.keys(exts)
.filter((ext) => Object.hasOwnProperty.call(exts, ext))
.forEach((ext) => {
_headers[Constants.BINARY_HEADERS_02.EXTENSIONS_PREFIX + ext] = exts[ext];
});
// Return the Promise
return axios.request(_config);
return this.emitter.emit(cloudevent);
};
module.exports = {