wuffle
Version:
A multi-repository task board for GitHub issues
61 lines (51 loc) • 1.09 kB
JavaScript
/**
* @constructor
*
* @param {import('../../types.js').ProbotApp} app
* @param {import('../github-app/GithubApp.js').default} githubApp
*/
export default function WebhookEvents(app, githubApp) {
/**
* @template {Function} T
* @param {T} fn
*/
function ifEnabled(fn) {
return async (context) => {
const {
payload
} = context;
const {
installation
} = payload;
if (installation) {
const enabled = await githubApp.isInstallationEnabled(installation);
if (!enabled) {
return;
}
}
return fn(context);
};
}
/**
* Register a event lister for a single
* or a number of webhook events.
*
* @param {any|any[]} events
* @param {Function} fn listener
*/
function on(events, fn) {
app.on(events, ifEnabled(fn));
}
/**
* Register an event listener for all
* webhook events.
*
* @param {Function} fn
*/
function onAny(fn) {
app.onAny(ifEnabled(fn));
}
// api /////////////////
this.on = on;
this.onAny = onAny;
}