api.tsx 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434
  1. import axios from 'axios';
  2. import { baseApi } from './baseApi';
  3. import { StorageType } from './types';
  4. /**
  5. * Generic api call format
  6. * @param {string} token - Bearer token.
  7. * @param {Object} params - Body params.
  8. * @param {Object} pathParams - Path params.
  9. * @param {(err: Object, res: Object) => void} callback - Callback function.
  10. */
  11. const checkAuth = baseApi('GET', '/api/auth/check');
  12. const registerUser = baseApi<{
  13. email: string,
  14. password: string
  15. }>('POST', '/api/users');
  16. const logInUser = baseApi<{
  17. email: string,
  18. password: string
  19. }>('POST', '/api/login');
  20. const logOutUser = baseApi('POST', '/api/logout');
  21. const getUser = baseApi<{}, { id: number }>('GET', pathParams => {
  22. return `/api/users/${pathParams.id}`;
  23. });
  24. const updateUser = baseApi<{
  25. rawKubeConfig?: string,
  26. allowedContexts?: string[]
  27. }, { id: number }>('PUT', pathParams => {
  28. return `/api/users/${pathParams.id}`;
  29. });
  30. const getClusters = baseApi<{}, { id: number }>('GET', pathParams => {
  31. return `/api/projects/${pathParams.id}/clusters`;
  32. });
  33. const getCharts = baseApi<{
  34. namespace: string,
  35. cluster_id: number,
  36. storage: StorageType,
  37. limit: number,
  38. skip: number,
  39. byDate: boolean,
  40. statusFilter: string[]
  41. }, { id: number }>('GET', pathParams => {
  42. return `/api/projects/${pathParams.id}/releases`;
  43. });
  44. const getChart = baseApi<{
  45. namespace: string,
  46. cluster_id: number,
  47. storage: StorageType
  48. }, { id: number, name: string, revision: number }>('GET', pathParams => {
  49. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/${pathParams.revision}`;
  50. });
  51. const getChartComponents = baseApi<{
  52. namespace: string,
  53. cluster_id: number,
  54. storage: StorageType
  55. }, { id: number, name: string, revision: number }>('GET', pathParams => {
  56. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/${pathParams.revision}/components`;
  57. });
  58. const getChartControllers = baseApi<{
  59. namespace: string,
  60. cluster_id: number,
  61. storage: StorageType
  62. }, { id: number, name: string, revision: number }>('GET', pathParams => {
  63. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/${pathParams.revision}/controllers`;
  64. });
  65. const getNamespaces = baseApi<{
  66. cluster_id: number,
  67. }, { id: number }>('GET', pathParams => {
  68. return `/api/projects/${pathParams.id}/k8s/namespaces`;
  69. });
  70. const getMatchingPods = baseApi<{
  71. cluster_id: number,
  72. selectors: string[]
  73. }, { id: number }>('GET', pathParams => {
  74. return `/api/projects/${pathParams.id}/k8s/pods`;
  75. });
  76. const getIngress = baseApi<{
  77. cluster_id: number,
  78. }, { name: string, namespace: string, id: number }>('GET', pathParams => {
  79. return `/api/projects/${pathParams.id}/k8s/${pathParams.namespace}/ingress/${pathParams.name}`;
  80. });
  81. const getInvites = baseApi<{}, { id: number }>('GET', pathParams => {
  82. return `/api/projects/${pathParams.id}/invites`;
  83. });
  84. const getRevisions = baseApi<{
  85. namespace: string,
  86. cluster_id: number,
  87. storage: StorageType
  88. }, { id: number, name: string }>('GET', pathParams => {
  89. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/history`;
  90. });
  91. const rollbackChart = baseApi<{
  92. namespace: string,
  93. storage: StorageType,
  94. revision: number
  95. }, {
  96. id: number,
  97. name: string,
  98. cluster_id: number,
  99. }>('POST', pathParams => {
  100. let { id, name, cluster_id } = pathParams;
  101. return `/api/projects/${id}/releases/${name}/rollback?cluster_id=${cluster_id}`;
  102. });
  103. const upgradeChartValues = baseApi<{
  104. namespace: string,
  105. storage: StorageType,
  106. values: string
  107. }, {
  108. id: number,
  109. name: string,
  110. cluster_id: number,
  111. }>('POST', pathParams => {
  112. let { id, name, cluster_id } = pathParams;
  113. return `/api/projects/${id}/releases/${name}/upgrade?cluster_id=${cluster_id}`;
  114. });
  115. const getTemplates = baseApi('GET', '/api/templates');
  116. const getTemplateInfo = baseApi<{}, { name: string, version: string }>('GET', pathParams => {
  117. return `/api/templates/${pathParams.name}/${pathParams.version}`;
  118. });
  119. const getRepos = baseApi<{}, { id: number }>('GET', pathParams => {
  120. return `/api/projects/${pathParams.id}/repos`;
  121. });
  122. const getBranches = baseApi<{}, { kind: string, repo: string }>('GET', pathParams => {
  123. return `/api/repos/${pathParams.kind}/${pathParams.repo}/branches`;
  124. });
  125. const getBranchContents = baseApi<{
  126. dir: string
  127. }, {
  128. kind: string,
  129. repo: string,
  130. branch: string
  131. }>('GET', pathParams => {
  132. return `/api/repos/github/${pathParams.repo}/${pathParams.branch}/contents`;
  133. });
  134. const getProjects = baseApi<{}, { id: number }>('GET', pathParams => {
  135. return `/api/users/${pathParams.id}/projects`;
  136. });
  137. const getReleaseToken = baseApi<{
  138. namespace: string,
  139. cluster_id: number,
  140. storage: StorageType,
  141. }, { name: string, id: number }>('GET', pathParams => {
  142. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/webhook_token`;
  143. });
  144. const createProject = baseApi<{ name: string }, {}>('POST', pathParams => {
  145. return `/api/projects`;
  146. });
  147. const deleteProject = baseApi<{}, { id: number }>('DELETE', pathParams => {
  148. return `/api/projects/${pathParams.id}`;
  149. });
  150. const deleteInvite = baseApi<{}, { id: number, invId: number }>('DELETE', pathParams => {
  151. return `/api/projects/${pathParams.id}/invites/${pathParams.invId}`;
  152. });
  153. const deployTemplate = baseApi<{
  154. templateName: string,
  155. imageURL?: string,
  156. formValues?: any,
  157. storage: StorageType,
  158. namespace: string,
  159. name: string,
  160. }, {
  161. id: number,
  162. cluster_id: number,
  163. name: string,
  164. version: string
  165. }>('POST', pathParams => {
  166. let { cluster_id, id, name, version } = pathParams;
  167. return `/api/projects/${id}/deploy/${name}/${version}?cluster_id=${cluster_id}`;
  168. });
  169. const uninstallTemplate = baseApi<{
  170. }, {
  171. id: number,
  172. name: string,
  173. cluster_id: number,
  174. namespace: string,
  175. storage: StorageType,
  176. }>('POST', pathParams => {
  177. let { id, name, cluster_id, storage, namespace } = pathParams;
  178. return `/api/projects/${id}/deploy/${name}?cluster_id=${cluster_id}&namespace=${namespace}&storage=${storage}`;
  179. });
  180. const getClusterIntegrations = baseApi('GET', '/api/integrations/cluster');
  181. const getRegistryIntegrations = baseApi('GET', '/api/integrations/registry');
  182. const getRepoIntegrations = baseApi('GET', '/api/integrations/repo');
  183. const getProjectClusters = baseApi<{}, { id: number }>('GET', pathParams => {
  184. return `/api/projects/${pathParams.id}/clusters`;
  185. });
  186. const getProjectRegistries = baseApi<{}, { id: number }>('GET', pathParams => {
  187. return `/api/projects/${pathParams.id}/registries`;
  188. });
  189. const getProjectRepos = baseApi<{}, { id: number }>('GET', pathParams => {
  190. return `/api/projects/${pathParams.id}/repos`;
  191. });
  192. const createAWSIntegration = baseApi<{
  193. aws_region: string,
  194. aws_cluster_id?: string,
  195. aws_access_key_id: string,
  196. aws_secret_access_key: string,
  197. }, { id: number }>('POST', pathParams => {
  198. return `/api/projects/${pathParams.id}/integrations/aws`;
  199. });
  200. const provisionECR = baseApi<{
  201. ecr_name: string,
  202. aws_integration_id: string,
  203. }, { id: number }>('POST', pathParams => {
  204. return `/api/projects/${pathParams.id}/provision/ecr`;
  205. });
  206. const provisionEKS = baseApi<{
  207. eks_name: string,
  208. aws_integration_id: string,
  209. }, { id: number }>('POST', pathParams => {
  210. return `/api/projects/${pathParams.id}/provision/eks`;
  211. });
  212. const createECR = baseApi<{
  213. name: string,
  214. aws_integration_id: string,
  215. }, { id: number }>('POST', pathParams => {
  216. return `/api/projects/${pathParams.id}/registries`;
  217. });
  218. const getImageRepos = baseApi<{
  219. }, {
  220. project_id: number,
  221. registry_id: number
  222. }>('GET', pathParams => {
  223. return `/api/projects/${pathParams.project_id}/registries/${pathParams.registry_id}/repositories`;
  224. });
  225. const getImageTags = baseApi<{
  226. }, {
  227. project_id: number,
  228. registry_id: number,
  229. repo_name: string,
  230. }>('GET', pathParams => {
  231. return `/api/projects/${pathParams.project_id}/registries/${pathParams.registry_id}/repositories/${pathParams.repo_name}`;
  232. });
  233. const linkGithubProject = baseApi<{
  234. }, {
  235. project_id: number,
  236. }>('GET', pathParams => {
  237. return `/api/oauth/projects/${pathParams.project_id}/github`;
  238. });
  239. const getGitRepos = baseApi<{
  240. }, {
  241. project_id: number,
  242. }>('GET', pathParams => {
  243. return `/api/projects/${pathParams.project_id}/gitrepos`;
  244. });
  245. const getInfra = baseApi<{
  246. }, {
  247. project_id: number,
  248. }>('GET', pathParams => {
  249. return `/api/projects/${pathParams.project_id}/infra`;
  250. });
  251. const destroyCluster = baseApi<{
  252. eks_name: string,
  253. }, {
  254. project_id: number,
  255. infra_id: number,
  256. }>('POST', pathParams => {
  257. return `/api/projects/${pathParams.project_id}/infra/${pathParams.infra_id}/eks/destroy`;
  258. });
  259. const deleteCluster = baseApi<{
  260. }, {
  261. project_id: number,
  262. cluster_id: number,
  263. }>('DELETE', pathParams => {
  264. return `/api/projects/${pathParams.project_id}/clusters/${pathParams.cluster_id}`;
  265. });
  266. const createGCPIntegration = baseApi<{
  267. gcp_region: string,
  268. gcp_key_data: string,
  269. gcp_project_id: string,
  270. }, {
  271. project_id: number,
  272. }>('POST', pathParams => {
  273. return `/api/projects/${pathParams.project_id}/integrations/gcp`;
  274. });
  275. const createGCR = baseApi<{
  276. gcp_integration_id: number,
  277. }, {
  278. project_id: number,
  279. }>('POST', pathParams => {
  280. return `/api/projects/${pathParams.project_id}/provision/gcr`;
  281. });
  282. const createGKE = baseApi<{
  283. gcp_integration_id: number,
  284. gke_name: string,
  285. }, {
  286. project_id: number,
  287. }>('POST', pathParams => {
  288. return `/api/projects/${pathParams.project_id}/provision/gke`;
  289. });
  290. const createInvite = baseApi<{
  291. email: string
  292. }, {
  293. id: number
  294. }>('POST', pathParams => {
  295. return `/api/projects/${pathParams.id}/invites`;
  296. });
  297. const getOAuthIds = baseApi<{
  298. }, {
  299. project_id: number,
  300. }>('GET', pathParams => {
  301. return `/api/projects/${pathParams.project_id}/integrations/oauth`;
  302. });
  303. const createDOCR = baseApi<{
  304. do_integration_id: number,
  305. docr_name: string,
  306. docr_subscription_tier: string,
  307. }, {
  308. project_id: number,
  309. }>('POST', pathParams => {
  310. return `/api/projects/${pathParams.project_id}/provision/docr`;
  311. });
  312. const createDOKS = baseApi<{
  313. do_integration_id: number,
  314. doks_name: string,
  315. do_region: string,
  316. }, {
  317. project_id: number,
  318. }>('POST', pathParams => {
  319. return `/api/projects/${pathParams.project_id}/provision/doks`;
  320. });
  321. // Bundle export to allow default api import (api.<method> is more readable)
  322. export default {
  323. createDOKS,
  324. createDOCR,
  325. getOAuthIds,
  326. checkAuth,
  327. createAWSIntegration,
  328. createECR,
  329. createGCPIntegration,
  330. createGCR,
  331. createGKE,
  332. createInvite,
  333. createProject,
  334. deleteCluster,
  335. deleteInvite,
  336. deleteProject,
  337. deployTemplate,
  338. destroyCluster,
  339. getBranchContents,
  340. getBranches,
  341. getChart,
  342. getCharts,
  343. getChartComponents,
  344. getChartControllers,
  345. getClusterIntegrations,
  346. getClusters,
  347. getGitRepos,
  348. getImageRepos,
  349. getImageTags,
  350. getInfra,
  351. getIngress,
  352. getInvites,
  353. getMatchingPods,
  354. getNamespaces,
  355. getProjectClusters,
  356. getProjectRegistries,
  357. getProjectRepos,
  358. getProjects,
  359. getRegistryIntegrations,
  360. getReleaseToken,
  361. getRepoIntegrations,
  362. getRepos,
  363. getRevisions,
  364. getTemplateInfo,
  365. getTemplates,
  366. getUser,
  367. linkGithubProject,
  368. logInUser,
  369. logOutUser,
  370. provisionECR,
  371. provisionEKS,
  372. registerUser,
  373. rollbackChart,
  374. uninstallTemplate,
  375. updateUser,
  376. upgradeChartValues,
  377. }