api.tsx 26 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166
  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/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 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. namespace: string;
  253. }
  254. >("POST", (pathParams) => {
  255. const { name, namespace, cluster_id, project_id } = pathParams;
  256. return `/api/projects/${project_id}/ci/actions/generate?cluster_id=${cluster_id}&name=${name}&namespace=${namespace}`;
  257. });
  258. const deployTemplate = baseApi<
  259. {
  260. templateName: string;
  261. imageURL?: string;
  262. formValues?: any;
  263. storage: StorageType;
  264. namespace: string;
  265. name: string;
  266. githubActionConfig?: FullActionConfigType;
  267. },
  268. {
  269. id: number;
  270. cluster_id: number;
  271. name: string;
  272. version: string;
  273. repo_url?: string;
  274. }
  275. >("POST", (pathParams) => {
  276. let { cluster_id, id, name, version, repo_url } = pathParams;
  277. if (repo_url) {
  278. return `/api/projects/${id}/deploy/${name}/${version}?cluster_id=${cluster_id}&repo_url=${repo_url}`;
  279. }
  280. return `/api/projects/${id}/deploy/${name}/${version}?cluster_id=${cluster_id}`;
  281. });
  282. const deployAddon = baseApi<
  283. {
  284. templateName: string;
  285. formValues?: any;
  286. storage: StorageType;
  287. namespace: string;
  288. name: string;
  289. },
  290. {
  291. id: number;
  292. cluster_id: number;
  293. name: string;
  294. version: string;
  295. repo_url?: string;
  296. }
  297. >("POST", (pathParams) => {
  298. let { cluster_id, id, name, version, repo_url } = pathParams;
  299. return `/api/projects/${id}/deploy/addon/${name}/${version}?cluster_id=${cluster_id}&repo_url=${repo_url}`;
  300. });
  301. const destroyCluster = baseApi<
  302. {
  303. eks_name: string;
  304. },
  305. {
  306. project_id: number;
  307. infra_id: number;
  308. }
  309. >("POST", (pathParams) => {
  310. return `/api/projects/${pathParams.project_id}/infra/${pathParams.infra_id}/eks/destroy`;
  311. });
  312. const detectBuildpack = baseApi<
  313. {},
  314. {
  315. project_id: number;
  316. git_repo_id: number;
  317. kind: string;
  318. owner: string;
  319. name: string;
  320. branch: string;
  321. }
  322. >("GET", (pathParams) => {
  323. return `/api/projects/${pathParams.project_id}/gitrepos/${
  324. pathParams.git_repo_id
  325. }/repos/${pathParams.kind}/${pathParams.owner}/${
  326. pathParams.name
  327. }/${encodeURIComponent(pathParams.branch)}/buildpack/detect`;
  328. });
  329. const getBranchContents = baseApi<
  330. {
  331. dir: string;
  332. },
  333. {
  334. project_id: number;
  335. git_repo_id: number;
  336. kind: string;
  337. owner: string;
  338. name: string;
  339. branch: string;
  340. }
  341. >("GET", (pathParams) => {
  342. return `/api/projects/${pathParams.project_id}/gitrepos/${
  343. pathParams.git_repo_id
  344. }/repos/${pathParams.kind}/${pathParams.owner}/${
  345. pathParams.name
  346. }/${encodeURIComponent(pathParams.branch)}/contents`;
  347. });
  348. const getProcfileContents = baseApi<
  349. {
  350. path: string;
  351. },
  352. {
  353. project_id: number;
  354. git_repo_id: number;
  355. kind: string;
  356. owner: string;
  357. name: string;
  358. branch: string;
  359. }
  360. >("GET", (pathParams) => {
  361. return `/api/projects/${pathParams.project_id}/gitrepos/${
  362. pathParams.git_repo_id
  363. }/repos/${pathParams.kind}/${pathParams.owner}/${
  364. pathParams.name
  365. }/${encodeURIComponent(pathParams.branch)}/procfile`;
  366. });
  367. const getBranches = baseApi<
  368. {},
  369. {
  370. project_id: number;
  371. git_repo_id: number;
  372. kind: string;
  373. owner: string;
  374. name: string;
  375. }
  376. >("GET", (pathParams) => {
  377. return `/api/projects/${pathParams.project_id}/gitrepos/${pathParams.git_repo_id}/repos/${pathParams.kind}/${pathParams.owner}/${pathParams.name}/branches`;
  378. });
  379. const getChart = baseApi<
  380. {
  381. namespace: string;
  382. cluster_id: number;
  383. storage: StorageType;
  384. },
  385. { id: number; name: string; revision: number }
  386. >("GET", (pathParams) => {
  387. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/${pathParams.revision}`;
  388. });
  389. const getCharts = baseApi<
  390. {
  391. namespace: string;
  392. cluster_id: number;
  393. storage: StorageType;
  394. limit: number;
  395. skip: number;
  396. byDate: boolean;
  397. statusFilter: string[];
  398. },
  399. { id: number }
  400. >("GET", (pathParams) => {
  401. return `/api/projects/${pathParams.id}/releases`;
  402. });
  403. const getChartComponents = baseApi<
  404. {
  405. namespace: string;
  406. cluster_id: number;
  407. storage: StorageType;
  408. },
  409. { id: number; name: string; revision: number }
  410. >("GET", (pathParams) => {
  411. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/${pathParams.revision}/components`;
  412. });
  413. const getChartControllers = baseApi<
  414. {
  415. namespace: string;
  416. cluster_id: number;
  417. storage: StorageType;
  418. },
  419. { id: number; name: string; revision: number }
  420. >("GET", (pathParams) => {
  421. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/${pathParams.revision}/controllers`;
  422. });
  423. const getClusterIntegrations = baseApi("GET", "/api/integrations/cluster");
  424. const getClusters = baseApi<{}, { id: number }>("GET", (pathParams) => {
  425. return `/api/projects/${pathParams.id}/clusters`;
  426. });
  427. const getCluster = baseApi<
  428. {},
  429. {
  430. project_id: number;
  431. cluster_id: number;
  432. }
  433. >("GET", (pathParams) => {
  434. return `/api/projects/${pathParams.project_id}/clusters/${pathParams.cluster_id}`;
  435. });
  436. const getClusterNodes = baseApi<
  437. {},
  438. {
  439. project_id: number;
  440. cluster_id: number;
  441. }
  442. >("GET", (pathParams) => {
  443. return `/api/projects/${pathParams.project_id}/clusters/${pathParams.cluster_id}/nodes`;
  444. });
  445. const getClusterNode = baseApi<
  446. {},
  447. {
  448. project_id: number;
  449. cluster_id: number;
  450. nodeName: string;
  451. }
  452. >(
  453. "GET",
  454. (pathParams) =>
  455. `/api/projects/${pathParams.project_id}/clusters/${pathParams.cluster_id}/node/${pathParams.nodeName}`
  456. );
  457. const getGitRepoList = baseApi<
  458. {},
  459. {
  460. project_id: number;
  461. git_repo_id: number;
  462. }
  463. >("GET", (pathParams) => {
  464. return `/api/projects/${pathParams.project_id}/gitrepos/${pathParams.git_repo_id}/repos`;
  465. });
  466. const getGitRepos = baseApi<
  467. {},
  468. {
  469. project_id: number;
  470. }
  471. >("GET", (pathParams) => {
  472. return `/api/projects/${pathParams.project_id}/gitrepos`;
  473. });
  474. const getImageRepos = baseApi<
  475. {},
  476. {
  477. project_id: number;
  478. registry_id: number;
  479. }
  480. >("GET", (pathParams) => {
  481. return `/api/projects/${pathParams.project_id}/registries/${pathParams.registry_id}/repositories`;
  482. });
  483. const getImageTags = baseApi<
  484. {},
  485. {
  486. project_id: number;
  487. registry_id: number;
  488. repo_name: string;
  489. }
  490. >("GET", (pathParams) => {
  491. return `/api/projects/${pathParams.project_id}/registries/${pathParams.registry_id}/repositories/${pathParams.repo_name}`;
  492. });
  493. const getInfra = baseApi<
  494. {},
  495. {
  496. project_id: number;
  497. }
  498. >("GET", (pathParams) => {
  499. return `/api/projects/${pathParams.project_id}/infra`;
  500. });
  501. const getIngress = baseApi<
  502. {
  503. cluster_id: number;
  504. },
  505. { name: string; namespace: string; id: number }
  506. >("GET", (pathParams) => {
  507. return `/api/projects/${pathParams.id}/k8s/${pathParams.namespace}/ingress/${pathParams.name}`;
  508. });
  509. const getInvites = baseApi<{}, { id: number }>("GET", (pathParams) => {
  510. return `/api/projects/${pathParams.id}/invites`;
  511. });
  512. const getJobs = baseApi<
  513. {
  514. cluster_id: number;
  515. },
  516. { chart: string; namespace: string; release_name: string; id: number }
  517. >("GET", (pathParams) => {
  518. return `/api/projects/${pathParams.id}/k8s/${pathParams.namespace}/${pathParams.chart}/${pathParams.release_name}/jobs`;
  519. });
  520. const getJobStatus = baseApi<
  521. {
  522. cluster_id: number;
  523. },
  524. { name: string; namespace: string; id: number }
  525. >("GET", (pathParams) => {
  526. return `/api/projects/${pathParams.id}/k8s/${pathParams.namespace}/${pathParams.name}/jobs/status`;
  527. });
  528. const getJobPods = baseApi<
  529. {
  530. cluster_id: number;
  531. },
  532. { name: string; namespace: string; id: number }
  533. >("GET", (pathParams) => {
  534. return `/api/projects/${pathParams.id}/k8s/jobs/${pathParams.namespace}/${pathParams.name}/pods`;
  535. });
  536. const getMatchingPods = baseApi<
  537. {
  538. cluster_id: number;
  539. namespace: string;
  540. selectors: string[];
  541. },
  542. { id: number }
  543. >("GET", (pathParams) => {
  544. return `/api/projects/${pathParams.id}/k8s/pods`;
  545. });
  546. const getMetrics = baseApi<
  547. {
  548. cluster_id: number;
  549. metric: string;
  550. shouldsum: boolean;
  551. pods?: string[];
  552. kind?: string; // the controller kind
  553. name?: string;
  554. percentile?: number;
  555. namespace: string;
  556. startrange: number;
  557. endrange: number;
  558. resolution: string;
  559. },
  560. { id: number }
  561. >("GET", (pathParams) => {
  562. return `/api/projects/${pathParams.id}/k8s/metrics`;
  563. });
  564. const getNamespaces = baseApi<
  565. {
  566. cluster_id: number;
  567. },
  568. { id: number }
  569. >("GET", (pathParams) => {
  570. return `/api/projects/${pathParams.id}/k8s/namespaces`;
  571. });
  572. const getNGINXIngresses = baseApi<
  573. {
  574. cluster_id: number;
  575. },
  576. { id: number }
  577. >("GET", (pathParams) => {
  578. return `/api/projects/${pathParams.id}/k8s/prometheus/ingresses`;
  579. });
  580. const getOAuthIds = baseApi<
  581. {},
  582. {
  583. project_id: number;
  584. }
  585. >("GET", (pathParams) => {
  586. return `/api/projects/${pathParams.project_id}/integrations/oauth`;
  587. });
  588. const getProjectClusters = baseApi<{}, { id: number }>("GET", (pathParams) => {
  589. return `/api/projects/${pathParams.id}/clusters`;
  590. });
  591. const getProjectRegistries = baseApi<{}, { id: number }>(
  592. "GET",
  593. (pathParams) => {
  594. return `/api/projects/${pathParams.id}/registries`;
  595. }
  596. );
  597. const getProjectRepos = baseApi<{}, { id: number }>("GET", (pathParams) => {
  598. return `/api/projects/${pathParams.id}/repos`;
  599. });
  600. const getProjects = baseApi<{}, { id: number }>("GET", (pathParams) => {
  601. return `/api/users/${pathParams.id}/projects`;
  602. });
  603. const getPrometheusIsInstalled = baseApi<
  604. {
  605. cluster_id: number;
  606. },
  607. { id: number }
  608. >("GET", (pathParams) => {
  609. return `/api/projects/${pathParams.id}/k8s/prometheus/detect`;
  610. });
  611. const getRegistryIntegrations = baseApi("GET", "/api/integrations/registry");
  612. const getReleaseToken = baseApi<
  613. {
  614. namespace: string;
  615. cluster_id: number;
  616. storage: StorageType;
  617. },
  618. { name: string; id: number }
  619. >("GET", (pathParams) => {
  620. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/webhook_token`;
  621. });
  622. const destroyEKS = baseApi<
  623. {
  624. eks_name: string;
  625. },
  626. {
  627. project_id: number;
  628. infra_id: number;
  629. }
  630. >("POST", (pathParams) => {
  631. return `/api/projects/${pathParams.project_id}/infra/${pathParams.infra_id}/eks/destroy`;
  632. });
  633. const destroyGKE = baseApi<
  634. {
  635. gke_name: string;
  636. },
  637. {
  638. project_id: number;
  639. infra_id: number;
  640. }
  641. >("POST", (pathParams) => {
  642. return `/api/projects/${pathParams.project_id}/infra/${pathParams.infra_id}/gke/destroy`;
  643. });
  644. const destroyDOKS = baseApi<
  645. {
  646. doks_name: string;
  647. },
  648. {
  649. project_id: number;
  650. infra_id: number;
  651. }
  652. >("POST", (pathParams) => {
  653. return `/api/projects/${pathParams.project_id}/infra/${pathParams.infra_id}/doks/destroy`;
  654. });
  655. const getRepoIntegrations = baseApi("GET", "/api/integrations/repo");
  656. const getRepos = baseApi<{}, { id: number }>("GET", (pathParams) => {
  657. return `/api/projects/${pathParams.id}/repos`;
  658. });
  659. const getSlackIntegrations = baseApi<{}, { id: number }>(
  660. "GET",
  661. (pathParams) => {
  662. return `/api/projects/${pathParams.id}/slack_integrations`;
  663. }
  664. );
  665. const getRevisions = baseApi<
  666. {
  667. namespace: string;
  668. cluster_id: number;
  669. storage: StorageType;
  670. },
  671. { id: number; name: string }
  672. >("GET", (pathParams) => {
  673. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/history`;
  674. });
  675. const getTemplateInfo = baseApi<
  676. {
  677. repo_url?: string;
  678. },
  679. { name: string; version: string }
  680. >("GET", (pathParams) => {
  681. return `/api/templates/${pathParams.name}/${pathParams.version}`;
  682. });
  683. const getTemplateUpgradeNotes = baseApi<
  684. {
  685. repo_url?: string;
  686. prev_version: string;
  687. },
  688. { name: string; version: string }
  689. >("GET", (pathParams) => {
  690. return `/api/templates/upgrade_notes/${pathParams.name}/${pathParams.version}`;
  691. });
  692. const getTemplates = baseApi<
  693. {
  694. repo_url?: string;
  695. },
  696. {}
  697. >("GET", "/api/templates");
  698. const getUser = baseApi<{}, { id: number }>("GET", (pathParams) => {
  699. return `/api/users/${pathParams.id}`;
  700. });
  701. const getCapabilities = baseApi<{}, {}>("GET", () => {
  702. return `/api/capabilities`;
  703. });
  704. const getWelcome = baseApi<{
  705. email: string,
  706. isCompany: boolean,
  707. company: string,
  708. role: string
  709. }, {}>("GET", () => {
  710. return `/api/welcome`;
  711. });
  712. const linkGithubProject = baseApi<
  713. {},
  714. {
  715. project_id: number;
  716. }
  717. >("GET", (pathParams) => {
  718. return `/api/oauth/projects/${pathParams.project_id}/github`;
  719. });
  720. const getGithubAccess = baseApi<{}, {}>("GET", () => {
  721. return `/api/integrations/github-app/access`;
  722. });
  723. const logInUser = baseApi<{
  724. email: string;
  725. password: string;
  726. }>("POST", "/api/login");
  727. const logOutUser = baseApi("POST", "/api/logout");
  728. const provisionECR = baseApi<
  729. {
  730. ecr_name: string;
  731. aws_integration_id: string;
  732. },
  733. { id: number }
  734. >("POST", (pathParams) => {
  735. return `/api/projects/${pathParams.id}/provision/ecr`;
  736. });
  737. const provisionEKS = baseApi<
  738. {
  739. eks_name: string;
  740. aws_integration_id: string;
  741. machine_type: string;
  742. },
  743. { id: number }
  744. >("POST", (pathParams) => {
  745. return `/api/projects/${pathParams.id}/provision/eks`;
  746. });
  747. const registerUser = baseApi<{
  748. email: string;
  749. password: string;
  750. }>("POST", "/api/users");
  751. const rollbackChart = baseApi<
  752. {
  753. namespace: string;
  754. storage: StorageType;
  755. revision: number;
  756. },
  757. {
  758. id: number;
  759. name: string;
  760. cluster_id: number;
  761. }
  762. >("POST", (pathParams) => {
  763. let { id, name, cluster_id } = pathParams;
  764. return `/api/projects/${id}/releases/${name}/rollback?cluster_id=${cluster_id}`;
  765. });
  766. const uninstallTemplate = baseApi<
  767. {},
  768. {
  769. id: number;
  770. name: string;
  771. cluster_id: number;
  772. namespace: string;
  773. storage: StorageType;
  774. }
  775. >("POST", (pathParams) => {
  776. let { id, name, cluster_id, storage, namespace } = pathParams;
  777. return `/api/projects/${id}/delete/${name}?cluster_id=${cluster_id}&namespace=${namespace}&storage=${storage}`;
  778. });
  779. const updateUser = baseApi<
  780. {
  781. rawKubeConfig?: string;
  782. allowedContexts?: string[];
  783. },
  784. { id: number }
  785. >("PUT", (pathParams) => {
  786. return `/api/users/${pathParams.id}`;
  787. });
  788. const upgradeChartValues = baseApi<
  789. {
  790. namespace: string;
  791. storage: StorageType;
  792. values: string;
  793. version?: string;
  794. },
  795. {
  796. id: number;
  797. name: string;
  798. cluster_id: number;
  799. }
  800. >("POST", (pathParams) => {
  801. let { id, name, cluster_id } = pathParams;
  802. return `/api/projects/${id}/releases/${name}/upgrade?cluster_id=${cluster_id}`;
  803. });
  804. const listConfigMaps = baseApi<
  805. {
  806. namespace: string;
  807. cluster_id: number;
  808. },
  809. { id: number }
  810. >("GET", (pathParams) => {
  811. return `/api/projects/${pathParams.id}/k8s/configmap/list`;
  812. });
  813. const getConfigMap = baseApi<
  814. {
  815. name: string;
  816. namespace: string;
  817. cluster_id: number;
  818. },
  819. { id: number }
  820. >("GET", (pathParams) => {
  821. return `/api/projects/${pathParams.id}/k8s/configmap`;
  822. });
  823. const createConfigMap = baseApi<
  824. {
  825. name: string;
  826. namespace: string;
  827. variables: Record<string, string>;
  828. secret_variables?: Record<string, string>;
  829. },
  830. { id: number; cluster_id: number }
  831. >("POST", (pathParams) => {
  832. let { id, cluster_id } = pathParams;
  833. return `/api/projects/${id}/k8s/configmap/create?cluster_id=${cluster_id}`;
  834. });
  835. const updateConfigMap = baseApi<
  836. {
  837. name: string;
  838. namespace: string;
  839. variables: Record<string, string>;
  840. secret_variables?: Record<string, string>;
  841. },
  842. { id: number; cluster_id: number }
  843. >("POST", (pathParams) => {
  844. let { id, cluster_id } = pathParams;
  845. return `/api/projects/${id}/k8s/configmap/update?cluster_id=${cluster_id}`;
  846. });
  847. const renameConfigMap = baseApi<
  848. {
  849. name: string;
  850. namespace: string;
  851. new_name: string;
  852. },
  853. { id: number; cluster_id: number }
  854. >("POST", (pathParams) => {
  855. let { id, cluster_id } = pathParams;
  856. return `/api/projects/${id}/k8s/configmap/rename?cluster_id=${cluster_id}`;
  857. });
  858. const deleteConfigMap = baseApi<
  859. {
  860. name: string;
  861. namespace: string;
  862. cluster_id: number;
  863. },
  864. { id: number }
  865. >("DELETE", (pathParams) => {
  866. return `/api/projects/${pathParams.id}/k8s/configmap/delete`;
  867. });
  868. const createNamespace = baseApi<
  869. {
  870. name: string;
  871. },
  872. { id: number; cluster_id: number }
  873. >("POST", (pathParams) => {
  874. let { id, cluster_id } = pathParams;
  875. return `/api/projects/${id}/k8s/namespaces/create?cluster_id=${cluster_id}`;
  876. });
  877. const deleteNamespace = baseApi<
  878. {
  879. name: string;
  880. cluster_id: number;
  881. },
  882. { id: number }
  883. >("DELETE", (pathParams) => {
  884. let { id } = pathParams;
  885. return `/api/projects/${id}/k8s/namespaces/delete`;
  886. });
  887. const deleteJob = baseApi<
  888. { cluster_id: number },
  889. { name: string; namespace: string; id: number }
  890. >("DELETE", (pathParams) => {
  891. let { id, name, namespace } = pathParams;
  892. return `/api/projects/${id}/k8s/jobs/${namespace}/${name}`;
  893. });
  894. const stopJob = baseApi<
  895. {},
  896. { name: string; namespace: string; id: number; cluster_id: number }
  897. >("POST", (pathParams) => {
  898. let { id, name, namespace, cluster_id } = pathParams;
  899. return `/api/projects/${id}/k8s/jobs/${namespace}/${name}/stop?cluster_id=${cluster_id}`;
  900. });
  901. const getAvailableRoles = baseApi<{}, { project_id: number }>(
  902. "GET",
  903. ({ project_id }) => `/api/projects/${project_id}/roles`
  904. );
  905. const updateInvite = baseApi<
  906. { kind: string },
  907. { project_id: number; invite_id: number }
  908. >(
  909. "POST",
  910. ({ project_id, invite_id }) =>
  911. `/api/projects/${project_id}/invites/${invite_id}`
  912. );
  913. const getCollaborators = baseApi<{}, { project_id: number }>(
  914. "GET",
  915. ({ project_id }) => `/api/projects/${project_id}/collaborators`
  916. );
  917. const updateCollaborator = baseApi<
  918. { kind: string },
  919. { project_id: number; user_id: number }
  920. >(
  921. "POST",
  922. ({ project_id, user_id }) => `/api/projects/${project_id}/roles/${user_id}`
  923. );
  924. const removeCollaborator = baseApi<{}, { project_id: number; user_id: number }>(
  925. "DELETE",
  926. ({ project_id, user_id }) => `/api/projects/${project_id}/roles/${user_id}`
  927. );
  928. const getPolicyDocument = baseApi<{}, { project_id: number }>(
  929. "GET",
  930. ({ project_id }) => `/api/projects/${project_id}/policy`
  931. );
  932. const createWebhookToken = baseApi<
  933. {},
  934. {
  935. project_id: number;
  936. chart_name: string;
  937. namespace: string;
  938. cluster_id: number;
  939. storage: StorageType;
  940. }
  941. >(
  942. "POST",
  943. ({ project_id, chart_name, namespace, cluster_id, storage }) =>
  944. `/api/projects/${project_id}/releases/${chart_name}/webhook_token?namespace=${namespace}&cluster_id=${cluster_id}&storage=${storage}`
  945. );
  946. // Bundle export to allow default api import (api.<method> is more readable)
  947. export default {
  948. checkAuth,
  949. connectECRRegistry,
  950. connectGCRRegistry,
  951. createAWSIntegration,
  952. overwriteAWSIntegration,
  953. createDOCR,
  954. createDOKS,
  955. createEmailVerification,
  956. createGCPIntegration,
  957. createGCR,
  958. createGKE,
  959. createInvite,
  960. createNamespace,
  961. createPasswordReset,
  962. createPasswordResetVerify,
  963. createPasswordResetFinalize,
  964. createProject,
  965. createConfigMap,
  966. deleteCluster,
  967. deleteConfigMap,
  968. deleteInvite,
  969. deleteNamespace,
  970. deletePod,
  971. deleteProject,
  972. deleteRegistryIntegration,
  973. deleteSlackIntegration,
  974. updateNotificationConfig,
  975. getNotificationConfig,
  976. createSubdomain,
  977. deployTemplate,
  978. deployAddon,
  979. destroyEKS,
  980. destroyGKE,
  981. destroyDOKS,
  982. detectBuildpack,
  983. getBranchContents,
  984. getBranches,
  985. getCapabilities,
  986. getWelcome,
  987. getChart,
  988. getCharts,
  989. getChartComponents,
  990. getChartControllers,
  991. getClusterIntegrations,
  992. getClusters,
  993. getCluster,
  994. getClusterNodes,
  995. getClusterNode,
  996. getConfigMap,
  997. generateGHAWorkflow,
  998. getGitRepoList,
  999. getGitRepos,
  1000. getImageRepos,
  1001. getImageTags,
  1002. getInfra,
  1003. getIngress,
  1004. getInvites,
  1005. getJobs,
  1006. getJobStatus,
  1007. getJobPods,
  1008. getMatchingPods,
  1009. getMetrics,
  1010. getNamespaces,
  1011. getNGINXIngresses,
  1012. getOAuthIds,
  1013. getPodEvents,
  1014. getProcfileContents,
  1015. getProjectClusters,
  1016. getProjectRegistries,
  1017. getProjectRepos,
  1018. getProjects,
  1019. getPrometheusIsInstalled,
  1020. getRegistryIntegrations,
  1021. getReleaseToken,
  1022. getRepoIntegrations,
  1023. getSlackIntegrations,
  1024. getRepos,
  1025. getRevisions,
  1026. getTemplateInfo,
  1027. getTemplateUpgradeNotes,
  1028. getTemplates,
  1029. getUser,
  1030. linkGithubProject,
  1031. getGithubAccess,
  1032. listConfigMaps,
  1033. logInUser,
  1034. logOutUser,
  1035. provisionECR,
  1036. provisionEKS,
  1037. registerUser,
  1038. rollbackChart,
  1039. uninstallTemplate,
  1040. updateUser,
  1041. renameConfigMap,
  1042. updateConfigMap,
  1043. upgradeChartValues,
  1044. deleteJob,
  1045. stopJob,
  1046. updateInvite,
  1047. getAvailableRoles,
  1048. getCollaborators,
  1049. updateCollaborator,
  1050. removeCollaborator,
  1051. getPolicyDocument,
  1052. createWebhookToken,
  1053. };