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 axios = require("axios");
|
||||||
var empty = require("is-empty");
|
var empty = require("is-empty");
|
||||||
|
|
||||||
|
const BinaryHTTPEmitter = require("./emitter_binary.js");
|
||||||
|
|
||||||
const Constants = require("./constants.js");
|
const Constants = require("./constants.js");
|
||||||
|
|
||||||
const headerByGetter = {};
|
const headerByGetter = {};
|
||||||
|
@ -41,48 +43,15 @@ headerByGetter["getSchemaurl"] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
function HTTPBinary02(configuration){
|
function HTTPBinary02(configuration){
|
||||||
this.config = JSON.parse(JSON.stringify(configuration));
|
this.emitter = new BinaryHTTPEmitter(
|
||||||
|
configuration,
|
||||||
if(!this.config["headers"]){
|
headerByGetter,
|
||||||
this.config["headers"] = {};
|
Constants.BINARY_HEADERS_02.EXTENSIONS_PREFIX
|
||||||
}
|
);
|
||||||
|
|
||||||
this.config["headers"]
|
|
||||||
[Constants.HEADER_CONTENT_TYPE] =
|
|
||||||
Constants.MIME_JSON + "; charset=" + Constants.CHARSET_DEFAULT;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HTTPBinary02.prototype.emit = function(cloudevent){
|
HTTPBinary02.prototype.emit = function(cloudevent){
|
||||||
|
return this.emitter.emit(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);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
|
Loading…
Reference in New Issue