api.tsx 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143
  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. }
  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. cluster_id: number;
  554. },
  555. { id: number }
  556. >("GET", (pathParams) => {
  557. return `/api/projects/${pathParams.id}/k8s/namespaces`;
  558. });
  559. const getNGINXIngresses = baseApi<
  560. {
  561. cluster_id: number;
  562. },
  563. { id: number }
  564. >("GET", (pathParams) => {
  565. return `/api/projects/${pathParams.id}/k8s/prometheus/ingresses`;
  566. });
  567. const getOAuthIds = baseApi<
  568. {},
  569. {
  570. project_id: number;
  571. }
  572. >("GET", (pathParams) => {
  573. return `/api/projects/${pathParams.project_id}/integrations/oauth`;
  574. });
  575. const getProjectClusters = baseApi<{}, { id: number }>("GET", (pathParams) => {
  576. return `/api/projects/${pathParams.id}/clusters`;
  577. });
  578. const getProjectRegistries = baseApi<{}, { id: number }>(
  579. "GET",
  580. (pathParams) => {
  581. return `/api/projects/${pathParams.id}/registries`;
  582. }
  583. );
  584. const getProjectRepos = baseApi<{}, { id: number }>("GET", (pathParams) => {
  585. return `/api/projects/${pathParams.id}/repos`;
  586. });
  587. const getProjects = baseApi<{}, { id: number }>("GET", (pathParams) => {
  588. return `/api/users/${pathParams.id}/projects`;
  589. });
  590. const getPrometheusIsInstalled = baseApi<
  591. {
  592. cluster_id: number;
  593. },
  594. { id: number }
  595. >("GET", (pathParams) => {
  596. return `/api/projects/${pathParams.id}/k8s/prometheus/detect`;
  597. });
  598. const getRegistryIntegrations = baseApi("GET", "/api/integrations/registry");
  599. const getReleaseToken = baseApi<
  600. {
  601. namespace: string;
  602. cluster_id: number;
  603. storage: StorageType;
  604. },
  605. { name: string; id: number }
  606. >("GET", (pathParams) => {
  607. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/webhook_token`;
  608. });
  609. const destroyEKS = baseApi<
  610. {
  611. eks_name: string;
  612. },
  613. {
  614. project_id: number;
  615. infra_id: number;
  616. }
  617. >("POST", (pathParams) => {
  618. return `/api/projects/${pathParams.project_id}/infra/${pathParams.infra_id}/eks/destroy`;
  619. });
  620. const destroyGKE = baseApi<
  621. {
  622. gke_name: string;
  623. },
  624. {
  625. project_id: number;
  626. infra_id: number;
  627. }
  628. >("POST", (pathParams) => {
  629. return `/api/projects/${pathParams.project_id}/infra/${pathParams.infra_id}/gke/destroy`;
  630. });
  631. const destroyDOKS = baseApi<
  632. {
  633. doks_name: string;
  634. },
  635. {
  636. project_id: number;
  637. infra_id: number;
  638. }
  639. >("POST", (pathParams) => {
  640. return `/api/projects/${pathParams.project_id}/infra/${pathParams.infra_id}/doks/destroy`;
  641. });
  642. const getRepoIntegrations = baseApi("GET", "/api/integrations/repo");
  643. const getRepos = baseApi<{}, { id: number }>("GET", (pathParams) => {
  644. return `/api/projects/${pathParams.id}/repos`;
  645. });
  646. const getSlackIntegrations = baseApi<{}, { id: number }>(
  647. "GET",
  648. (pathParams) => {
  649. return `/api/projects/${pathParams.id}/slack_integrations`;
  650. }
  651. );
  652. const getRevisions = baseApi<
  653. {
  654. namespace: string;
  655. cluster_id: number;
  656. storage: StorageType;
  657. },
  658. { id: number; name: string }
  659. >("GET", (pathParams) => {
  660. return `/api/projects/${pathParams.id}/releases/${pathParams.name}/history`;
  661. });
  662. const getTemplateInfo = baseApi<
  663. {
  664. repo_url?: string;
  665. },
  666. { name: string; version: string }
  667. >("GET", (pathParams) => {
  668. return `/api/templates/${pathParams.name}/${pathParams.version}`;
  669. });
  670. const getTemplateUpgradeNotes = baseApi<
  671. {
  672. repo_url?: string;
  673. prev_version: string;
  674. },
  675. { name: string; version: string }
  676. >("GET", (pathParams) => {
  677. return `/api/templates/upgrade_notes/${pathParams.name}/${pathParams.version}`;
  678. });
  679. const getTemplates = baseApi<
  680. {
  681. repo_url?: string;
  682. },
  683. {}
  684. >("GET", "/api/templates");
  685. const getUser = baseApi<{}, { id: number }>("GET", (pathParams) => {
  686. return `/api/users/${pathParams.id}`;
  687. });
  688. const getCapabilities = baseApi<{}, {}>("GET", () => {
  689. return `/api/capabilities`;
  690. });
  691. const linkGithubProject = baseApi<
  692. {},
  693. {
  694. project_id: number;
  695. }
  696. >("GET", (pathParams) => {
  697. return `/api/oauth/projects/${pathParams.project_id}/github`;
  698. });
  699. const getGithubAccess = baseApi<{}, {}>("GET", () => {
  700. return `/api/integrations/github-app/access`;
  701. });
  702. const logInUser = baseApi<{
  703. email: string;
  704. password: string;
  705. }>("POST", "/api/login");
  706. const logOutUser = baseApi("POST", "/api/logout");
  707. const provisionECR = baseApi<
  708. {
  709. ecr_name: string;
  710. aws_integration_id: string;
  711. },
  712. { id: number }
  713. >("POST", (pathParams) => {
  714. return `/api/projects/${pathParams.id}/provision/ecr`;
  715. });
  716. const provisionEKS = baseApi<
  717. {
  718. eks_name: string;
  719. aws_integration_id: string;
  720. machine_type: string;
  721. },
  722. { id: number }
  723. >("POST", (pathParams) => {
  724. return `/api/projects/${pathParams.id}/provision/eks`;
  725. });
  726. const registerUser = baseApi<{
  727. email: string;
  728. password: string;
  729. }>("POST", "/api/users");
  730. const rollbackChart = baseApi<
  731. {
  732. namespace: string;
  733. storage: StorageType;
  734. revision: number;
  735. },
  736. {
  737. id: number;
  738. name: string;
  739. cluster_id: number;
  740. }
  741. >("POST", (pathParams) => {
  742. let { id, name, cluster_id } = pathParams;
  743. return `/api/projects/${id}/releases/${name}/rollback?cluster_id=${cluster_id}`;
  744. });
  745. const uninstallTemplate = baseApi<
  746. {},
  747. {
  748. id: number;
  749. name: string;
  750. cluster_id: number;
  751. namespace: string;
  752. storage: StorageType;
  753. }
  754. >("POST", (pathParams) => {
  755. let { id, name, cluster_id, storage, namespace } = pathParams;
  756. return `/api/projects/${id}/delete/${name}?cluster_id=${cluster_id}&namespace=${namespace}&storage=${storage}`;
  757. });
  758. const updateUser = baseApi<
  759. {
  760. rawKubeConfig?: string;
  761. allowedContexts?: string[];
  762. },
  763. { id: number }
  764. >("PUT", (pathParams) => {
  765. return `/api/users/${pathParams.id}`;
  766. });
  767. const upgradeChartValues = baseApi<
  768. {
  769. namespace: string;
  770. storage: StorageType;
  771. values: string;
  772. version?: string;
  773. },
  774. {
  775. id: number;
  776. name: string;
  777. cluster_id: number;
  778. }
  779. >("POST", (pathParams) => {
  780. let { id, name, cluster_id } = pathParams;
  781. return `/api/projects/${id}/releases/${name}/upgrade?cluster_id=${cluster_id}`;
  782. });
  783. const listConfigMaps = baseApi<
  784. {
  785. namespace: string;
  786. cluster_id: number;
  787. },
  788. { id: number }
  789. >("GET", (pathParams) => {
  790. return `/api/projects/${pathParams.id}/k8s/configmap/list`;
  791. });
  792. const getConfigMap = baseApi<
  793. {
  794. name: string;
  795. namespace: string;
  796. cluster_id: number;
  797. },
  798. { id: number }
  799. >("GET", (pathParams) => {
  800. return `/api/projects/${pathParams.id}/k8s/configmap`;
  801. });
  802. const createConfigMap = baseApi<
  803. {
  804. name: string;
  805. namespace: string;
  806. variables: Record<string, string>;
  807. secret_variables?: Record<string, string>;
  808. },
  809. { id: number; cluster_id: number }
  810. >("POST", (pathParams) => {
  811. let { id, cluster_id } = pathParams;
  812. return `/api/projects/${id}/k8s/configmap/create?cluster_id=${cluster_id}`;
  813. });
  814. const updateConfigMap = baseApi<
  815. {
  816. name: string;
  817. namespace: string;
  818. variables: Record<string, string>;
  819. secret_variables?: Record<string, string>;
  820. },
  821. { id: number; cluster_id: number }
  822. >("POST", (pathParams) => {
  823. let { id, cluster_id } = pathParams;
  824. return `/api/projects/${id}/k8s/configmap/update?cluster_id=${cluster_id}`;
  825. });
  826. const renameConfigMap = baseApi<
  827. {
  828. name: string;
  829. namespace: string;
  830. new_name: string;
  831. },
  832. { id: number; cluster_id: number }
  833. >("POST", (pathParams) => {
  834. let { id, cluster_id } = pathParams;
  835. return `/api/projects/${id}/k8s/configmap/rename?cluster_id=${cluster_id}`;
  836. });
  837. const deleteConfigMap = baseApi<
  838. {
  839. name: string;
  840. namespace: string;
  841. cluster_id: number;
  842. },
  843. { id: number }
  844. >("DELETE", (pathParams) => {
  845. return `/api/projects/${pathParams.id}/k8s/configmap/delete`;
  846. });
  847. const createNamespace = baseApi<
  848. {
  849. name: string;
  850. },
  851. { id: number; cluster_id: number }
  852. >("POST", (pathParams) => {
  853. let { id, cluster_id } = pathParams;
  854. return `/api/projects/${id}/k8s/namespaces/create?cluster_id=${cluster_id}`;
  855. });
  856. const deleteNamespace = baseApi<
  857. {
  858. name: string;
  859. cluster_id: number;
  860. },
  861. { id: number }
  862. >("DELETE", (pathParams) => {
  863. let { id } = pathParams;
  864. return `/api/projects/${id}/k8s/namespaces/delete`;
  865. });
  866. const deleteJob = baseApi<
  867. { cluster_id: number },
  868. { name: string; namespace: string; id: number }
  869. >("DELETE", (pathParams) => {
  870. let { id, name, namespace } = pathParams;
  871. return `/api/projects/${id}/k8s/jobs/${namespace}/${name}`;
  872. });
  873. const stopJob = baseApi<
  874. {},
  875. { name: string; namespace: string; id: number; cluster_id: number }
  876. >("POST", (pathParams) => {
  877. let { id, name, namespace, cluster_id } = pathParams;
  878. return `/api/projects/${id}/k8s/jobs/${namespace}/${name}/stop?cluster_id=${cluster_id}`;
  879. });
  880. const getAvailableRoles = baseApi<{}, { project_id: number }>(
  881. "GET",
  882. ({ project_id }) => `/api/projects/${project_id}/roles`
  883. );
  884. const updateInvite = baseApi<
  885. { kind: string },
  886. { project_id: number; invite_id: number }
  887. >(
  888. "POST",
  889. ({ project_id, invite_id }) =>
  890. `/api/projects/${project_id}/invites/${invite_id}`
  891. );
  892. const getCollaborators = baseApi<{}, { project_id: number }>(
  893. "GET",
  894. ({ project_id }) => `/api/projects/${project_id}/collaborators`
  895. );
  896. const updateCollaborator = baseApi<
  897. { kind: string },
  898. { project_id: number; user_id: number }
  899. >(
  900. "POST",
  901. ({ project_id, user_id }) => `/api/projects/${project_id}/roles/${user_id}`
  902. );
  903. const removeCollaborator = baseApi<{}, { project_id: number; user_id: number }>(
  904. "DELETE",
  905. ({ project_id, user_id }) => `/api/projects/${project_id}/roles/${user_id}`
  906. );
  907. const getPolicyDocument = baseApi<{}, { project_id: number }>(
  908. "GET",
  909. ({ project_id }) => `/api/projects/${project_id}/policy`
  910. );
  911. const createWebhookToken = baseApi<
  912. {},
  913. {
  914. project_id: number;
  915. chart_name: string;
  916. namespace: string;
  917. cluster_id: number;
  918. storage: StorageType;
  919. }
  920. >(
  921. "POST",
  922. ({ project_id, chart_name, namespace, cluster_id, storage }) =>
  923. `/api/projects/${project_id}/releases/${chart_name}/webhook_token?namespace=${namespace}&cluster_id=${cluster_id}&storage=${storage}`
  924. );
  925. // Bundle export to allow default api import (api.<method> is more readable)
  926. export default {
  927. checkAuth,
  928. connectECRRegistry,
  929. connectGCRRegistry,
  930. createAWSIntegration,
  931. overwriteAWSIntegration,
  932. createDOCR,
  933. createDOKS,
  934. createEmailVerification,
  935. createGCPIntegration,
  936. createGCR,
  937. createGKE,
  938. createInvite,
  939. createNamespace,
  940. createPasswordReset,
  941. createPasswordResetVerify,
  942. createPasswordResetFinalize,
  943. createProject,
  944. createConfigMap,
  945. deleteCluster,
  946. deleteConfigMap,
  947. deleteInvite,
  948. deleteNamespace,
  949. deletePod,
  950. deleteProject,
  951. deleteRegistryIntegration,
  952. deleteSlackIntegration,
  953. updateNotificationConfig,
  954. getNotificationConfig,
  955. createSubdomain,
  956. deployTemplate,
  957. deployAddon,
  958. destroyEKS,
  959. destroyGKE,
  960. destroyDOKS,
  961. detectBuildpack,
  962. getBranchContents,
  963. getBranches,
  964. getCapabilities,
  965. getChart,
  966. getCharts,
  967. getChartComponents,
  968. getChartControllers,
  969. getClusterIntegrations,
  970. getClusters,
  971. getCluster,
  972. getClusterNodes,
  973. getClusterNode,
  974. getConfigMap,
  975. generateGHAWorkflow,
  976. getGitRepoList,
  977. getGitRepos,
  978. getImageRepos,
  979. getImageTags,
  980. getInfra,
  981. getIngress,
  982. getInvites,
  983. getJobs,
  984. getJobStatus,
  985. getJobPods,
  986. getMatchingPods,
  987. getMetrics,
  988. getNamespaces,
  989. getNGINXIngresses,
  990. getOAuthIds,
  991. getPodEvents,
  992. getProcfileContents,
  993. getProjectClusters,
  994. getProjectRegistries,
  995. getProjectRepos,
  996. getProjects,
  997. getPrometheusIsInstalled,
  998. getRegistryIntegrations,
  999. getReleaseToken,
  1000. getRepoIntegrations,
  1001. getSlackIntegrations,
  1002. getRepos,
  1003. getRevisions,
  1004. getTemplateInfo,
  1005. getTemplateUpgradeNotes,
  1006. getTemplates,
  1007. getUser,
  1008. linkGithubProject,
  1009. getGithubAccess,
  1010. listConfigMaps,
  1011. logInUser,
  1012. logOutUser,
  1013. provisionECR,
  1014. provisionEKS,
  1015. registerUser,
  1016. rollbackChart,
  1017. uninstallTemplate,
  1018. updateUser,
  1019. renameConfigMap,
  1020. updateConfigMap,
  1021. upgradeChartValues,
  1022. deleteJob,
  1023. stopJob,
  1024. updateInvite,
  1025. getAvailableRoles,
  1026. getCollaborators,
  1027. updateCollaborator,
  1028. removeCollaborator,
  1029. getPolicyDocument,
  1030. createWebhookToken,
  1031. };