mirror of
https://github.com/Unleash/unleash.git
synced 2024-11-01 19:07:38 +01:00
40 lines
990 B
JavaScript
40 lines
990 B
JavaScript
|
'use strict';
|
||
|
|
||
|
const Mustache = require('mustache');
|
||
|
const Addon = require('./addon');
|
||
|
const definition = require('./webhook-definition');
|
||
|
|
||
|
class Webhook extends Addon {
|
||
|
constructor(args) {
|
||
|
super(definition, args);
|
||
|
}
|
||
|
|
||
|
async handleEvent(event, parameters) {
|
||
|
const { url, bodyTemplate, contentType } = parameters;
|
||
|
const context = {
|
||
|
event,
|
||
|
};
|
||
|
|
||
|
let body;
|
||
|
|
||
|
if (typeof bodyTemplate === 'string' && bodyTemplate.length > 1) {
|
||
|
body = Mustache.render(bodyTemplate, context);
|
||
|
} else {
|
||
|
body = JSON.stringify(event);
|
||
|
}
|
||
|
|
||
|
const requestOpts = {
|
||
|
method: 'POST',
|
||
|
headers: { 'Content-Type': contentType || 'application/json' },
|
||
|
body,
|
||
|
};
|
||
|
const res = await this.fetchRetry(url, requestOpts);
|
||
|
|
||
|
this.logger.info(
|
||
|
`Handled event "${event.type}". Status code: ${res.status}`,
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = Webhook;
|