api.tsx 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722
  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 createEmailVerification = baseApi<{}, {}>("POST", pathParams => {
  66. return `/api/email/verify/initiate`;
  67. });
  68. const createGCPIntegration = baseApi<
  69. {
  70. gcp_region: string;
  71. gcp_key_data: string;
  72. gcp_project_id: string;
  73. },
  74. {
  75. project_id: number;
  76. }
  77. >("POST", pathParams => {
  78. return `/api/projects/${pathParams.project_id}/integrations/gcp`;
  79. });
  80. const createGCR = baseApi<
  81. {
  82. gcp_integration_id: number;
  83. },
  84. {
  85. project_id: number;
  86. }
  87. >("POST", pathParams => {
  88. return `/api/projects/${pathParams.project_id}/provision/gcr`;
  89. });
  90. const createGHAction = baseApi<
  91. {
  92. git_repo: string;
  93. registry_id: number;
  94. image_repo_uri: string;
  95. dockerfile_path: string;
  96. folder_path: string;
  97. git_repo_id: number;
  98. env: any;
  99. },
  100. {
  101. project_id: number;
  102. CLUSTER_ID: number;
  103. RELEASE_NAME: string;
  104. RELEASE_NAMESPACE: string;
  105. }
  106. >("POST", pathParams => {
  107. let { project_id, CLUSTER_ID, RELEASE_NAME, RELEASE_NAMESPACE } = pathParams;
  108. return `/api/projects/${project_id}/ci/actions?cluster_id=${CLUSTER_ID}&name=${RELEASE_NAME}&namespace=${RELEASE_NAMESPACE}`;
  109. });
  110. const createGKE = baseApi<
  111. {
  112. gcp_integration_id: number;
  113. gke_name: string;
  114. },
  115. {
  116. project_id: number;
  117. }
  118. >("POST", pathParams => {
  119. return `/api/projects/${pathParams.project_id}/provision/gke`;
  120. });
  121. const createInvite = baseApi<
  122. {
  123. email: string;
  124. },
  125. {
  126. id: number;
  127. }
  128. >("POST", pathParams => {
  129. return `/api/projects/${pathParams.id}/invites`;
  130. });
  131. const createPasswordReset = baseApi<
  132. {
  133. email: string;
  134. },
  135. {}
  136. >("POST", pathParams => {
  137. return `/api/password/reset/initiate`;
  138. });
  139. const createPasswordResetVerify = baseApi<
  140. {
  141. email: string;
  142. token: string;
  143. token_id: number;
  144. },
  145. {}
  146. >("POST", pathParams => {
  147. return `/api/password/reset/verify`;
  148. });
  149. const createPasswordResetFinalize = baseApi<
  150. {
  151. email: string;
  152. token: string;
  153. token_id: number;
  154. new_password: string;
  155. },
  156. {}
  157. >("POST", pathParams => {
  158. return `/api/password/reset/finalize`;
  159. });
  160. const createProject = baseApi<{ name: string }, {}>("POST", pathParams => {
  161. return `/api/projects`;
  162. });
  163. const createSubdomain = baseApi<
  164. {
  165. release_name: string;
  166. },
  167. {
  168. id: number;
  169. cluster_id: number;
  170. }
  171. >("POST", pathParams => {
  172. let { cluster_id, id } = pathParams;
  173. return `/api/projects/${id}/k8s/subdomain?cluster_id=${cluster_id}`;
  174. });
  175. const deleteCluster = baseApi<
  176. {},
  177. {
  178. project_id: number;
  179. cluster_id: number;
  180. }
  181. >("DELETE", pathParams => {
  182. return `/api/projects/${pathParams.project_id}/clusters/${pathParams.cluster_id}`;
  183. });
  184. const deleteInvite = baseApi<{}, { id: number; invId: number }>(
  185. "DELETE",
  186. pathParams => {
  187. return `/api/projects/${pathParams.id}/invites/${pathParams.invId}`;
  188. }
  189. );
  190. const deleteProject = baseApi<{}, { id: number }>("DELETE", pathParams => {
  191. return `/api/projects/${pathParams.id}`;
  192. });
  193. const deployTemplate = baseApi<
  194. {
  195. templateName: string;
  196. imageURL?: string;
  197. formValues?: any;
  198. storage: StorageType;
  199. namespace: string;
  200. name: string;
  201. },
  202. {
  203. id: number;
  204. cluster_id: number;
  205. name: string;
  206. version: string;
  207. repo_url?: string;
  208. }
  209. >("POST", pathParams => {
  210. let { cluster_id, id, name, version, repo_url } = pathParams;
  211. if (repo_url) {
  212. return `/api/projects/${id}/deploy/${name}/${version}?cluster_id=${cluster_id}&repo_url=${repo_url}`;
  213. }
  214. return `/api/projects/${id}/deploy/${name}/${version}?cluster_id=${cluster_id}`;
  215. });
  216. const destroyCluster = baseApi<
  217. {
  218. eks_name: string;
  219. },
  220. {
  221. project_id: number;
  222. infra_id: number;
  223. }
  224. >("POST", pathParams => {
  225. return `/api/projects/${pathParams.project_id}/infra/${pathParams.infra_id}/eks/destroy`;
  226. });
  227. const getBranchContents = baseApi<
  228. {
  229. dir: string;
  230. },
  231. {
  232. project_id: number;
  233. git_repo_id: number;
  234. kind: string;
  235. owner: string;
  236. name: string;
  237. branch: string;
  238. }
  239. >("GET", pathParams => {
  240. return `/api/projects/${pathParams.project_id}/gitrepos/${pathParams.git_repo_id}/repos/${pathParams.kind}/${pathParams.owner}/${pathParams.name}/${pathParams.branch}/contents`;
  241. });
  242. const getBranches = baseApi<
  243. {},
  244. {
  245. project_id: number;
  246. git_repo_id: number;
  247. kind: string;
  248. owner: string;
  249. name: string;
  250. }
  251. >("GET", pathParams => {
  252. return `/api/projects/${pathParams.project_id}/gitrepos/${pathParams.git_repo_id}/repos/${pathParams.kind}/${pathParams.owner}/${pathParams.name}/branches`;
  253. });
  254. const getChart = baseApi<
  255. {
  256. namespace: string;
  257. cluster_id: number;
  258. storage: StorageType;
  259. },
  260. { id: number; name: string; revision: number }
  261. >("GET", pathParams => {
  262. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/${pathParams.revision}`;
  263. });
  264. const getCharts = baseApi<
  265. {
  266. namespace: string;
  267. cluster_id: number;
  268. storage: StorageType;
  269. limit: number;
  270. skip: number;
  271. byDate: boolean;
  272. statusFilter: string[];
  273. },
  274. { id: number }
  275. >("GET", pathParams => {
  276. return `/api/projects/${pathParams.id}/releases`;
  277. });
  278. const getChartComponents = baseApi<
  279. {
  280. namespace: string;
  281. cluster_id: number;
  282. storage: StorageType;
  283. },
  284. { id: number; name: string; revision: number }
  285. >("GET", pathParams => {
  286. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/${pathParams.revision}/components`;
  287. });
  288. const getChartControllers = baseApi<
  289. {
  290. namespace: string;
  291. cluster_id: number;
  292. storage: StorageType;
  293. },
  294. { id: number; name: string; revision: number }
  295. >("GET", pathParams => {
  296. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/${pathParams.revision}/controllers`;
  297. });
  298. const getClusterIntegrations = baseApi("GET", "/api/integrations/cluster");
  299. const getClusters = baseApi<{}, { id: number }>("GET", pathParams => {
  300. return `/api/projects/${pathParams.id}/clusters`;
  301. });
  302. const getGitRepoList = baseApi<
  303. {},
  304. {
  305. project_id: number;
  306. git_repo_id: number;
  307. }
  308. >("GET", pathParams => {
  309. return `/api/projects/${pathParams.project_id}/gitrepos/${pathParams.git_repo_id}/repos`;
  310. });
  311. const getGitRepos = baseApi<
  312. {},
  313. {
  314. project_id: number;
  315. }
  316. >("GET", pathParams => {
  317. return `/api/projects/${pathParams.project_id}/gitrepos`;
  318. });
  319. const getImageRepos = baseApi<
  320. {},
  321. {
  322. project_id: number;
  323. registry_id: number;
  324. }
  325. >("GET", pathParams => {
  326. return `/api/projects/${pathParams.project_id}/registries/${pathParams.registry_id}/repositories`;
  327. });
  328. const getImageTags = baseApi<
  329. {},
  330. {
  331. project_id: number;
  332. registry_id: number;
  333. repo_name: string;
  334. }
  335. >("GET", pathParams => {
  336. return `/api/projects/${pathParams.project_id}/registries/${pathParams.registry_id}/repositories/${pathParams.repo_name}`;
  337. });
  338. const getInfra = baseApi<
  339. {},
  340. {
  341. project_id: number;
  342. }
  343. >("GET", pathParams => {
  344. return `/api/projects/${pathParams.project_id}/infra`;
  345. });
  346. const getIngress = baseApi<
  347. {
  348. cluster_id: number;
  349. },
  350. { name: string; namespace: string; id: number }
  351. >("GET", pathParams => {
  352. return `/api/projects/${pathParams.id}/k8s/${pathParams.namespace}/ingress/${pathParams.name}`;
  353. });
  354. const getInvites = baseApi<{}, { id: number }>("GET", pathParams => {
  355. return `/api/projects/${pathParams.id}/invites`;
  356. });
  357. const getMatchingPods = baseApi<
  358. {
  359. cluster_id: number;
  360. selectors: string[];
  361. },
  362. { id: number }
  363. >("GET", pathParams => {
  364. return `/api/projects/${pathParams.id}/k8s/pods`;
  365. });
  366. const getMetrics = baseApi<
  367. {
  368. cluster_id: number;
  369. metric: string;
  370. shouldsum: boolean;
  371. pods: string[];
  372. namespace: string;
  373. startrange: number;
  374. endrange: number;
  375. resolution: string;
  376. },
  377. { id: number }
  378. >("GET", pathParams => {
  379. return `/api/projects/${pathParams.id}/k8s/metrics`;
  380. });
  381. const getNamespaces = baseApi<
  382. {
  383. cluster_id: number;
  384. },
  385. { id: number }
  386. >("GET", pathParams => {
  387. return `/api/projects/${pathParams.id}/k8s/namespaces`;
  388. });
  389. const getOAuthIds = baseApi<
  390. {},
  391. {
  392. project_id: number;
  393. }
  394. >("GET", pathParams => {
  395. return `/api/projects/${pathParams.project_id}/integrations/oauth`;
  396. });
  397. const getProjectClusters = baseApi<{}, { id: number }>("GET", pathParams => {
  398. return `/api/projects/${pathParams.id}/clusters`;
  399. });
  400. const getProjectRegistries = baseApi<{}, { id: number }>("GET", pathParams => {
  401. return `/api/projects/${pathParams.id}/registries`;
  402. });
  403. const getProjectRepos = baseApi<{}, { id: number }>("GET", pathParams => {
  404. return `/api/projects/${pathParams.id}/repos`;
  405. });
  406. const getProjects = baseApi<{}, { id: number }>("GET", pathParams => {
  407. return `/api/users/${pathParams.id}/projects`;
  408. });
  409. const getPrometheusIsInstalled = baseApi<
  410. {
  411. cluster_id: number;
  412. },
  413. { id: number }
  414. >("GET", pathParams => {
  415. return `/api/projects/${pathParams.id}/k8s/prometheus/detect`;
  416. });
  417. const getRegistryIntegrations = baseApi("GET", "/api/integrations/registry");
  418. const getReleaseToken = baseApi<
  419. {
  420. namespace: string;
  421. cluster_id: number;
  422. storage: StorageType;
  423. },
  424. { name: string; id: number }
  425. >("GET", pathParams => {
  426. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/webhook_token`;
  427. });
  428. const destroyEKS = baseApi<
  429. {
  430. eks_name: string;
  431. },
  432. {
  433. project_id: number;
  434. infra_id: number;
  435. }
  436. >("POST", pathParams => {
  437. return `/api/projects/${pathParams.project_id}/infra/${pathParams.infra_id}/eks/destroy`;
  438. });
  439. const destroyGKE = baseApi<
  440. {
  441. gke_name: string;
  442. },
  443. {
  444. project_id: number;
  445. infra_id: number;
  446. }
  447. >("POST", pathParams => {
  448. return `/api/projects/${pathParams.project_id}/infra/${pathParams.infra_id}/gke/destroy`;
  449. });
  450. const destroyDOKS = baseApi<
  451. {
  452. doks_name: string;
  453. },
  454. {
  455. project_id: number;
  456. infra_id: number;
  457. }
  458. >("POST", pathParams => {
  459. return `/api/projects/${pathParams.project_id}/infra/${pathParams.infra_id}/doks/destroy`;
  460. });
  461. const getRepoIntegrations = baseApi("GET", "/api/integrations/repo");
  462. const getRepos = baseApi<{}, { id: number }>("GET", pathParams => {
  463. return `/api/projects/${pathParams.id}/repos`;
  464. });
  465. const getRevisions = baseApi<
  466. {
  467. namespace: string;
  468. cluster_id: number;
  469. storage: StorageType;
  470. },
  471. { id: number; name: string }
  472. >("GET", pathParams => {
  473. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/history`;
  474. });
  475. const getTemplateInfo = baseApi<
  476. {
  477. repo_url?: string;
  478. },
  479. { name: string; version: string }
  480. >("GET", pathParams => {
  481. return `/api/templates/${pathParams.name}/${pathParams.version}`;
  482. });
  483. const getAddonTemplates = baseApi("GET", "/api/templates");
  484. const getApplicationTemplates = baseApi<
  485. {
  486. repo_url?: string;
  487. },
  488. {}
  489. >("GET", "/api/templates");
  490. const getUser = baseApi<{}, { id: number }>("GET", pathParams => {
  491. return `/api/users/${pathParams.id}`;
  492. });
  493. const linkGithubProject = baseApi<
  494. {},
  495. {
  496. project_id: number;
  497. }
  498. >("GET", pathParams => {
  499. return `/api/oauth/projects/${pathParams.project_id}/github`;
  500. });
  501. const logInUser = baseApi<{
  502. email: string;
  503. password: string;
  504. }>("POST", "/api/login");
  505. const logOutUser = baseApi("POST", "/api/logout");
  506. const provisionECR = baseApi<
  507. {
  508. ecr_name: string;
  509. aws_integration_id: string;
  510. },
  511. { id: number }
  512. >("POST", pathParams => {
  513. return `/api/projects/${pathParams.id}/provision/ecr`;
  514. });
  515. const provisionEKS = baseApi<
  516. {
  517. eks_name: string;
  518. aws_integration_id: string;
  519. },
  520. { id: number }
  521. >("POST", pathParams => {
  522. return `/api/projects/${pathParams.id}/provision/eks`;
  523. });
  524. const registerUser = baseApi<{
  525. email: string;
  526. password: string;
  527. }>("POST", "/api/users");
  528. const rollbackChart = baseApi<
  529. {
  530. namespace: string;
  531. storage: StorageType;
  532. revision: number;
  533. },
  534. {
  535. id: number;
  536. name: string;
  537. cluster_id: number;
  538. }
  539. >("POST", pathParams => {
  540. let { id, name, cluster_id } = pathParams;
  541. return `/api/projects/${id}/releases/${name}/rollback?cluster_id=${cluster_id}`;
  542. });
  543. const uninstallTemplate = baseApi<
  544. {},
  545. {
  546. id: number;
  547. name: string;
  548. cluster_id: number;
  549. namespace: string;
  550. storage: StorageType;
  551. }
  552. >("POST", pathParams => {
  553. let { id, name, cluster_id, storage, namespace } = pathParams;
  554. return `/api/projects/${id}/delete/${name}?cluster_id=${cluster_id}&namespace=${namespace}&storage=${storage}`;
  555. });
  556. const updateUser = baseApi<
  557. {
  558. rawKubeConfig?: string;
  559. allowedContexts?: string[];
  560. },
  561. { id: number }
  562. >("PUT", pathParams => {
  563. return `/api/users/${pathParams.id}`;
  564. });
  565. const upgradeChartValues = baseApi<
  566. {
  567. namespace: string;
  568. storage: StorageType;
  569. values: string;
  570. },
  571. {
  572. id: number;
  573. name: string;
  574. cluster_id: number;
  575. }
  576. >("POST", pathParams => {
  577. let { id, name, cluster_id } = pathParams;
  578. return `/api/projects/${id}/releases/${name}/upgrade?cluster_id=${cluster_id}`;
  579. });
  580. // Bundle export to allow default api import (api.<method> is more readable)
  581. export default {
  582. checkAuth,
  583. connectECRRegistry,
  584. connectGCRRegistry,
  585. createAWSIntegration,
  586. createDOCR,
  587. createDOKS,
  588. createEmailVerification,
  589. createGCPIntegration,
  590. createGCR,
  591. createGHAction,
  592. createGKE,
  593. createInvite,
  594. createPasswordReset,
  595. createPasswordResetVerify,
  596. createPasswordResetFinalize,
  597. createProject,
  598. deleteCluster,
  599. deleteInvite,
  600. deleteProject,
  601. createSubdomain,
  602. deployTemplate,
  603. destroyEKS,
  604. destroyGKE,
  605. destroyDOKS,
  606. getBranchContents,
  607. getBranches,
  608. getChart,
  609. getCharts,
  610. getChartComponents,
  611. getChartControllers,
  612. getClusterIntegrations,
  613. getClusters,
  614. getGitRepoList,
  615. getGitRepos,
  616. getImageRepos,
  617. getImageTags,
  618. getInfra,
  619. getIngress,
  620. getInvites,
  621. getMatchingPods,
  622. getMetrics,
  623. getNamespaces,
  624. getOAuthIds,
  625. getProjectClusters,
  626. getProjectRegistries,
  627. getProjectRepos,
  628. getProjects,
  629. getPrometheusIsInstalled,
  630. getRegistryIntegrations,
  631. getReleaseToken,
  632. getRepoIntegrations,
  633. getRepos,
  634. getRevisions,
  635. getTemplateInfo,
  636. getAddonTemplates,
  637. getApplicationTemplates,
  638. getUser,
  639. linkGithubProject,
  640. logInUser,
  641. logOutUser,
  642. provisionECR,
  643. provisionEKS,
  644. registerUser,
  645. rollbackChart,
  646. uninstallTemplate,
  647. updateUser,
  648. upgradeChartValues
  649. };