api.tsx 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667
  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. repo_url?: string;
  164. }
  165. >("POST", pathParams => {
  166. let { cluster_id, id, name, version, repo_url } = pathParams;
  167. if (repo_url) {
  168. return `/api/projects/${id}/deploy/${name}/${version}?cluster_id=${cluster_id}&repo_url=${repo_url}`;
  169. }
  170. return `/api/projects/${id}/deploy/${name}/${version}?cluster_id=${cluster_id}`;
  171. });
  172. const destroyCluster = baseApi<
  173. {
  174. eks_name: string;
  175. },
  176. {
  177. project_id: number;
  178. infra_id: number;
  179. }
  180. >("POST", pathParams => {
  181. return `/api/projects/${pathParams.project_id}/infra/${pathParams.infra_id}/eks/destroy`;
  182. });
  183. const getBranchContents = baseApi<
  184. {
  185. dir: string;
  186. },
  187. {
  188. project_id: number;
  189. git_repo_id: number;
  190. kind: string;
  191. owner: string;
  192. name: string;
  193. branch: string;
  194. }
  195. >("GET", pathParams => {
  196. return `/api/projects/${pathParams.project_id}/gitrepos/${pathParams.git_repo_id}/repos/${pathParams.kind}/${pathParams.owner}/${pathParams.name}/${pathParams.branch}/contents`;
  197. });
  198. const getBranches = baseApi<
  199. {},
  200. {
  201. project_id: number;
  202. git_repo_id: number;
  203. kind: string;
  204. owner: string;
  205. name: string;
  206. }
  207. >("GET", pathParams => {
  208. return `/api/projects/${pathParams.project_id}/gitrepos/${pathParams.git_repo_id}/repos/${pathParams.kind}/${pathParams.owner}/${pathParams.name}/branches`;
  209. });
  210. const getChart = baseApi<
  211. {
  212. namespace: string;
  213. cluster_id: number;
  214. storage: StorageType;
  215. },
  216. { id: number; name: string; revision: number }
  217. >("GET", pathParams => {
  218. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/${pathParams.revision}`;
  219. });
  220. const getCharts = baseApi<
  221. {
  222. namespace: string;
  223. cluster_id: number;
  224. storage: StorageType;
  225. limit: number;
  226. skip: number;
  227. byDate: boolean;
  228. statusFilter: string[];
  229. },
  230. { id: number }
  231. >("GET", pathParams => {
  232. return `/api/projects/${pathParams.id}/releases`;
  233. });
  234. const getChartComponents = baseApi<
  235. {
  236. namespace: string;
  237. cluster_id: number;
  238. storage: StorageType;
  239. },
  240. { id: number; name: string; revision: number }
  241. >("GET", pathParams => {
  242. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/${pathParams.revision}/components`;
  243. });
  244. const getChartControllers = baseApi<
  245. {
  246. namespace: string;
  247. cluster_id: number;
  248. storage: StorageType;
  249. },
  250. { id: number; name: string; revision: number }
  251. >("GET", pathParams => {
  252. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/${pathParams.revision}/controllers`;
  253. });
  254. const getClusterIntegrations = baseApi("GET", "/api/integrations/cluster");
  255. const getClusters = baseApi<{}, { id: number }>("GET", pathParams => {
  256. return `/api/projects/${pathParams.id}/clusters`;
  257. });
  258. const getGitRepoList = baseApi<
  259. {},
  260. {
  261. project_id: number;
  262. git_repo_id: number;
  263. }
  264. >("GET", pathParams => {
  265. return `/api/projects/${pathParams.project_id}/gitrepos/${pathParams.git_repo_id}/repos`;
  266. });
  267. const getGitRepos = baseApi<
  268. {},
  269. {
  270. project_id: number;
  271. }
  272. >("GET", pathParams => {
  273. return `/api/projects/${pathParams.project_id}/gitrepos`;
  274. });
  275. const getImageRepos = baseApi<
  276. {},
  277. {
  278. project_id: number;
  279. registry_id: number;
  280. }
  281. >("GET", pathParams => {
  282. return `/api/projects/${pathParams.project_id}/registries/${pathParams.registry_id}/repositories`;
  283. });
  284. const getImageTags = baseApi<
  285. {},
  286. {
  287. project_id: number;
  288. registry_id: number;
  289. repo_name: string;
  290. }
  291. >("GET", pathParams => {
  292. return `/api/projects/${pathParams.project_id}/registries/${pathParams.registry_id}/repositories/${pathParams.repo_name}`;
  293. });
  294. const getInfra = baseApi<
  295. {},
  296. {
  297. project_id: number;
  298. }
  299. >("GET", pathParams => {
  300. return `/api/projects/${pathParams.project_id}/infra`;
  301. });
  302. const getIngress = baseApi<
  303. {
  304. cluster_id: number;
  305. },
  306. { name: string; namespace: string; id: number }
  307. >("GET", pathParams => {
  308. return `/api/projects/${pathParams.id}/k8s/${pathParams.namespace}/ingress/${pathParams.name}`;
  309. });
  310. const getInvites = baseApi<{}, { id: number }>("GET", pathParams => {
  311. return `/api/projects/${pathParams.id}/invites`;
  312. });
  313. const getMatchingPods = baseApi<
  314. {
  315. cluster_id: number;
  316. selectors: string[];
  317. },
  318. { id: number }
  319. >("GET", pathParams => {
  320. return `/api/projects/${pathParams.id}/k8s/pods`;
  321. });
  322. const getMetrics = baseApi<
  323. {
  324. cluster_id: number;
  325. metric: string;
  326. shouldsum: boolean;
  327. pods: string[];
  328. namespace: string;
  329. startrange: number;
  330. endrange: number;
  331. resolution: string;
  332. },
  333. { id: number }
  334. >("GET", pathParams => {
  335. return `/api/projects/${pathParams.id}/k8s/metrics`;
  336. });
  337. const getNamespaces = baseApi<
  338. {
  339. cluster_id: number;
  340. },
  341. { id: number }
  342. >("GET", pathParams => {
  343. return `/api/projects/${pathParams.id}/k8s/namespaces`;
  344. });
  345. const getOAuthIds = baseApi<
  346. {},
  347. {
  348. project_id: number;
  349. }
  350. >("GET", pathParams => {
  351. return `/api/projects/${pathParams.project_id}/integrations/oauth`;
  352. });
  353. const getProjectClusters = baseApi<{}, { id: number }>("GET", pathParams => {
  354. return `/api/projects/${pathParams.id}/clusters`;
  355. });
  356. const getProjectRegistries = baseApi<{}, { id: number }>("GET", pathParams => {
  357. return `/api/projects/${pathParams.id}/registries`;
  358. });
  359. const getProjectRepos = baseApi<{}, { id: number }>("GET", pathParams => {
  360. return `/api/projects/${pathParams.id}/repos`;
  361. });
  362. const getProjects = baseApi<{}, { id: number }>("GET", pathParams => {
  363. return `/api/users/${pathParams.id}/projects`;
  364. });
  365. const getPrometheusIsInstalled = baseApi<
  366. {
  367. cluster_id: number;
  368. },
  369. { id: number }
  370. >("GET", pathParams => {
  371. return `/api/projects/${pathParams.id}/k8s/prometheus/detect`;
  372. });
  373. const getRegistryIntegrations = baseApi("GET", "/api/integrations/registry");
  374. const getReleaseToken = baseApi<
  375. {
  376. namespace: string;
  377. cluster_id: number;
  378. storage: StorageType;
  379. },
  380. { name: string; id: number }
  381. >("GET", pathParams => {
  382. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/webhook_token`;
  383. });
  384. const destroyEKS = baseApi<
  385. {
  386. eks_name: string;
  387. },
  388. {
  389. project_id: number;
  390. infra_id: number;
  391. }
  392. >("POST", pathParams => {
  393. return `/api/projects/${pathParams.project_id}/infra/${pathParams.infra_id}/eks/destroy`;
  394. });
  395. const destroyGKE = baseApi<
  396. {
  397. gke_name: string;
  398. },
  399. {
  400. project_id: number;
  401. infra_id: number;
  402. }
  403. >("POST", pathParams => {
  404. return `/api/projects/${pathParams.project_id}/infra/${pathParams.infra_id}/gke/destroy`;
  405. });
  406. const destroyDOKS = baseApi<
  407. {
  408. doks_name: string;
  409. },
  410. {
  411. project_id: number;
  412. infra_id: number;
  413. }
  414. >("POST", pathParams => {
  415. return `/api/projects/${pathParams.project_id}/infra/${pathParams.infra_id}/doks/destroy`;
  416. });
  417. const getRepoIntegrations = baseApi("GET", "/api/integrations/repo");
  418. const getRepos = baseApi<{}, { id: number }>("GET", pathParams => {
  419. return `/api/projects/${pathParams.id}/repos`;
  420. });
  421. const getRevisions = baseApi<
  422. {
  423. namespace: string;
  424. cluster_id: number;
  425. storage: StorageType;
  426. },
  427. { id: number; name: string }
  428. >("GET", pathParams => {
  429. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/history`;
  430. });
  431. const getTemplateInfo = baseApi<{
  432. repo_url?: string
  433. }, { name: string; version: string }>(
  434. "GET",
  435. pathParams => {
  436. return `/api/templates/${pathParams.name}/${pathParams.version}`;
  437. }
  438. );
  439. const getAddonTemplates = baseApi("GET", "/api/templates");
  440. const getApplicationTemplates = baseApi<
  441. {
  442. repo_url?: string
  443. },
  444. {}
  445. >("GET", "/api/templates");
  446. const getUser = baseApi<{}, { id: number }>("GET", pathParams => {
  447. return `/api/users/${pathParams.id}`;
  448. });
  449. const linkGithubProject = baseApi<
  450. {},
  451. {
  452. project_id: number;
  453. }
  454. >("GET", pathParams => {
  455. return `/api/oauth/projects/${pathParams.project_id}/github`;
  456. });
  457. const logInUser = baseApi<{
  458. email: string;
  459. password: string;
  460. }>("POST", "/api/login");
  461. const logOutUser = baseApi("POST", "/api/logout");
  462. const provisionECR = baseApi<
  463. {
  464. ecr_name: string;
  465. aws_integration_id: string;
  466. },
  467. { id: number }
  468. >("POST", pathParams => {
  469. return `/api/projects/${pathParams.id}/provision/ecr`;
  470. });
  471. const provisionEKS = baseApi<
  472. {
  473. eks_name: string;
  474. aws_integration_id: string;
  475. },
  476. { id: number }
  477. >("POST", pathParams => {
  478. return `/api/projects/${pathParams.id}/provision/eks`;
  479. });
  480. const registerUser = baseApi<{
  481. email: string;
  482. password: string;
  483. }>("POST", "/api/users");
  484. const rollbackChart = baseApi<
  485. {
  486. namespace: string;
  487. storage: StorageType;
  488. revision: number;
  489. },
  490. {
  491. id: number;
  492. name: string;
  493. cluster_id: number;
  494. }
  495. >("POST", pathParams => {
  496. let { id, name, cluster_id } = pathParams;
  497. return `/api/projects/${id}/releases/${name}/rollback?cluster_id=${cluster_id}`;
  498. });
  499. const uninstallTemplate = baseApi<
  500. {},
  501. {
  502. id: number;
  503. name: string;
  504. cluster_id: number;
  505. namespace: string;
  506. storage: StorageType;
  507. }
  508. >("POST", pathParams => {
  509. let { id, name, cluster_id, storage, namespace } = pathParams;
  510. return `/api/projects/${id}/delete/${name}?cluster_id=${cluster_id}&namespace=${namespace}&storage=${storage}`;
  511. });
  512. const updateUser = baseApi<
  513. {
  514. rawKubeConfig?: string;
  515. allowedContexts?: string[];
  516. },
  517. { id: number }
  518. >("PUT", pathParams => {
  519. return `/api/users/${pathParams.id}`;
  520. });
  521. const upgradeChartValues = baseApi<
  522. {
  523. namespace: string;
  524. storage: StorageType;
  525. values: string;
  526. },
  527. {
  528. id: number;
  529. name: string;
  530. cluster_id: number;
  531. }
  532. >("POST", pathParams => {
  533. let { id, name, cluster_id } = pathParams;
  534. return `/api/projects/${id}/releases/${name}/upgrade?cluster_id=${cluster_id}`;
  535. });
  536. // Bundle export to allow default api import (api.<method> is more readable)
  537. export default {
  538. checkAuth,
  539. connectECRRegistry,
  540. connectGCRRegistry,
  541. createAWSIntegration,
  542. createDOCR,
  543. createDOKS,
  544. createGCPIntegration,
  545. createGCR,
  546. createGHAction,
  547. createGKE,
  548. createInvite,
  549. createProject,
  550. deleteCluster,
  551. deleteInvite,
  552. deleteProject,
  553. deployTemplate,
  554. destroyEKS,
  555. destroyGKE,
  556. destroyDOKS,
  557. getBranchContents,
  558. getBranches,
  559. getChart,
  560. getCharts,
  561. getChartComponents,
  562. getChartControllers,
  563. getClusterIntegrations,
  564. getClusters,
  565. getGitRepoList,
  566. getGitRepos,
  567. getImageRepos,
  568. getImageTags,
  569. getInfra,
  570. getIngress,
  571. getInvites,
  572. getMatchingPods,
  573. getMetrics,
  574. getNamespaces,
  575. getOAuthIds,
  576. getProjectClusters,
  577. getProjectRegistries,
  578. getProjectRepos,
  579. getProjects,
  580. getPrometheusIsInstalled,
  581. getRegistryIntegrations,
  582. getReleaseToken,
  583. getRepoIntegrations,
  584. getRepos,
  585. getRevisions,
  586. getTemplateInfo,
  587. getAddonTemplates,
  588. getApplicationTemplates,
  589. getUser,
  590. linkGithubProject,
  591. logInUser,
  592. logOutUser,
  593. provisionECR,
  594. provisionEKS,
  595. registerUser,
  596. rollbackChart,
  597. uninstallTemplate,
  598. updateUser,
  599. upgradeChartValues
  600. };