UNPKG

apisix-client

Version:
1 lines 23.8 kB
{"version":3,"sources":["../src/client.ts","../src/admin/upstream.ts","../src/admin/validation.ts","../src/admin/route.ts","../src/admin/plugin.ts","../src/index.ts"],"sourcesContent":["import axios, { AxiosInstance, AxiosRequestConfig, Method } from 'axios';\nimport { ConnectionConfig, EtcdConnectionConfig } from '../types/client';\nimport Upstream from './admin/upstream';\nimport Route from './admin/route';\nimport Plugin from './admin/plugin';\nimport Validation from './admin/validation';\nimport { stringify } from 'qs';\nimport { Etcd3 } from 'etcd3';\n\nexport default class ApisixAdminClient {\n private connectionConfig: ConnectionConfig;\n private etcdConnectionConfig: EtcdConnectionConfig;\n private readonly client: AxiosInstance;\n public readonly etcd: Etcd3;\n\n public upstream: Upstream;\n public route: Route;\n public plugin: Plugin;\n public validation: Validation;\n\n constructor(connectionConfig: ConnectionConfig, etcdConnectionConfig: EtcdConnectionConfig) {\n this.connectionConfig = connectionConfig;\n this.etcdConnectionConfig = etcdConnectionConfig;\n this.client = axios.create(this.connectionConfig);\n this.etcd = new Etcd3(this.etcdConnectionConfig);\n\n this.upstream = new Upstream(this);\n this.route = new Route(this);\n this.plugin = new Plugin(this);\n this.validation = new Validation(this);\n }\n\n request = async <Request, Response>(method: Method, url: string, requestBody?: Request, query?: Request) => {\n const config: AxiosRequestConfig = {\n method,\n url,\n };\n if (requestBody) {\n config.data = requestBody;\n }\n if (query) {\n config.params = query;\n config.paramsSerializer = (params) => stringify(params);\n }\n return await this.client.request<Response>(config);\n };\n}\n","import { isAxiosError } from 'axios';\nimport { Upstream, UpstreamDef, UpstreamGetListRequest } from '../../types/admin/upstream';\nimport { CreateResponse, GetResponse, PaginationResponse } from '../../types/client';\nimport ApisixAdminClient from '../client';\nimport ValidationService from './validation';\n\nexport default class UpstreamService {\n private readonly client: ApisixAdminClient;\n private readonly validationService: ValidationService;\n constructor(client: ApisixAdminClient) {\n this.client = client;\n this.validationService = new ValidationService(client);\n }\n\n /**\n * Fetches specified Upstream by id.\n * @param id unique id of upstream\n * @returns {GetResponse<Upstream>}\n */\n get = async (id: string): Promise<GetResponse<Upstream>> => {\n const res = await this.client.request<null, GetResponse<Upstream>>('get', `/apisix/admin/upstreams/${id}`);\n return res.data;\n };\n\n /**\n * Fetch a list of all configured Upstreams.\n * @param id unique id of upstream\n * @param desc description of upstream\n * @param name name of upstream\n * @param page offset\n * @param page_size limit\n * @returns {PaginationResponse<GetUpstreamResponse>}\n */\n getList = async (\n id?: string,\n desc?: string,\n name?: string,\n page?: string,\n page_size?: string,\n ): Promise<PaginationResponse<GetResponse<Upstream>>> => {\n const res = await this.client.request<UpstreamGetListRequest, PaginationResponse<GetResponse<Upstream>>>(\n 'get',\n `/apisix/admin/upstreams`,\n undefined,\n {\n id,\n desc,\n name,\n page,\n page_size,\n },\n );\n\n return res.data;\n };\n\n /**\n * Creates an Upstream and assigns a random id.\n * @param config {UpstreamDef}\n * @returns {CreateResponse<Upstream>}\n */\n create = async (def: UpstreamDef, validate = false): Promise<CreateResponse<Upstream>> => {\n if (validate) {\n await this.validationService.validate('upstreams', def);\n }\n const res = await this.client.request<UpstreamDef, CreateResponse<Upstream>>(\n 'post',\n '/apisix/admin/upstreams',\n def,\n );\n\n return res.data;\n };\n\n /**\n * Creates an Upstream with the specified id.\n * @param id unique id of upstream\n * @param config {UpstreamDef}\n * @returns {CreateResponse<Upstream>}\n */\n upsert = async (id: string, config: UpstreamDef, validate = false): Promise<CreateResponse<Upstream>> => {\n if (validate) {\n await this.validationService.validate('upstreams', config);\n }\n const res = await this.client.request<UpstreamDef, CreateResponse<Upstream>>(\n 'put',\n `/apisix/admin/upstreams/${id}`,\n config,\n );\n\n return res.data;\n };\n\n /**\n * Updates the selected attributes of the specified, existing Upstream. To delete an attribute, set value of attribute set to null.\n * @param id unique id of upstream\n * @param config {UpstreamDef}\n * @returns {CreateResponse<Upstream>}\n */\n update = async (id: string, config: UpstreamDef, validate = false): Promise<CreateResponse<Upstream>> => {\n if (validate) {\n await this.validationService.validate('upstreams', config);\n }\n const res = await this.client.request<UpstreamDef, CreateResponse<Upstream>>(\n 'patch',\n `/apisix/admin/upstreams/${id}`,\n config,\n );\n\n return res.data;\n };\n\n /**\n * Updates the attribute specified in the path. The values of other attributes remain unchanged.\n * @param id unique id of upstream\n * @param path like node\n * @param config {UpstreamDef}\n * @returns {CreateResponse<Upstream>}\n */\n updateByPath = async (\n id: string,\n path: string,\n config: UpstreamDef,\n validate = false,\n ): Promise<CreateResponse<Upstream>> => {\n if (validate) {\n await this.validationService.validate('upstreams', config);\n }\n const res = await this.client.request<UpstreamDef, CreateResponse<Upstream>>(\n 'patch',\n `/apisix/admin/upstreams/${id}/${path}`,\n config,\n );\n\n return res.data;\n };\n\n /**\n * Removes the Upstream with the specified id.\n * @param id unique id of upstream\n * @returns {void}\n */\n delete = async (id: string): Promise<void> => {\n await this.client.request<void, void>('delete', `/apisix/admin/upstreams/${id}`);\n };\n\n /**\n * Is upstream exists ?\n * @param id unique id of upstream\n * @returns {boolean}\n */\n isExists = async (id: string): Promise<boolean> => {\n try {\n await this.get(id);\n return true;\n } catch (error) {\n if (isAxiosError(error) && error.status === 404) {\n return false;\n }\n throw error;\n }\n };\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { ValidationResource } from '../../types/admin/validation';\nimport ApisixAdminClient from '../client';\n\nexport default class ValidationService {\n private readonly client: ApisixAdminClient;\n constructor(client: ApisixAdminClient) {\n this.client = client;\n }\n\n validate = async (resource: ValidationResource, schema: any) => {\n const res = await this.client.request<any, any>('post', `/apisix/admin/schema/validate/${resource}`, schema);\n return res.data;\n };\n}\n","import { isAxiosError } from 'axios';\nimport { GetListRoute, Route, RouteDef } from '../../types/admin/route';\nimport { CreateResponse, GetResponse, PaginationResponse } from '../../types/client';\nimport ApisixAdminClient from '../client';\nimport ValidationService from './validation';\n\nexport default class RouteService {\n private readonly client: ApisixAdminClient;\n private readonly validationService: ValidationService;\n constructor(client: ApisixAdminClient) {\n this.client = client;\n this.validationService = new ValidationService(client);\n }\n\n private readonly isJson = (json: string): boolean => {\n try {\n JSON.parse(json);\n return true;\n } catch (error) {\n return false;\n }\n };\n\n /**\n * Fetches specified Route by id.\n * @param id\n * @returns\n */\n get = async (id: string): Promise<GetResponse<Route>> => {\n const res = await this.client.request<null, GetResponse<Route>>('get', `/apisix/admin/routes/${id}`);\n return res.data;\n };\n\n getByPath = async (path: string): Promise<PaginationResponse<GetResponse<Route>>> => {\n const res = await this.client.request<GetListRoute, PaginationResponse<GetResponse<Route>>>(\n 'get',\n `/apisix/admin/routes?uri=${path}&label=&page=1&page_size=100&host=&desc=&id=`,\n );\n return res.data;\n };\n\n /**\n * Fetches a list of all configured Routes.\n * @param name\n * @param uri\n * @param label\n * @param status\n * @param host\n * @param id\n * @param desc\n * @param page\n * @param page_size\n * @returns\n */\n getList = async (\n name?: string,\n uri?: string,\n label?: string,\n status?: string,\n host?: string,\n id?: string,\n desc?: string,\n page?: string,\n page_size?: string,\n ): Promise<PaginationResponse<GetResponse<Route>>> => {\n const res = await this.client.request<GetListRoute, PaginationResponse<GetResponse<Route>>>(\n 'get',\n `/apisix/admin/routes`,\n undefined,\n {\n name,\n uri,\n label,\n status,\n host,\n id,\n desc,\n page,\n page_size,\n },\n );\n return res.data;\n };\n\n filter = async (\n upstream_id?: string,\n name?: string,\n uri?: string,\n status?: '0' | '1',\n host?: string,\n id?: string,\n desc?: string,\n labels?: string,\n page = '1',\n page_size = '10',\n ) => {\n const bufferValues = (await this.client.etcd.getAll().prefix('/apisix/routes').exec()).kvs.filter((kv) => {\n return this.isJson(kv.value.toString('utf8'));\n });\n\n let routes = bufferValues.map((bufferValue) => {\n return {\n ...bufferValue,\n key: bufferValue.key.toString('utf8'),\n value: JSON.parse(bufferValue.value.toString('utf8')),\n };\n });\n\n for await (const route of routes) {\n const upstream_id = route.value.upstream_id;\n if (upstream_id) {\n const upstream = (await this.client.etcd.get(`/apisix/upstreams/${upstream_id}`).exec()).kvs[0];\n if (upstream) {\n const value = JSON.parse(upstream.value.toString('utf8'));\n const nodes = value.nodes;\n if (nodes) {\n route.value.upstream = value;\n }\n }\n }\n }\n\n if (name) {\n routes = routes.filter((route) => (route.value.name as string).includes(name));\n }\n if (uri) {\n routes = routes.filter((route) => (route.value.uri as string).includes(uri));\n }\n if (status) {\n routes = routes.filter((route) => route.value.status === +status);\n }\n if (id) {\n routes = routes.filter((route) => (route.value.id as string).includes(id));\n }\n if (desc) {\n routes = routes.filter((route) => (route.value.desc as string).includes(desc));\n }\n if (host) {\n routes = routes.filter(\n (route) =>\n route.value.upstream && route.value.upstream.nodes && Object.keys(route.value.upstream.nodes).includes(host),\n );\n }\n if (labels) {\n const isSearchObjJson = this.isJson(labels);\n if (isSearchObjJson) {\n const searchObj = JSON.parse(labels);\n const keysSearchObj = Object.keys(searchObj);\n routes = routes.filter((route) => {\n const sourceObj = route.value.labels;\n if (sourceObj) {\n const keysSourceObj = Object.keys(sourceObj);\n return keysSearchObj.some((key) => keysSourceObj.includes(key) && searchObj[key] === sourceObj[key]);\n }\n });\n }\n }\n if (upstream_id) {\n routes = routes.filter((route) => (route.value.upstream_id as string).includes(upstream_id));\n }\n\n return {\n list: routes\n .slice((parseInt(page) - 1) * parseInt(page_size), parseInt(page) * parseInt(page_size))\n .map((slicedRoute) => slicedRoute.value as RouteDef),\n total: routes.length,\n };\n };\n\n /**\n * Creates a Route and assigns a random id.\n * @param config\n * @returns\n */\n create = async (config: RouteDef, validate = false): Promise<CreateResponse<Route>> => {\n if (validate) {\n await this.validationService.validate('routes', config);\n }\n const res = await this.client.request<RouteDef, CreateResponse<Route>>('post', `/apisix/admin/routes`, config);\n return res.data;\n };\n\n /**\n * Creates a Route with the specified id.\n * @param id\n * @param ttl\n * @param config\n * @returns\n */\n upsert = async (id: string, config: RouteDef, ttl?: string, validate = false): Promise<CreateResponse<Route>> => {\n if (validate) {\n await this.validationService.validate('routes', config);\n }\n const res = await this.client.request<RouteDef, CreateResponse<Route>>(\n 'put',\n `/apisix/admin/routes/${id}${ttl ? `?ttl=${ttl}` : ''}`,\n config,\n );\n return res.data;\n };\n\n /**\n * Updates the selected attributes of the specified, existing Route. To delete an attribute, set value of attribute set to null.\n * @param id\n * @param config\n * @returns\n */\n update = async (id: string, config: RouteDef, validate = false): Promise<CreateResponse<Route>> => {\n if (validate) {\n await this.validationService.validate('routes', config);\n }\n const res = await this.client.request<RouteDef, CreateResponse<Route>>(\n 'patch',\n `/apisix/admin/routes/${id}`,\n config,\n );\n return res.data;\n };\n\n /**\n * Updates the attribute specified in the path. The values of other attributes remain unchanged.\n * @param id\n * @param path\n * @param config\n * @returns\n */\n updateByPath = async (\n id: string,\n path: string,\n config: RouteDef,\n validate = false,\n ): Promise<CreateResponse<Route>> => {\n if (validate) {\n await this.validationService.validate('routes', config);\n }\n const res = await this.client.request<RouteDef, CreateResponse<Route>>(\n 'patch',\n `/apisix/admin/routes/${id}/${path}`,\n config,\n );\n return res.data;\n };\n\n /**\n * Removes the Route with the specified id.\n * @param id\n */\n delete = async (id: string): Promise<void> => {\n await this.client.request<void, void>('delete', `/apisix/admin/routes/${id}`);\n };\n\n isExists = async (id: string): Promise<boolean> => {\n try {\n await this.get(id);\n return true;\n } catch (error) {\n if (isAxiosError(error) && error.response && error.response.status === 404) {\n return false;\n } else {\n throw error;\n }\n }\n };\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport ApisixAdminClient from '../client';\n\nexport default class PluginService {\n private readonly client: ApisixAdminClient;\n constructor(client: ApisixAdminClient) {\n this.client = client;\n }\n\n /**\n * Fetches a list of all Plugins.\n * @returns {PluginList}\n */\n getList = async (): Promise<string[]> => {\n const res = await this.client.request<null, string[]>('get', `/apisix/admin/plugins/list`);\n\n return res.data;\n };\n\n /**\n * Get properties for config a plugin\n * @param pluginName\n * @returns {any}\n */\n getProperties = async (pluginName: string): Promise<any> => {\n const res = await this.client.request<null, any>('get', `/apisix/admin/plugins/${pluginName}`);\n\n return res.data;\n };\n\n /**\n * Reloads the plugin according to the changes made in code\n * @returns {void}\n */\n reload = async (): Promise<void> => {\n const res = await this.client.request<null, void>('put', `/apisix/admin/plugins/reload`);\n\n return res.data;\n };\n\n isExists = async (name: string): Promise<boolean> => {\n const plugins = await this.getList();\n return plugins.indexOf(name) > -1;\n };\n}\n","import ApisixAdminClient from './client';\nexport default ApisixAdminClient;\n\nexport type * from '../types/client.d.ts';\nexport type * from '../types/admin/route.d.ts';\nexport type * from '../types/admin/upstream.d.ts';\n"],"mappings":"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","names":["isAxiosError","upstream_id","isAxiosError"]}