Files
jambonz-feature-server/lib/utils/notifiers.js
2020-01-29 15:27:20 -05:00

52 lines
1.4 KiB
JavaScript

const request = require('request');
require('request-debug')(request);
const retrieveApp = require('./retrieve-app');
function hooks(logger, callInfo) {
function actionHook(hook, obj, expectResponse = true) {
const method = hook.method.toUpperCase();
const auth = (hook.username && hook.password) ?
{username: hook.username, password: hook.password} :
null;
const data = Object.assign({}, obj, callInfo);
if ('GET' === method) {
// remove customer data - only for POSTs since it might be quite complex
delete data.customerData;
}
const opts = {
url: hook.url,
method,
json: 'POST' === method || expectResponse
};
if (auth) obj.auth = auth;
if ('POST' === method) obj.body = data;
else obj.qs = data;
return new Promise((resolve, reject) => {
request(opts, (err, response, body) => {
if (err) {
logger.info(`actionHook error ${method} ${hook.url}: ${err.message}`);
return reject(err);
}
if (body && expectResponse) {
logger.debug(body, `actionHook response ${method} ${hook.url}`);
return resolve(retrieveApp(logger, body));
}
resolve(body);
});
});
}
function notifyHook(url, method, auth, opts = {}) {
return actionHook(url, method, auth, opts, false);
}
return {
actionHook,
notifyHook
};
}
module.exports = hooks;