api.tsx 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652
  1. import { baseApi } from "./baseApi";
  2. import { StorageType } from "./types";
  3. /**
  4. * Generic api call format
  5. * @param {string} token - Bearer token.
  6. * @param {Object} params - Body params.
  7. * @param {Object} pathParams - Path params.
  8. * @param {(err: Object, res: Object) => void} callback - Callback function.
  9. */
  10. const checkAuth = baseApi("GET", "/api/auth/check");
  11. const connectECRRegistry = baseApi<
  12. {
  13. name: string;
  14. aws_integration_id: string;
  15. },
  16. { id: number }
  17. >("POST", pathParams => {
  18. return `/api/projects/${pathParams.id}/registries`;
  19. });
  20. const connectGCRRegistry = baseApi<
  21. {
  22. name: string;
  23. gcp_integration_id: string;
  24. url: string;
  25. },
  26. { id: number }
  27. >("POST", pathParams => {
  28. return `/api/projects/${pathParams.id}/registries`;
  29. });
  30. const createAWSIntegration = baseApi<
  31. {
  32. aws_region: string;
  33. aws_cluster_id?: string;
  34. aws_access_key_id: string;
  35. aws_secret_access_key: string;
  36. },
  37. { id: number }
  38. >("POST", pathParams => {
  39. return `/api/projects/${pathParams.id}/integrations/aws`;
  40. });
  41. const createDOCR = baseApi<
  42. {
  43. do_integration_id: number;
  44. docr_name: string;
  45. docr_subscription_tier: string;
  46. },
  47. {
  48. project_id: number;
  49. }
  50. >("POST", pathParams => {
  51. return `/api/projects/${pathParams.project_id}/provision/docr`;
  52. });
  53. const createDOKS = baseApi<
  54. {
  55. do_integration_id: number;
  56. doks_name: string;
  57. do_region: string;
  58. },
  59. {
  60. project_id: number;
  61. }
  62. >("POST", pathParams => {
  63. return `/api/projects/${pathParams.project_id}/provision/doks`;
  64. });
  65. const createGCPIntegration = baseApi<
  66. {
  67. gcp_region: string;
  68. gcp_key_data: string;
  69. gcp_project_id: string;
  70. },
  71. {
  72. project_id: number;
  73. }
  74. >("POST", pathParams => {
  75. return `/api/projects/${pathParams.project_id}/integrations/gcp`;
  76. });
  77. const createGCR = baseApi<
  78. {
  79. gcp_integration_id: number;
  80. },
  81. {
  82. project_id: number;
  83. }
  84. >("POST", pathParams => {
  85. return `/api/projects/${pathParams.project_id}/provision/gcr`;
  86. });
  87. const createGHAction = baseApi<
  88. {
  89. git_repo: string;
  90. registry_id: number;
  91. image_repo_uri: string;
  92. dockerfile_path: string;
  93. folder_path: string;
  94. git_repo_id: number;
  95. env: any;
  96. },
  97. {
  98. project_id: number;
  99. CLUSTER_ID: number;
  100. RELEASE_NAME: string;
  101. RELEASE_NAMESPACE: string;
  102. }
  103. >("POST", pathParams => {
  104. let { project_id, CLUSTER_ID, RELEASE_NAME, RELEASE_NAMESPACE } = pathParams;
  105. return `/api/projects/${project_id}/ci/actions?cluster_id=${CLUSTER_ID}&name=${RELEASE_NAME}&namespace=${RELEASE_NAMESPACE}`;
  106. });
  107. const createGKE = baseApi<
  108. {
  109. gcp_integration_id: number;
  110. gke_name: string;
  111. },
  112. {
  113. project_id: number;
  114. }
  115. >("POST", pathParams => {
  116. return `/api/projects/${pathParams.project_id}/provision/gke`;
  117. });
  118. const createInvite = baseApi<
  119. {
  120. email: string;
  121. },
  122. {
  123. id: number;
  124. }
  125. >("POST", pathParams => {
  126. return `/api/projects/${pathParams.id}/invites`;
  127. });
  128. const createProject = baseApi<{ name: string }, {}>("POST", pathParams => {
  129. return `/api/projects`;
  130. });
  131. const deleteCluster = baseApi<
  132. {},
  133. {
  134. project_id: number;
  135. cluster_id: number;
  136. }
  137. >("DELETE", pathParams => {
  138. return `/api/projects/${pathParams.project_id}/clusters/${pathParams.cluster_id}`;
  139. });
  140. const deleteInvite = baseApi<{}, { id: number; invId: number }>(
  141. "DELETE",
  142. pathParams => {
  143. return `/api/projects/${pathParams.id}/invites/${pathParams.invId}`;
  144. }
  145. );
  146. const deleteProject = baseApi<{}, { id: number }>("DELETE", pathParams => {
  147. return `/api/projects/${pathParams.id}`;
  148. });
  149. const deployTemplate = baseApi<
  150. {
  151. templateName: string;
  152. imageURL?: string;
  153. formValues?: any;
  154. storage: StorageType;
  155. namespace: string;
  156. name: string;
  157. },
  158. {
  159. id: number;
  160. cluster_id: number;
  161. name: string;
  162. version: string;
  163. }
  164. >("POST", pathParams => {
  165. let { cluster_id, id, name, version } = pathParams;
  166. return `/api/projects/${id}/deploy/${name}/${version}?cluster_id=${cluster_id}`;
  167. });
  168. const destroyCluster = baseApi<
  169. {
  170. eks_name: string;
  171. },
  172. {
  173. project_id: number;
  174. infra_id: number;
  175. }
  176. >("POST", pathParams => {
  177. return `/api/projects/${pathParams.project_id}/infra/${pathParams.infra_id}/eks/destroy`;
  178. });
  179. const getBranchContents = baseApi<
  180. {
  181. dir: string;
  182. },
  183. {
  184. project_id: number;
  185. git_repo_id: number;
  186. kind: string;
  187. owner: string;
  188. name: string;
  189. branch: string;
  190. }
  191. >("GET", pathParams => {
  192. return `/api/projects/${pathParams.project_id}/gitrepos/${pathParams.git_repo_id}/repos/${pathParams.kind}/${pathParams.owner}/${pathParams.name}/${pathParams.branch}/contents`;
  193. });
  194. const getBranches = baseApi<
  195. {},
  196. {
  197. project_id: number;
  198. git_repo_id: number;
  199. kind: string;
  200. owner: string;
  201. name: string;
  202. }
  203. >("GET", pathParams => {
  204. return `/api/projects/${pathParams.project_id}/gitrepos/${pathParams.git_repo_id}/repos/${pathParams.kind}/${pathParams.owner}/${pathParams.name}/branches`;
  205. });
  206. const getChart = baseApi<
  207. {
  208. namespace: string;
  209. cluster_id: number;
  210. storage: StorageType;
  211. },
  212. { id: number; name: string; revision: number }
  213. >("GET", pathParams => {
  214. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/${pathParams.revision}`;
  215. });
  216. const getCharts = baseApi<
  217. {
  218. namespace: string;
  219. cluster_id: number;
  220. storage: StorageType;
  221. limit: number;
  222. skip: number;
  223. byDate: boolean;
  224. statusFilter: string[];
  225. },
  226. { id: number }
  227. >("GET", pathParams => {
  228. return `/api/projects/${pathParams.id}/releases`;
  229. });
  230. const getChartComponents = baseApi<
  231. {
  232. namespace: string;
  233. cluster_id: number;
  234. storage: StorageType;
  235. },
  236. { id: number; name: string; revision: number }
  237. >("GET", pathParams => {
  238. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/${pathParams.revision}/components`;
  239. });
  240. const getChartControllers = baseApi<
  241. {
  242. namespace: string;
  243. cluster_id: number;
  244. storage: StorageType;
  245. },
  246. { id: number; name: string; revision: number }
  247. >("GET", pathParams => {
  248. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/${pathParams.revision}/controllers`;
  249. });
  250. const getClusterIntegrations = baseApi("GET", "/api/integrations/cluster");
  251. const getClusters = baseApi<{}, { id: number }>("GET", pathParams => {
  252. return `/api/projects/${pathParams.id}/clusters`;
  253. });
  254. const getGitRepoList = baseApi<
  255. {},
  256. {
  257. project_id: number;
  258. git_repo_id: number;
  259. }
  260. >("GET", pathParams => {
  261. return `/api/projects/${pathParams.project_id}/gitrepos/${pathParams.git_repo_id}/repos`;
  262. });
  263. const getGitRepos = baseApi<
  264. {},
  265. {
  266. project_id: number;
  267. }
  268. >("GET", pathParams => {
  269. return `/api/projects/${pathParams.project_id}/gitrepos`;
  270. });
  271. const getImageRepos = baseApi<
  272. {},
  273. {
  274. project_id: number;
  275. registry_id: number;
  276. }
  277. >("GET", pathParams => {
  278. return `/api/projects/${pathParams.project_id}/registries/${pathParams.registry_id}/repositories`;
  279. });
  280. const getImageTags = baseApi<
  281. {},
  282. {
  283. project_id: number;
  284. registry_id: number;
  285. repo_name: string;
  286. }
  287. >("GET", pathParams => {
  288. return `/api/projects/${pathParams.project_id}/registries/${pathParams.registry_id}/repositories/${pathParams.repo_name}`;
  289. });
  290. const getInfra = baseApi<
  291. {},
  292. {
  293. project_id: number;
  294. }
  295. >("GET", pathParams => {
  296. return `/api/projects/${pathParams.project_id}/infra`;
  297. });
  298. const getIngress = baseApi<
  299. {
  300. cluster_id: number;
  301. },
  302. { name: string; namespace: string; id: number }
  303. >("GET", pathParams => {
  304. return `/api/projects/${pathParams.id}/k8s/${pathParams.namespace}/ingress/${pathParams.name}`;
  305. });
  306. const getInvites = baseApi<{}, { id: number }>("GET", pathParams => {
  307. return `/api/projects/${pathParams.id}/invites`;
  308. });
  309. const getMatchingPods = baseApi<
  310. {
  311. cluster_id: number;
  312. selectors: string[];
  313. },
  314. { id: number }
  315. >("GET", pathParams => {
  316. return `/api/projects/${pathParams.id}/k8s/pods`;
  317. });
  318. const getMetrics = baseApi<
  319. {
  320. cluster_id: number;
  321. metric: string;
  322. shouldsum: boolean;
  323. pods: string[];
  324. namespace: string;
  325. startrange: number;
  326. endrange: number;
  327. resolution: string;
  328. },
  329. { id: number }
  330. >("GET", pathParams => {
  331. return `/api/projects/${pathParams.id}/k8s/metrics`;
  332. });
  333. const getNamespaces = baseApi<
  334. {
  335. cluster_id: number;
  336. },
  337. { id: number }
  338. >("GET", pathParams => {
  339. return `/api/projects/${pathParams.id}/k8s/namespaces`;
  340. });
  341. const getOAuthIds = baseApi<
  342. {},
  343. {
  344. project_id: number;
  345. }
  346. >("GET", pathParams => {
  347. return `/api/projects/${pathParams.project_id}/integrations/oauth`;
  348. });
  349. const getProjectClusters = baseApi<{}, { id: number }>("GET", pathParams => {
  350. return `/api/projects/${pathParams.id}/clusters`;
  351. });
  352. const getProjectRegistries = baseApi<{}, { id: number }>("GET", pathParams => {
  353. return `/api/projects/${pathParams.id}/registries`;
  354. });
  355. const getProjectRepos = baseApi<{}, { id: number }>("GET", pathParams => {
  356. return `/api/projects/${pathParams.id}/repos`;
  357. });
  358. const getProjects = baseApi<{}, { id: number }>("GET", pathParams => {
  359. return `/api/users/${pathParams.id}/projects`;
  360. });
  361. const getPrometheusIsInstalled = baseApi<
  362. {
  363. cluster_id: number;
  364. },
  365. { id: number }
  366. >("GET", pathParams => {
  367. return `/api/projects/${pathParams.id}/k8s/prometheus/detect`;
  368. });
  369. const getRegistryIntegrations = baseApi("GET", "/api/integrations/registry");
  370. const getReleaseToken = baseApi<
  371. {
  372. namespace: string;
  373. cluster_id: number;
  374. storage: StorageType;
  375. },
  376. { name: string; id: number }
  377. >("GET", pathParams => {
  378. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/webhook_token`;
  379. });
  380. const destroyEKS = baseApi<
  381. {
  382. eks_name: string;
  383. },
  384. {
  385. project_id: number;
  386. infra_id: number;
  387. }
  388. >("POST", pathParams => {
  389. return `/api/projects/${pathParams.project_id}/infra/${pathParams.infra_id}/eks/destroy`;
  390. });
  391. const destroyGKE = baseApi<
  392. {
  393. gke_name: string;
  394. },
  395. {
  396. project_id: number;
  397. infra_id: number;
  398. }
  399. >("POST", pathParams => {
  400. return `/api/projects/${pathParams.project_id}/infra/${pathParams.infra_id}/gke/destroy`;
  401. });
  402. const destroyDOKS = baseApi<
  403. {
  404. doks_name: string;
  405. },
  406. {
  407. project_id: number;
  408. infra_id: number;
  409. }
  410. >("POST", pathParams => {
  411. return `/api/projects/${pathParams.project_id}/infra/${pathParams.infra_id}/doks/destroy`;
  412. });
  413. const getRepoIntegrations = baseApi("GET", "/api/integrations/repo");
  414. const getRepos = baseApi<{}, { id: number }>("GET", pathParams => {
  415. return `/api/projects/${pathParams.id}/repos`;
  416. });
  417. const getRevisions = baseApi<
  418. {
  419. namespace: string;
  420. cluster_id: number;
  421. storage: StorageType;
  422. },
  423. { id: number; name: string }
  424. >("GET", pathParams => {
  425. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/history`;
  426. });
  427. const getTemplateInfo = baseApi<{}, { name: string; version: string }>(
  428. "GET",
  429. pathParams => {
  430. return `/api/templates/${pathParams.name}/${pathParams.version}`;
  431. }
  432. );
  433. const getTemplates = baseApi("GET", "/api/templates");
  434. const getUser = baseApi<{}, { id: number }>("GET", pathParams => {
  435. return `/api/users/${pathParams.id}`;
  436. });
  437. const linkGithubProject = baseApi<
  438. {},
  439. {
  440. project_id: number;
  441. }
  442. >("GET", pathParams => {
  443. return `/api/oauth/projects/${pathParams.project_id}/github`;
  444. });
  445. const logInUser = baseApi<{
  446. email: string;
  447. password: string;
  448. }>("POST", "/api/login");
  449. const logOutUser = baseApi("POST", "/api/logout");
  450. const provisionECR = baseApi<
  451. {
  452. ecr_name: string;
  453. aws_integration_id: string;
  454. },
  455. { id: number }
  456. >("POST", pathParams => {
  457. return `/api/projects/${pathParams.id}/provision/ecr`;
  458. });
  459. const provisionEKS = baseApi<
  460. {
  461. eks_name: string;
  462. aws_integration_id: string;
  463. },
  464. { id: number }
  465. >("POST", pathParams => {
  466. return `/api/projects/${pathParams.id}/provision/eks`;
  467. });
  468. const registerUser = baseApi<{
  469. email: string;
  470. password: string;
  471. }>("POST", "/api/users");
  472. const rollbackChart = baseApi<
  473. {
  474. namespace: string;
  475. storage: StorageType;
  476. revision: number;
  477. },
  478. {
  479. id: number;
  480. name: string;
  481. cluster_id: number;
  482. }
  483. >("POST", pathParams => {
  484. let { id, name, cluster_id } = pathParams;
  485. return `/api/projects/${id}/releases/${name}/rollback?cluster_id=${cluster_id}`;
  486. });
  487. const uninstallTemplate = baseApi<
  488. {},
  489. {
  490. id: number;
  491. name: string;
  492. cluster_id: number;
  493. namespace: string;
  494. storage: StorageType;
  495. }
  496. >("POST", pathParams => {
  497. let { id, name, cluster_id, storage, namespace } = pathParams;
  498. return `/api/projects/${id}/deploy/${name}?cluster_id=${cluster_id}&namespace=${namespace}&storage=${storage}`;
  499. });
  500. const updateUser = baseApi<
  501. {
  502. rawKubeConfig?: string;
  503. allowedContexts?: string[];
  504. },
  505. { id: number }
  506. >("PUT", pathParams => {
  507. return `/api/users/${pathParams.id}`;
  508. });
  509. const upgradeChartValues = baseApi<
  510. {
  511. namespace: string;
  512. storage: StorageType;
  513. values: string;
  514. },
  515. {
  516. id: number;
  517. name: string;
  518. cluster_id: number;
  519. }
  520. >("POST", pathParams => {
  521. let { id, name, cluster_id } = pathParams;
  522. return `/api/projects/${id}/releases/${name}/upgrade?cluster_id=${cluster_id}`;
  523. });
  524. // Bundle export to allow default api import (api.<method> is more readable)
  525. export default {
  526. checkAuth,
  527. connectECRRegistry,
  528. connectGCRRegistry,
  529. createAWSIntegration,
  530. createDOCR,
  531. createDOKS,
  532. createGCPIntegration,
  533. createGCR,
  534. createGHAction,
  535. createGKE,
  536. createInvite,
  537. createProject,
  538. deleteCluster,
  539. deleteInvite,
  540. deleteProject,
  541. deployTemplate,
  542. destroyEKS,
  543. destroyGKE,
  544. destroyDOKS,
  545. getBranchContents,
  546. getBranches,
  547. getChart,
  548. getCharts,
  549. getChartComponents,
  550. getChartControllers,
  551. getClusterIntegrations,
  552. getClusters,
  553. getGitRepoList,
  554. getGitRepos,
  555. getImageRepos,
  556. getImageTags,
  557. getInfra,
  558. getIngress,
  559. getInvites,
  560. getMatchingPods,
  561. getMetrics,
  562. getNamespaces,
  563. getOAuthIds,
  564. getProjectClusters,
  565. getProjectRegistries,
  566. getProjectRepos,
  567. getProjects,
  568. getPrometheusIsInstalled,
  569. getRegistryIntegrations,
  570. getReleaseToken,
  571. getRepoIntegrations,
  572. getRepos,
  573. getRevisions,
  574. getTemplateInfo,
  575. getTemplates,
  576. getUser,
  577. linkGithubProject,
  578. logInUser,
  579. logOutUser,
  580. provisionECR,
  581. provisionEKS,
  582. registerUser,
  583. rollbackChart,
  584. uninstallTemplate,
  585. updateUser,
  586. upgradeChartValues
  587. };