api.tsx 25 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139
  1. import { baseApi } from "./baseApi";
  2. import { FullActionConfigType, 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/users/current");
  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 overwriteAWSIntegration = baseApi<
  42. {
  43. aws_access_key_id: string;
  44. aws_secret_access_key: string;
  45. },
  46. {
  47. projectID: number;
  48. awsIntegrationID: number;
  49. cluster_id: number;
  50. }
  51. >("POST", (pathParams) => {
  52. return `/api/projects/${pathParams.projectID}/integrations/aws/${pathParams.awsIntegrationID}/overwrite?cluster_id=${pathParams.cluster_id}`;
  53. });
  54. const createDOCR = baseApi<
  55. {
  56. do_integration_id: number;
  57. docr_name: string;
  58. docr_subscription_tier: string;
  59. },
  60. {
  61. project_id: number;
  62. }
  63. >("POST", (pathParams) => {
  64. return `/api/projects/${pathParams.project_id}/provision/docr`;
  65. });
  66. const createDOKS = baseApi<
  67. {
  68. do_integration_id: number;
  69. doks_name: string;
  70. do_region: string;
  71. },
  72. {
  73. project_id: number;
  74. }
  75. >("POST", (pathParams) => {
  76. return `/api/projects/${pathParams.project_id}/provision/doks`;
  77. });
  78. const createEmailVerification = baseApi<{}, {}>("POST", (pathParams) => {
  79. return `/api/email/verify/initiate`;
  80. });
  81. const createGCPIntegration = baseApi<
  82. {
  83. gcp_region: string;
  84. gcp_key_data: string;
  85. gcp_project_id: string;
  86. },
  87. {
  88. project_id: number;
  89. }
  90. >("POST", (pathParams) => {
  91. return `/api/projects/${pathParams.project_id}/integrations/gcp`;
  92. });
  93. const createGCR = baseApi<
  94. {
  95. gcp_integration_id: number;
  96. },
  97. {
  98. project_id: number;
  99. }
  100. >("POST", (pathParams) => {
  101. return `/api/projects/${pathParams.project_id}/provision/gcr`;
  102. });
  103. const createGKE = baseApi<
  104. {
  105. gcp_integration_id: number;
  106. gke_name: string;
  107. },
  108. {
  109. project_id: number;
  110. }
  111. >("POST", (pathParams) => {
  112. return `/api/projects/${pathParams.project_id}/provision/gke`;
  113. });
  114. const createInvite = baseApi<
  115. {
  116. email: string;
  117. kind: string;
  118. },
  119. {
  120. id: number;
  121. }
  122. >("POST", (pathParams) => {
  123. return `/api/projects/${pathParams.id}/invites`;
  124. });
  125. const createPasswordReset = baseApi<
  126. {
  127. email: string;
  128. },
  129. {}
  130. >("POST", (pathParams) => {
  131. return `/api/password/reset/initiate`;
  132. });
  133. const createPasswordResetVerify = baseApi<
  134. {
  135. email: string;
  136. token: string;
  137. token_id: number;
  138. },
  139. {}
  140. >("POST", (pathParams) => {
  141. return `/api/password/reset/verify`;
  142. });
  143. const createPasswordResetFinalize = baseApi<
  144. {
  145. email: string;
  146. token: string;
  147. token_id: number;
  148. new_password: string;
  149. },
  150. {}
  151. >("POST", (pathParams) => {
  152. return `/api/password/reset/finalize`;
  153. });
  154. const createProject = baseApi<{ name: string }, {}>("POST", (pathParams) => {
  155. return `/api/projects`;
  156. });
  157. const createSubdomain = baseApi<
  158. {
  159. release_name: string;
  160. },
  161. {
  162. id: number;
  163. cluster_id: number;
  164. }
  165. >("POST", (pathParams) => {
  166. let { cluster_id, id } = pathParams;
  167. return `/api/projects/${id}/k8s/subdomain?cluster_id=${cluster_id}`;
  168. });
  169. const deleteCluster = baseApi<
  170. {},
  171. {
  172. project_id: number;
  173. cluster_id: number;
  174. }
  175. >("DELETE", (pathParams) => {
  176. return `/api/projects/${pathParams.project_id}/clusters/${pathParams.cluster_id}`;
  177. });
  178. const deleteInvite = baseApi<{}, { id: number; invId: number }>(
  179. "DELETE",
  180. (pathParams) => {
  181. return `/api/projects/${pathParams.id}/invites/${pathParams.invId}`;
  182. }
  183. );
  184. const deletePod = baseApi<
  185. {
  186. cluster_id: number;
  187. },
  188. { name: string; namespace: string; id: number }
  189. >("DELETE", (pathParams) => {
  190. return `/api/projects/${pathParams.id}/k8s/pods/${pathParams.namespace}/${pathParams.name}`;
  191. });
  192. const getPodEvents = baseApi<
  193. {
  194. cluster_id: number;
  195. },
  196. { name: string; namespace: string; id: number }
  197. >("GET", (pathParams) => {
  198. return `/api/projects/${pathParams.id}/k8s/pods/${pathParams.namespace}/${pathParams.name}/events/list`;
  199. });
  200. const deleteProject = baseApi<{}, { id: number }>("DELETE", (pathParams) => {
  201. return `/api/projects/${pathParams.id}`;
  202. });
  203. const deleteRegistryIntegration = baseApi<
  204. {},
  205. {
  206. project_id: number;
  207. registry_id: number;
  208. }
  209. >("DELETE", (pathParams) => {
  210. return `/api/projects/${pathParams.project_id}/registries/${pathParams.registry_id}`;
  211. });
  212. const deleteSlackIntegration = baseApi<
  213. {},
  214. {
  215. project_id: number;
  216. slack_integration_id: number;
  217. }
  218. >("DELETE", (pathParams) => {
  219. return `/api/projects/${pathParams.project_id}/slack_integrations/${pathParams.slack_integration_id}`;
  220. });
  221. const updateNotificationConfig = baseApi<
  222. {
  223. payload: any;
  224. namespace: string;
  225. cluster_id: number;
  226. },
  227. {
  228. project_id: number;
  229. name: string;
  230. }
  231. >("POST", (pathParams) => {
  232. return `/api/projects/${pathParams.project_id}/releases/${pathParams.name}/notifications`;
  233. });
  234. const getNotificationConfig = baseApi<
  235. {
  236. namespace: string;
  237. cluster_id: number;
  238. },
  239. {
  240. project_id: number;
  241. name: string;
  242. }
  243. >("GET", (pathParams) => {
  244. return `/api/projects/${pathParams.project_id}/releases/${pathParams.name}/notifications`;
  245. });
  246. const generateGHAWorkflow = baseApi<
  247. FullActionConfigType,
  248. {
  249. cluster_id: number;
  250. project_id: number;
  251. name: string;
  252. }
  253. >("POST", (pathParams) => {
  254. const { name, cluster_id, project_id } = pathParams;
  255. return `/api/projects/${project_id}/ci/actions/generate?cluster_id=${cluster_id}&name=${name}`;
  256. });
  257. const deployTemplate = baseApi<
  258. {
  259. templateName: string;
  260. imageURL?: string;
  261. formValues?: any;
  262. storage: StorageType;
  263. namespace: string;
  264. name: string;
  265. githubActionConfig?: FullActionConfigType;
  266. },
  267. {
  268. id: number;
  269. cluster_id: number;
  270. name: string;
  271. version: string;
  272. repo_url?: string;
  273. }
  274. >("POST", (pathParams) => {
  275. let { cluster_id, id, name, version, repo_url } = pathParams;
  276. if (repo_url) {
  277. return `/api/projects/${id}/deploy/${name}/${version}?cluster_id=${cluster_id}&repo_url=${repo_url}`;
  278. }
  279. return `/api/projects/${id}/deploy/${name}/${version}?cluster_id=${cluster_id}`;
  280. });
  281. const deployAddon = baseApi<
  282. {
  283. templateName: string;
  284. formValues?: any;
  285. storage: StorageType;
  286. namespace: string;
  287. name: string;
  288. },
  289. {
  290. id: number;
  291. cluster_id: number;
  292. name: string;
  293. version: string;
  294. repo_url?: string;
  295. }
  296. >("POST", (pathParams) => {
  297. let { cluster_id, id, name, version, repo_url } = pathParams;
  298. return `/api/projects/${id}/deploy/addon/${name}/${version}?cluster_id=${cluster_id}&repo_url=${repo_url}`;
  299. });
  300. const destroyCluster = baseApi<
  301. {
  302. eks_name: string;
  303. },
  304. {
  305. project_id: number;
  306. infra_id: number;
  307. }
  308. >("POST", (pathParams) => {
  309. return `/api/projects/${pathParams.project_id}/infra/${pathParams.infra_id}/eks/destroy`;
  310. });
  311. const detectBuildpack = baseApi<
  312. {},
  313. {
  314. project_id: number;
  315. git_repo_id: number;
  316. kind: string;
  317. owner: string;
  318. name: string;
  319. branch: string;
  320. }
  321. >("GET", (pathParams) => {
  322. return `/api/projects/${pathParams.project_id}/gitrepos/${pathParams.git_repo_id}/repos/${pathParams.kind}/${pathParams.owner}/${pathParams.name}/${pathParams.branch}/buildpack/detect`;
  323. });
  324. const getBranchContents = baseApi<
  325. {
  326. dir: string;
  327. },
  328. {
  329. project_id: number;
  330. git_repo_id: number;
  331. kind: string;
  332. owner: string;
  333. name: string;
  334. branch: string;
  335. }
  336. >("GET", (pathParams) => {
  337. return `/api/projects/${pathParams.project_id}/gitrepos/${pathParams.git_repo_id}/repos/${pathParams.kind}/${pathParams.owner}/${pathParams.name}/${pathParams.branch}/contents`;
  338. });
  339. const getProcfileContents = baseApi<
  340. {
  341. path: string;
  342. },
  343. {
  344. project_id: number;
  345. git_repo_id: number;
  346. kind: string;
  347. owner: string;
  348. name: string;
  349. branch: string;
  350. }
  351. >("GET", (pathParams) => {
  352. return `/api/projects/${pathParams.project_id}/gitrepos/${pathParams.git_repo_id}/repos/${pathParams.kind}/${pathParams.owner}/${pathParams.name}/${pathParams.branch}/procfile`;
  353. });
  354. const getBranches = baseApi<
  355. {},
  356. {
  357. project_id: number;
  358. git_repo_id: number;
  359. kind: string;
  360. owner: string;
  361. name: string;
  362. }
  363. >("GET", (pathParams) => {
  364. return `/api/projects/${pathParams.project_id}/gitrepos/${pathParams.git_repo_id}/repos/${pathParams.kind}/${pathParams.owner}/${pathParams.name}/branches`;
  365. });
  366. const getChart = baseApi<
  367. {
  368. namespace: string;
  369. cluster_id: number;
  370. storage: StorageType;
  371. },
  372. { id: number; name: string; revision: number }
  373. >("GET", (pathParams) => {
  374. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/${pathParams.revision}`;
  375. });
  376. const getCharts = baseApi<
  377. {
  378. namespace: string;
  379. cluster_id: number;
  380. storage: StorageType;
  381. limit: number;
  382. skip: number;
  383. byDate: boolean;
  384. statusFilter: string[];
  385. },
  386. { id: number }
  387. >("GET", (pathParams) => {
  388. return `/api/projects/${pathParams.id}/releases`;
  389. });
  390. const getChartComponents = baseApi<
  391. {
  392. namespace: string;
  393. cluster_id: number;
  394. storage: StorageType;
  395. },
  396. { id: number; name: string; revision: number }
  397. >("GET", (pathParams) => {
  398. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/${pathParams.revision}/components`;
  399. });
  400. const getChartControllers = baseApi<
  401. {
  402. namespace: string;
  403. cluster_id: number;
  404. storage: StorageType;
  405. },
  406. { id: number; name: string; revision: number }
  407. >("GET", (pathParams) => {
  408. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/${pathParams.revision}/controllers`;
  409. });
  410. const getClusterIntegrations = baseApi("GET", "/api/integrations/cluster");
  411. const getClusters = baseApi<{}, { id: number }>("GET", (pathParams) => {
  412. return `/api/projects/${pathParams.id}/clusters`;
  413. });
  414. const getCluster = baseApi<
  415. {},
  416. {
  417. project_id: number;
  418. cluster_id: number;
  419. }
  420. >("GET", (pathParams) => {
  421. return `/api/projects/${pathParams.project_id}/clusters/${pathParams.cluster_id}`;
  422. });
  423. const getClusterNodes = baseApi<
  424. {},
  425. {
  426. project_id: number;
  427. cluster_id: number;
  428. }
  429. >("GET", (pathParams) => {
  430. return `/api/projects/${pathParams.project_id}/clusters/${pathParams.cluster_id}/nodes`;
  431. });
  432. const getClusterNode = baseApi<
  433. {},
  434. {
  435. project_id: number;
  436. cluster_id: number;
  437. nodeName: string;
  438. }
  439. >(
  440. "GET",
  441. (pathParams) =>
  442. `/api/projects/${pathParams.project_id}/clusters/${pathParams.cluster_id}/node/${pathParams.nodeName}`
  443. );
  444. const getGitRepoList = baseApi<
  445. {},
  446. {
  447. project_id: number;
  448. git_repo_id: number;
  449. }
  450. >("GET", (pathParams) => {
  451. return `/api/projects/${pathParams.project_id}/gitrepos/${pathParams.git_repo_id}/repos`;
  452. });
  453. const getGitRepos = baseApi<
  454. {},
  455. {
  456. project_id: number;
  457. }
  458. >("GET", (pathParams) => {
  459. return `/api/projects/${pathParams.project_id}/gitrepos`;
  460. });
  461. const getImageRepos = baseApi<
  462. {},
  463. {
  464. project_id: number;
  465. registry_id: number;
  466. }
  467. >("GET", (pathParams) => {
  468. return `/api/projects/${pathParams.project_id}/registries/${pathParams.registry_id}/repositories`;
  469. });
  470. const getImageTags = baseApi<
  471. {},
  472. {
  473. project_id: number;
  474. registry_id: number;
  475. repo_name: string;
  476. }
  477. >("GET", (pathParams) => {
  478. return `/api/projects/${pathParams.project_id}/registries/${pathParams.registry_id}/repositories/${pathParams.repo_name}`;
  479. });
  480. const getInfra = baseApi<
  481. {},
  482. {
  483. project_id: number;
  484. }
  485. >("GET", (pathParams) => {
  486. return `/api/projects/${pathParams.project_id}/infra`;
  487. });
  488. const getIngress = baseApi<
  489. {
  490. cluster_id: number;
  491. },
  492. { name: string; namespace: string; id: number }
  493. >("GET", (pathParams) => {
  494. return `/api/projects/${pathParams.id}/k8s/${pathParams.namespace}/ingress/${pathParams.name}`;
  495. });
  496. const getInvites = baseApi<{}, { id: number }>("GET", (pathParams) => {
  497. return `/api/projects/${pathParams.id}/invites`;
  498. });
  499. const getJobs = baseApi<
  500. {
  501. cluster_id: number;
  502. },
  503. { chart: string; namespace: string; release_name: string; id: number }
  504. >("GET", (pathParams) => {
  505. return `/api/projects/${pathParams.id}/k8s/${pathParams.namespace}/${pathParams.chart}/${pathParams.release_name}/jobs`;
  506. });
  507. const getJobStatus = baseApi<
  508. {
  509. cluster_id: number;
  510. },
  511. { name: string; namespace: string; id: number }
  512. >("GET", (pathParams) => {
  513. return `/api/projects/${pathParams.id}/k8s/${pathParams.namespace}/${pathParams.name}/jobs/status`;
  514. });
  515. const getJobPods = baseApi<
  516. {
  517. cluster_id: number;
  518. },
  519. { name: string; namespace: string; id: number }
  520. >("GET", (pathParams) => {
  521. return `/api/projects/${pathParams.id}/k8s/jobs/${pathParams.namespace}/${pathParams.name}/pods`;
  522. });
  523. const getMatchingPods = baseApi<
  524. {
  525. cluster_id: number;
  526. namespace: string;
  527. selectors: string[];
  528. },
  529. { id: number }
  530. >("GET", (pathParams) => {
  531. return `/api/projects/${pathParams.id}/k8s/pods`;
  532. });
  533. const getMetrics = baseApi<
  534. {
  535. cluster_id: number;
  536. metric: string;
  537. shouldsum: boolean;
  538. pods?: string[];
  539. kind?: string; // the controller kind
  540. name?: string;
  541. percentile?: number;
  542. namespace: string;
  543. startrange: number;
  544. endrange: number;
  545. resolution: string;
  546. },
  547. { id: number }
  548. >("GET", (pathParams) => {
  549. return `/api/projects/${pathParams.id}/k8s/metrics`;
  550. });
  551. const getNamespaces = baseApi<
  552. {},
  553. {
  554. id: number;
  555. cluster_id: number;
  556. }
  557. >("GET", (pathParams) => {
  558. return `/api/projects/${pathParams.id}/clusters/${pathParams.cluster_id}/namespaces`;
  559. });
  560. const getNGINXIngresses = baseApi<
  561. {
  562. cluster_id: number;
  563. },
  564. { id: number }
  565. >("GET", (pathParams) => {
  566. return `/api/projects/${pathParams.id}/k8s/prometheus/ingresses`;
  567. });
  568. const getOAuthIds = baseApi<
  569. {},
  570. {
  571. project_id: number;
  572. }
  573. >("GET", (pathParams) => {
  574. return `/api/projects/${pathParams.project_id}/integrations/oauth`;
  575. });
  576. const getProjectClusters = baseApi<{}, { id: number }>("GET", (pathParams) => {
  577. return `/api/projects/${pathParams.id}/clusters`;
  578. });
  579. const getProjectRegistries = baseApi<{}, { id: number }>(
  580. "GET",
  581. (pathParams) => {
  582. return `/api/projects/${pathParams.id}/registries`;
  583. }
  584. );
  585. const getProjectRepos = baseApi<{}, { id: number }>("GET", (pathParams) => {
  586. return `/api/projects/${pathParams.id}/repos`;
  587. });
  588. const getProjects = baseApi("GET", "/api/projects");
  589. const getPrometheusIsInstalled = baseApi<
  590. {
  591. cluster_id: number;
  592. },
  593. { id: number }
  594. >("GET", (pathParams) => {
  595. return `/api/projects/${pathParams.id}/k8s/prometheus/detect`;
  596. });
  597. const getRegistryIntegrations = baseApi("GET", "/api/integrations/registry");
  598. const getReleaseToken = baseApi<
  599. {
  600. namespace: string;
  601. cluster_id: number;
  602. storage: StorageType;
  603. },
  604. { name: string; id: number }
  605. >("GET", (pathParams) => {
  606. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/webhook_token`;
  607. });
  608. const destroyEKS = baseApi<
  609. {
  610. eks_name: string;
  611. },
  612. {
  613. project_id: number;
  614. infra_id: number;
  615. }
  616. >("POST", (pathParams) => {
  617. return `/api/projects/${pathParams.project_id}/infra/${pathParams.infra_id}/eks/destroy`;
  618. });
  619. const destroyGKE = baseApi<
  620. {
  621. gke_name: string;
  622. },
  623. {
  624. project_id: number;
  625. infra_id: number;
  626. }
  627. >("POST", (pathParams) => {
  628. return `/api/projects/${pathParams.project_id}/infra/${pathParams.infra_id}/gke/destroy`;
  629. });
  630. const destroyDOKS = baseApi<
  631. {
  632. doks_name: string;
  633. },
  634. {
  635. project_id: number;
  636. infra_id: number;
  637. }
  638. >("POST", (pathParams) => {
  639. return `/api/projects/${pathParams.project_id}/infra/${pathParams.infra_id}/doks/destroy`;
  640. });
  641. const getRepoIntegrations = baseApi("GET", "/api/integrations/repo");
  642. const getRepos = baseApi<{}, { id: number }>("GET", (pathParams) => {
  643. return `/api/projects/${pathParams.id}/repos`;
  644. });
  645. const getSlackIntegrations = baseApi<{}, { id: number }>(
  646. "GET",
  647. (pathParams) => {
  648. return `/api/projects/${pathParams.id}/slack_integrations`;
  649. }
  650. );
  651. const getRevisions = baseApi<
  652. {
  653. namespace: string;
  654. cluster_id: number;
  655. storage: StorageType;
  656. },
  657. { id: number; name: string }
  658. >("GET", (pathParams) => {
  659. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/history`;
  660. });
  661. const getTemplateInfo = baseApi<
  662. {
  663. repo_url?: string;
  664. },
  665. { name: string; version: string }
  666. >("GET", (pathParams) => {
  667. return `/api/templates/${pathParams.name}/${pathParams.version}`;
  668. });
  669. const getTemplateUpgradeNotes = baseApi<
  670. {
  671. repo_url?: string;
  672. prev_version: string;
  673. },
  674. { name: string; version: string }
  675. >("GET", (pathParams) => {
  676. return `/api/templates/upgrade_notes/${pathParams.name}/${pathParams.version}`;
  677. });
  678. const getTemplates = baseApi<
  679. {
  680. repo_url?: string;
  681. },
  682. {}
  683. >("GET", "/api/templates");
  684. const getCapabilities = baseApi<{}, {}>("GET", () => {
  685. return `/api/capabilities`;
  686. });
  687. const linkGithubProject = baseApi<
  688. {},
  689. {
  690. project_id: number;
  691. }
  692. >("GET", (pathParams) => {
  693. return `/api/oauth/projects/${pathParams.project_id}/github`;
  694. });
  695. const getGithubAccess = baseApi<{}, {}>("GET", () => {
  696. return `/api/integrations/github-app/access`;
  697. });
  698. const logInUser = baseApi<{
  699. email: string;
  700. password: string;
  701. }>("POST", "/api/login");
  702. const logOutUser = baseApi("POST", "/api/logout");
  703. const provisionECR = baseApi<
  704. {
  705. ecr_name: string;
  706. aws_integration_id: string;
  707. },
  708. { id: number }
  709. >("POST", (pathParams) => {
  710. return `/api/projects/${pathParams.id}/provision/ecr`;
  711. });
  712. const provisionEKS = baseApi<
  713. {
  714. eks_name: string;
  715. aws_integration_id: string;
  716. machine_type: string;
  717. },
  718. { id: number }
  719. >("POST", (pathParams) => {
  720. return `/api/projects/${pathParams.id}/provision/eks`;
  721. });
  722. const registerUser = baseApi<{
  723. email: string;
  724. password: string;
  725. }>("POST", "/api/users");
  726. const rollbackChart = baseApi<
  727. {
  728. namespace: string;
  729. storage: StorageType;
  730. revision: number;
  731. },
  732. {
  733. id: number;
  734. name: string;
  735. cluster_id: number;
  736. }
  737. >("POST", (pathParams) => {
  738. let { id, name, cluster_id } = pathParams;
  739. return `/api/projects/${id}/releases/${name}/rollback?cluster_id=${cluster_id}`;
  740. });
  741. const uninstallTemplate = baseApi<
  742. {},
  743. {
  744. id: number;
  745. name: string;
  746. cluster_id: number;
  747. namespace: string;
  748. storage: StorageType;
  749. }
  750. >("POST", (pathParams) => {
  751. let { id, name, cluster_id, storage, namespace } = pathParams;
  752. return `/api/projects/${id}/delete/${name}?cluster_id=${cluster_id}&namespace=${namespace}&storage=${storage}`;
  753. });
  754. const updateUser = baseApi<
  755. {
  756. rawKubeConfig?: string;
  757. allowedContexts?: string[];
  758. },
  759. { id: number }
  760. >("PUT", (pathParams) => {
  761. return `/api/users/${pathParams.id}`;
  762. });
  763. const upgradeChartValues = baseApi<
  764. {
  765. namespace: string;
  766. storage: StorageType;
  767. values: string;
  768. version?: string;
  769. },
  770. {
  771. id: number;
  772. name: string;
  773. cluster_id: number;
  774. }
  775. >("POST", (pathParams) => {
  776. let { id, name, cluster_id } = pathParams;
  777. return `/api/projects/${id}/releases/${name}/upgrade?cluster_id=${cluster_id}`;
  778. });
  779. const listConfigMaps = baseApi<
  780. {
  781. namespace: string;
  782. cluster_id: number;
  783. },
  784. { id: number }
  785. >("GET", (pathParams) => {
  786. return `/api/projects/${pathParams.id}/k8s/configmap/list`;
  787. });
  788. const getConfigMap = baseApi<
  789. {
  790. name: string;
  791. namespace: string;
  792. cluster_id: number;
  793. },
  794. { id: number }
  795. >("GET", (pathParams) => {
  796. return `/api/projects/${pathParams.id}/k8s/configmap`;
  797. });
  798. const createConfigMap = baseApi<
  799. {
  800. name: string;
  801. namespace: string;
  802. variables: Record<string, string>;
  803. secret_variables?: Record<string, string>;
  804. },
  805. { id: number; cluster_id: number }
  806. >("POST", (pathParams) => {
  807. let { id, cluster_id } = pathParams;
  808. return `/api/projects/${id}/k8s/configmap/create?cluster_id=${cluster_id}`;
  809. });
  810. const updateConfigMap = baseApi<
  811. {
  812. name: string;
  813. namespace: string;
  814. variables: Record<string, string>;
  815. secret_variables?: Record<string, string>;
  816. },
  817. { id: number; cluster_id: number }
  818. >("POST", (pathParams) => {
  819. let { id, cluster_id } = pathParams;
  820. return `/api/projects/${id}/k8s/configmap/update?cluster_id=${cluster_id}`;
  821. });
  822. const renameConfigMap = baseApi<
  823. {
  824. name: string;
  825. namespace: string;
  826. new_name: string;
  827. },
  828. { id: number; cluster_id: number }
  829. >("POST", (pathParams) => {
  830. let { id, cluster_id } = pathParams;
  831. return `/api/projects/${id}/k8s/configmap/rename?cluster_id=${cluster_id}`;
  832. });
  833. const deleteConfigMap = baseApi<
  834. {
  835. name: string;
  836. namespace: string;
  837. cluster_id: number;
  838. },
  839. { id: number }
  840. >("DELETE", (pathParams) => {
  841. return `/api/projects/${pathParams.id}/k8s/configmap/delete`;
  842. });
  843. const createNamespace = baseApi<
  844. {
  845. name: string;
  846. },
  847. { id: number; cluster_id: number }
  848. >("POST", (pathParams) => {
  849. let { id, cluster_id } = pathParams;
  850. return `/api/projects/${id}/clusters/${cluster_id}/namespaces/create`;
  851. });
  852. const deleteNamespace = baseApi<
  853. {
  854. name: string;
  855. },
  856. {
  857. id: number;
  858. cluster_id: number;
  859. }
  860. >("DELETE", (pathParams) => {
  861. let { id, cluster_id } = pathParams;
  862. return `/api/projects/${id}/clusters/${cluster_id}/namespaces/delete`;
  863. });
  864. const deleteJob = baseApi<
  865. { cluster_id: number },
  866. { name: string; namespace: string; id: number }
  867. >("DELETE", (pathParams) => {
  868. let { id, name, namespace } = pathParams;
  869. return `/api/projects/${id}/k8s/jobs/${namespace}/${name}`;
  870. });
  871. const stopJob = baseApi<
  872. {},
  873. { name: string; namespace: string; id: number; cluster_id: number }
  874. >("POST", (pathParams) => {
  875. let { id, name, namespace, cluster_id } = pathParams;
  876. return `/api/projects/${id}/k8s/jobs/${namespace}/${name}/stop?cluster_id=${cluster_id}`;
  877. });
  878. const getAvailableRoles = baseApi<{}, { project_id: number }>(
  879. "GET",
  880. ({ project_id }) => `/api/projects/${project_id}/roles`
  881. );
  882. const updateInvite = baseApi<
  883. { kind: string },
  884. { project_id: number; invite_id: number }
  885. >(
  886. "POST",
  887. ({ project_id, invite_id }) =>
  888. `/api/projects/${project_id}/invites/${invite_id}`
  889. );
  890. const getCollaborators = baseApi<{}, { project_id: number }>(
  891. "GET",
  892. ({ project_id }) => `/api/projects/${project_id}/collaborators`
  893. );
  894. const updateCollaborator = baseApi<
  895. { kind: string },
  896. { project_id: number; user_id: number }
  897. >(
  898. "POST",
  899. ({ project_id, user_id }) => `/api/projects/${project_id}/roles/${user_id}`
  900. );
  901. const removeCollaborator = baseApi<{}, { project_id: number; user_id: number }>(
  902. "DELETE",
  903. ({ project_id, user_id }) => `/api/projects/${project_id}/roles/${user_id}`
  904. );
  905. const getPolicyDocument = baseApi<{}, { project_id: number }>(
  906. "GET",
  907. ({ project_id }) => `/api/projects/${project_id}/policy`
  908. );
  909. const createWebhookToken = baseApi<
  910. {},
  911. {
  912. project_id: number;
  913. chart_name: string;
  914. namespace: string;
  915. cluster_id: number;
  916. storage: StorageType;
  917. }
  918. >(
  919. "POST",
  920. ({ project_id, chart_name, namespace, cluster_id, storage }) =>
  921. `/api/projects/${project_id}/releases/${chart_name}/webhook_token?namespace=${namespace}&cluster_id=${cluster_id}&storage=${storage}`
  922. );
  923. // Bundle export to allow default api import (api.<method> is more readable)
  924. export default {
  925. checkAuth,
  926. connectECRRegistry,
  927. connectGCRRegistry,
  928. createAWSIntegration,
  929. overwriteAWSIntegration,
  930. createDOCR,
  931. createDOKS,
  932. createEmailVerification,
  933. createGCPIntegration,
  934. createGCR,
  935. createGKE,
  936. createInvite,
  937. createNamespace,
  938. createPasswordReset,
  939. createPasswordResetVerify,
  940. createPasswordResetFinalize,
  941. createProject,
  942. createConfigMap,
  943. deleteCluster,
  944. deleteConfigMap,
  945. deleteInvite,
  946. deleteNamespace,
  947. deletePod,
  948. deleteProject,
  949. deleteRegistryIntegration,
  950. deleteSlackIntegration,
  951. updateNotificationConfig,
  952. getNotificationConfig,
  953. createSubdomain,
  954. deployTemplate,
  955. deployAddon,
  956. destroyEKS,
  957. destroyGKE,
  958. destroyDOKS,
  959. detectBuildpack,
  960. getBranchContents,
  961. getBranches,
  962. getCapabilities,
  963. getChart,
  964. getCharts,
  965. getChartComponents,
  966. getChartControllers,
  967. getClusterIntegrations,
  968. getClusters,
  969. getCluster,
  970. getClusterNodes,
  971. getClusterNode,
  972. getConfigMap,
  973. generateGHAWorkflow,
  974. getGitRepoList,
  975. getGitRepos,
  976. getImageRepos,
  977. getImageTags,
  978. getInfra,
  979. getIngress,
  980. getInvites,
  981. getJobs,
  982. getJobStatus,
  983. getJobPods,
  984. getMatchingPods,
  985. getMetrics,
  986. getNamespaces,
  987. getNGINXIngresses,
  988. getOAuthIds,
  989. getPodEvents,
  990. getProcfileContents,
  991. getProjectClusters,
  992. getProjectRegistries,
  993. getProjectRepos,
  994. getProjects,
  995. getPrometheusIsInstalled,
  996. getRegistryIntegrations,
  997. getReleaseToken,
  998. getRepoIntegrations,
  999. getSlackIntegrations,
  1000. getRepos,
  1001. getRevisions,
  1002. getTemplateInfo,
  1003. getTemplateUpgradeNotes,
  1004. getTemplates,
  1005. linkGithubProject,
  1006. getGithubAccess,
  1007. listConfigMaps,
  1008. logInUser,
  1009. logOutUser,
  1010. provisionECR,
  1011. provisionEKS,
  1012. registerUser,
  1013. rollbackChart,
  1014. uninstallTemplate,
  1015. updateUser,
  1016. renameConfigMap,
  1017. updateConfigMap,
  1018. upgradeChartValues,
  1019. deleteJob,
  1020. stopJob,
  1021. updateInvite,
  1022. getAvailableRoles,
  1023. getCollaborators,
  1024. updateCollaborator,
  1025. removeCollaborator,
  1026. getPolicyDocument,
  1027. createWebhookToken,
  1028. };