UNPKG

@veecode-platform/plugin-kong-service-manager

Version:

300 lines (297 loc) 9.28 kB
import { PluginsInfoData } from '../data/data.esm.js'; import { GitManager } from './GitManager.esm.js'; class Client { config; fetchApi; gitManager; constructor(opts) { this.config = opts.config; this.fetchApi = opts.fetchApi; this.gitManager = new GitManager(opts.scmAuthApi, opts.config); } async fetch(input, init) { const apiUrl = `${this.config.getString("backend.baseUrl")}/api/kong`; const resp = await this.fetchApi.fetch(`${apiUrl}${input}`, { ...init }); if (!resp.ok) { throw new Error( `[${resp.type}] Request failed with ${resp.status} - ${resp.statusText}` ); } if (resp.status === 204) return { message: "deleted" }; return await resp.json(); } } class KongServiceManagerApiClient extends Client { async getServiceInfo(instanceName, serviceName) { const response = await this.fetch( `/${instanceName}/services/${serviceName}` ); return response.service; } async getEnabledPlugins(instanceName, serviceName, searchFilter) { const response = await this.fetch(`/${instanceName}/plugins`); const availablePluginsResponse = response.plugins; let availablePluginsList = availablePluginsResponse; if (searchFilter !== "" && searchFilter) { availablePluginsList = availablePluginsResponse.filter( (plugin) => plugin.toLowerCase().includes(searchFilter.toLowerCase()) ); } const associatedPluginsList = await this.getServiceAssociatedPlugins( instanceName, serviceName ); const mapedEnabledPluginsList = await Promise.all( PluginsInfoData.categories.map(async (category) => { const plugins = await Promise.all( category.plugins.map(async (categoryPlugin) => { const filteredPluginMatch = availablePluginsList.find( (availablePlugin) => availablePlugin === categoryPlugin.slug ); if (!filteredPluginMatch) return null; const filteredAssocietedPluginMatch = associatedPluginsList.find( (associatedPlugin) => associatedPlugin.name === categoryPlugin.slug ); return { id: filteredAssocietedPluginMatch?.id ?? null, name: categoryPlugin.name, slug: categoryPlugin.slug, associated: filteredAssocietedPluginMatch?.enabled ?? false, tags: categoryPlugin.tags, description: categoryPlugin.description }; }) ); return { category: category.category, plugins: plugins.filter((plugin) => plugin !== null) }; }) ); return mapedEnabledPluginsList; } async getEnabledRoutePlugins(instanceName, routeId, searchFilter) { const response = await this.fetch(`/${instanceName}/plugins`); const availablePluginsResponse = response.plugins; let availablePluginsList = availablePluginsResponse; if (searchFilter !== "" && searchFilter) { availablePluginsList = availablePluginsResponse.filter( (plugin) => plugin.toLowerCase().includes(searchFilter.toLowerCase()) ); } const associatedPluginsList = await this.getRouteAssociatedPlugins( instanceName, routeId ); const mapedEnabledPluginsList = await Promise.all( PluginsInfoData.categories.map(async (category) => { const plugins = await Promise.all( category.plugins.map(async (categoryPlugin) => { const filteredPluginMatch = availablePluginsList.find( (availablePlugin) => availablePlugin === categoryPlugin.slug ); if (!filteredPluginMatch) return null; const filteredAssocietedPluginMatch = associatedPluginsList.find( (associatedPlugin) => associatedPlugin.name === categoryPlugin.slug ); return { id: filteredAssocietedPluginMatch?.id ?? null, name: categoryPlugin.name, slug: categoryPlugin.slug, associated: filteredAssocietedPluginMatch?.enabled ?? false, tags: categoryPlugin.tags, description: categoryPlugin.description }; }) ); return { category: category.category, plugins: plugins.filter((plugin) => plugin !== null) }; }) ); return mapedEnabledPluginsList; } async getPluginFields(instanceName, pluginName) { const response = await this.fetch( `/${instanceName}/services/plugins/${pluginName}/fields` ); return response.fields; } async getServiceAssociatedPlugins(instanceName, serviceName) { const response = await this.fetch( `/${instanceName}/services/${serviceName}/plugins/associated` ); return response.plugins; } async createServicePlugin(instanceName, serviceName, config) { const body = { config }; const headers = { method: "POST", body: JSON.stringify(body), headers: { "Content-Type": "application/json" } }; const response = await this.fetch( `/${instanceName}/services/${serviceName}/plugins`, headers ); return response; } async editServicePlugin(instanceName, serviceName, pluginId, config) { const body = { ...config }; const headers = { method: "PATCH", body: JSON.stringify(body), headers: { "Content-Type": "application/json" } }; const response = await this.fetch( `/${instanceName}/services/${serviceName}/plugins/${pluginId}`, headers ); return response; } async removeServicePlugin(instanceName, serviceName, pluginId) { const headers = { method: "DELETE" }; const response = await this.fetch( `/${instanceName}/services/${serviceName}/plugins/${pluginId}`, headers ); return response.message; } async getRoutesFromService(instanceName, serviceName) { const response = await this.fetch( `/${instanceName}/services/${serviceName}/routes` ); return response.routes; } async getRouteFromService(instanceName, serviceName, routeId) { const response = await this.fetch( `/${instanceName}/services/${serviceName}/routes/${routeId}` ); return response.route; } async createRouteFromService(instanceName, serviceName, config) { const body = { config }; const headers = { method: "POST", body: JSON.stringify(body), headers: { "Content-Type": "application/json" } }; const response = await this.fetch( `/${instanceName}/services/${serviceName}/routes`, headers ); return response.route; } async editRouteFromService(instanceName, serviceName, routeId, config) { const body = { config }; const headers = { method: "PATCH", body: JSON.stringify(body), headers: { "Content-Type": "application/json" } }; const response = await this.fetch( `/${instanceName}/services/${serviceName}/routes/${routeId}`, headers ); return response; } async removeRouteFromService(instanceName, serviceName, routeId) { const headers = { method: "DELETE" }; const response = await this.fetch( `/${instanceName}/services/${serviceName}/routes/${routeId}`, headers ); return response.message; } async getRouteAssociatedPlugins(instanceName, routeId) { const response = await this.fetch( `/${instanceName}/routes/${routeId}/plugins/associated` ); return response.plugins; } async addRoutePlugin(instanceName, routeId, config) { const body = { config }; const headers = { method: "POST", body: JSON.stringify(body), headers: { "Content-Type": "application/json" } }; const response = await this.fetch( `/${instanceName}/routes/${routeId}/plugins`, headers ); return response; } async editRoutePlugin(instanceName, routeId, pluginId, config) { const body = { ...config }; const headers = { method: "PATCH", body: JSON.stringify(body), headers: { "Content-Type": "application/json" } }; const response = await this.fetch( `/${instanceName}/routes/${routeId}/plugins/${pluginId}`, headers ); return response; } async removeRoutePlugin(instanceName, routeId, pluginId) { const headers = { method: "DELETE" }; const response = await this.fetch( `/${instanceName}/routes/${routeId}/plugins/${pluginId}`, headers ); return response.message; } async getAllSpecs(location, filePath) { return this.gitManager.getContentSpec(location, filePath); } async getPluginsFromSpec(entityName) { const response = await this.fetch(`/spec/${entityName}/plugins`); return response.plugins; } async applyPluginsToSpec(specName, location, fileContent, title, message) { return this.gitManager.createPullRequest( specName, location, fileContent, title, message ); } } export { KongServiceManagerApiClient }; //# sourceMappingURL=KongServiceManagerClient.esm.js.map