skull-island
Version:
A tool for diffable Kong configuration
56 lines (45 loc) • 1.79 kB
JavaScript
;
const {prop, has} = require('ramda');
module.exports = function kongPlugins(connectionContext) {
const {retrievalAdminRequest, createOrUpdateAdminRequest, deleteAdminRequest} = connectionContext;
function plugin(apiId) {
const configuration = {qs: {api_id: apiId}};
return retrievalAdminRequest('plugins', configuration).then(prop('data'));
}
function plugins(batchSize = 10) {
return retrievalAdminRequest('plugins', {qs: {size: batchSize}}).then(prop('data'));
}
async function createOrUpdatePlugin(pluginData) {
function updatePlugin(pluginPath, pluginData) {
return createOrUpdateAdminRequest(pluginPath, pluginData);
}
function createPlugin(pluginPath, pluginData) {
return createOrUpdateAdminRequest(pluginPath, pluginData, {method: 'POST'});
}
const hasApiId = has('api_id');
// check if this is a global plugin or a it's for a certain API
if (hasApiId(pluginData)) {
const pluginPath = `apis/${pluginData.api_id}/plugins`;
const result = await updatePlugin(pluginPath, pluginData);
if (!result) {
return createPlugin(pluginPath, pluginData);
} else return result;
} else {
// global plugin
const pluginPath = `plugins`;
const result = await updatePlugin(pluginPath, pluginData);
if (!result) {
return createPlugin(pluginPath, pluginData);
} else return result;
}
}
function removePlugin(pluginId) {
return deleteAdminRequest('plugins', pluginId);
}
return {
plugin,
plugins,
createOrUpdatePlugin,
removePlugin
};
};