api.tsx 13 KB

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