A generic binary http emitter for reusable purposes
Signed-off-by: Fabio José <fabiojose@gmail.com>
This commit is contained in:
parent
f3a6dbd960
commit
f355a3ccba
|
@ -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;
|
|
@ -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 = {
|
||||
|
|
Loading…
Reference in New Issue