@cobaltcore-dev/aurora 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/README.md +59 -9
  2. package/dist/client/App.d.ts +2 -1
  3. package/dist/client/AuroraApp.d.ts +45 -0
  4. package/dist/client/{AuthProvider-5TyZKZkx.mjs → AuthProvider-CVSAwW9f.mjs} +23 -9
  5. package/dist/client/AuthProvider-CVSAwW9f.mjs.map +1 -0
  6. package/dist/client/{ContentHeader-D64NtKvo.mjs → ContentHeader-CPJbgYWn.mjs} +18 -18
  7. package/dist/client/{ContentHeader-D64NtKvo.mjs.map → ContentHeader-CPJbgYWn.mjs.map} +1 -1
  8. package/dist/client/DeleteFlavorModal-V44QCJBd.mjs +773 -0
  9. package/dist/client/DeleteFlavorModal-V44QCJBd.mjs.map +1 -0
  10. package/dist/client/DynamicBreadcrumbContext-CVcUQFou.mjs +26 -0
  11. package/dist/client/DynamicBreadcrumbContext-CVcUQFou.mjs.map +1 -0
  12. package/dist/client/{FiltersInput-Bw8TFfwb.mjs → FiltersInput-CKI6zWnm.mjs} +22 -22
  13. package/dist/client/{FiltersInput-Bw8TFfwb.mjs.map → FiltersInput-CKI6zWnm.mjs.map} +1 -1
  14. package/dist/client/FloatingIpActionModals-CwEC5GR-.mjs +460 -0
  15. package/dist/client/FloatingIpActionModals-CwEC5GR-.mjs.map +1 -0
  16. package/dist/client/ImageToastNotifications-m6c3tVPb.mjs +1152 -0
  17. package/dist/client/ImageToastNotifications-m6c3tVPb.mjs.map +1 -0
  18. package/dist/client/{SortInput-DysAXpB3.mjs → SortInput-4g7nSTHW.mjs} +14 -14
  19. package/dist/client/SortInput-4g7nSTHW.mjs.map +1 -0
  20. package/dist/client/{TwoColumnDescriptionList-B3xunXmz.mjs → TwoColumnDescriptionList-NvgvErua.mjs} +6 -6
  21. package/dist/client/{TwoColumnDescriptionList-B3xunXmz.mjs.map → TwoColumnDescriptionList-NvgvErua.mjs.map} +1 -1
  22. package/dist/client/_-CAsCx-Ay.mjs +6 -0
  23. package/dist/client/_-CAsCx-Ay.mjs.map +1 -0
  24. package/dist/client/_auth-SrDjHL6j.mjs +12 -0
  25. package/dist/client/_auth-SrDjHL6j.mjs.map +1 -0
  26. package/dist/client/_flavorId-9PcBBW52.mjs +231 -0
  27. package/dist/client/_flavorId-9PcBBW52.mjs.map +1 -0
  28. package/dist/client/{_flavorId-Zj7LNL-R.mjs → _flavorId-a9Gu66R1.mjs} +3 -9
  29. package/dist/client/_flavorId-a9Gu66R1.mjs.map +1 -0
  30. package/dist/client/_floatingIpId-AE9Fu8l6.mjs +210 -0
  31. package/dist/client/_floatingIpId-AE9Fu8l6.mjs.map +1 -0
  32. package/dist/client/{_floatingIpId-DCQQpNO-.mjs → _floatingIpId-AZ11Ksmu.mjs} +3 -9
  33. package/dist/client/_floatingIpId-AZ11Ksmu.mjs.map +1 -0
  34. package/dist/client/_imageId-BtAql2Kr.mjs +570 -0
  35. package/dist/client/_imageId-BtAql2Kr.mjs.map +1 -0
  36. package/dist/client/_imageId-D76BxvFY.mjs +39 -0
  37. package/dist/client/_imageId-D76BxvFY.mjs.map +1 -0
  38. package/dist/client/_projectId-7Nl1MQTJ.mjs +99 -0
  39. package/dist/client/_projectId-7Nl1MQTJ.mjs.map +1 -0
  40. package/dist/client/_projectId-B3wmSala.mjs +281 -0
  41. package/dist/client/_projectId-B3wmSala.mjs.map +1 -0
  42. package/dist/client/_projectId-DPzv0CCp.mjs +77 -0
  43. package/dist/client/_projectId-DPzv0CCp.mjs.map +1 -0
  44. package/dist/client/_projectId-DfeVJy0G.mjs +30 -0
  45. package/dist/client/_projectId-DfeVJy0G.mjs.map +1 -0
  46. package/dist/client/_securityGroupId-C5huJNfO.mjs +1810 -0
  47. package/dist/client/_securityGroupId-C5huJNfO.mjs.map +1 -0
  48. package/dist/client/{_securityGroupId-Mj8NJT2-.mjs → _securityGroupId-D85mSigA.mjs} +3 -9
  49. package/dist/client/_securityGroupId-D85mSigA.mjs.map +1 -0
  50. package/dist/client/_serviceType-DS8DxsrP.mjs +20 -0
  51. package/dist/client/_serviceType-DS8DxsrP.mjs.map +1 -0
  52. package/dist/client/_serviceType-M8d9rOT6.mjs +6 -0
  53. package/dist/client/_serviceType-M8d9rOT6.mjs.map +1 -0
  54. package/dist/client/_storageType-BRWWJtow.mjs +14 -0
  55. package/dist/client/_storageType-BRWWJtow.mjs.map +1 -0
  56. package/dist/client/_storageType-CzZ4u9x_.mjs +12 -0
  57. package/dist/client/_storageType-CzZ4u9x_.mjs.map +1 -0
  58. package/dist/client/_storageType-Dy9uCVXr.mjs +845 -0
  59. package/dist/client/_storageType-Dy9uCVXr.mjs.map +1 -0
  60. package/dist/client/_storageType-zeSZe--V.mjs.map +1 -1
  61. package/dist/client/{about-WLyShNgE.mjs → about-BmQTyLWc.mjs} +2 -2
  62. package/dist/client/{about-WLyShNgE.mjs.map → about-BmQTyLWc.mjs.map} +1 -1
  63. package/dist/client/assets/{objectDownload.worker-BXFQIIU_.js.map → objectDownload.worker-CWWLPDyb.js.map} +1 -1
  64. package/dist/client/assets/{objectDownload.worker-ECvFtmOF.js.map → objectDownload.worker-kZlQuo3F.js.map} +1 -1
  65. package/dist/client/{aurora-IMO9HhqJ.mjs → aurora-CIml-f2f.mjs} +2 -2
  66. package/dist/client/{aurora-IMO9HhqJ.mjs.map → aurora-CIml-f2f.mjs.map} +1 -1
  67. package/dist/client/{build-DnD-T35u.mjs → build-WuxXRAqf.mjs} +2335 -2667
  68. package/dist/client/{build-DnD-T35u.mjs.map → build-WuxXRAqf.mjs.map} +1 -1
  69. package/dist/client/components/Breadcrumbs.d.ts +1 -0
  70. package/dist/client/components/ListToolbar/SortInput.d.ts +3 -0
  71. package/dist/client/context/BreadcrumbExtensionContext.d.ts +9 -0
  72. package/dist/client/context/DynamicBreadcrumbContext.d.ts +9 -0
  73. package/dist/client/{flavors-Cp0LEGOH.mjs → flavors-B0rbqffG.mjs} +3 -5
  74. package/dist/client/flavors-B0rbqffG.mjs.map +1 -0
  75. package/dist/client/flavors-DWMZ6TuJ.mjs.map +1 -1
  76. package/dist/client/flavors-Rl20bxVU.mjs +628 -0
  77. package/dist/client/flavors-Rl20bxVU.mjs.map +1 -0
  78. package/dist/client/floatingips-Cz9k80cc.mjs +8 -0
  79. package/dist/client/floatingips-Cz9k80cc.mjs.map +1 -0
  80. package/dist/client/floatingips-xbO_mu4f.mjs +576 -0
  81. package/dist/client/floatingips-xbO_mu4f.mjs.map +1 -0
  82. package/dist/client/hooks/useBreadcrumbs.d.ts +16 -0
  83. package/dist/client/hooks/usePushBreadcrumbs.d.ts +10 -0
  84. package/dist/client/hooks/useSetBreadcrumb.d.ts +11 -0
  85. package/dist/client/{hooks-CrriowRk.mjs → hooks-D0yKIumu.mjs} +2 -2
  86. package/dist/client/{hooks-CrriowRk.mjs.map → hooks-D0yKIumu.mjs.map} +1 -1
  87. package/dist/client/images-BGQv9kKT.mjs +1983 -0
  88. package/dist/client/images-BGQv9kKT.mjs.map +1 -0
  89. package/dist/client/{images-DWiM_72I.mjs → images-CPmMa4SQ.mjs} +3 -5
  90. package/dist/client/images-CPmMa4SQ.mjs.map +1 -0
  91. package/dist/client/images-NBf2bV43.mjs.map +1 -1
  92. package/dist/client/index.d.ts +9 -2
  93. package/dist/client/index.js +567 -695
  94. package/dist/client/index.js.map +1 -1
  95. package/dist/client/{md-DNzcRhmz.mjs → md-kvaGCNAK.mjs} +4 -22
  96. package/dist/client/{md-DNzcRhmz.mjs.map → md-kvaGCNAK.mjs.map} +1 -1
  97. package/dist/client/objects-BE_u5yRt.mjs +12950 -0
  98. package/dist/client/objects-BE_u5yRt.mjs.map +1 -0
  99. package/dist/client/objects-BN-59Th0.mjs +66 -0
  100. package/dist/client/objects-BN-59Th0.mjs.map +1 -0
  101. package/dist/client/objects-D9Luf9KB.mjs +66 -0
  102. package/dist/client/objects-D9Luf9KB.mjs.map +1 -0
  103. package/dist/client/projects-yiK0HGSA.mjs.map +1 -1
  104. package/dist/client/routeInfo-DP3v74Wg.mjs +19 -0
  105. package/dist/client/routeInfo-DP3v74Wg.mjs.map +1 -0
  106. package/dist/client/router.d.ts +2 -1
  107. package/dist/client/{routes-B05u5bk4.mjs → routes-CJj7SR_K.mjs} +2 -2
  108. package/dist/client/routes-CJj7SR_K.mjs.map +1 -0
  109. package/dist/client/routes-xofA3ksU.mjs +110 -0
  110. package/dist/client/routes-xofA3ksU.mjs.map +1 -0
  111. package/dist/client/securitygroups-BjhgLBHm.mjs +620 -0
  112. package/dist/client/securitygroups-BjhgLBHm.mjs.map +1 -0
  113. package/dist/client/securitygroups-CtKne8UQ.mjs +8 -0
  114. package/dist/client/securitygroups-CtKne8UQ.mjs.map +1 -0
  115. package/dist/client/{securitygroups-_7SYN2jN.mjs → securitygroups-DEJQBcxm.mjs} +3 -5
  116. package/dist/client/securitygroups-DEJQBcxm.mjs.map +1 -0
  117. package/dist/client/services-D1PbooD1.mjs +6 -0
  118. package/dist/client/services-D1PbooD1.mjs.map +1 -0
  119. package/dist/client/services-DEMVtFyn.mjs +9 -0
  120. package/dist/client/services-DEMVtFyn.mjs.map +1 -0
  121. package/dist/client/trpcClient.d.ts +153 -370
  122. package/dist/client/useBreadcrumbs-ha3IlaxX.mjs +54 -0
  123. package/dist/client/useBreadcrumbs-ha3IlaxX.mjs.map +1 -0
  124. package/dist/client/useModalTracking-BcOKTYRN.mjs +33 -0
  125. package/dist/client/useModalTracking-BcOKTYRN.mjs.map +1 -0
  126. package/dist/client/{useSecurityGroupPermissions-qPwm4mFt.mjs → useSecurityGroupPermissions-BOyLQLdC.mjs} +78 -12
  127. package/dist/client/useSecurityGroupPermissions-BOyLQLdC.mjs.map +1 -0
  128. package/dist/client/useSetBreadcrumb-tn7lBaQV.mjs +19 -0
  129. package/dist/client/useSetBreadcrumb-tn7lBaQV.mjs.map +1 -0
  130. package/dist/client/utils/formatSwiftDate.d.ts +30 -0
  131. package/dist/server/index.d.ts +179 -373
  132. package/dist/server/index.js +910 -530
  133. package/package.json +37 -38
  134. package/dist/client/AuthProvider-5TyZKZkx.mjs.map +0 -1
  135. package/dist/client/DeleteFlavorModal-C2K43ABZ.mjs +0 -732
  136. package/dist/client/DeleteFlavorModal-C2K43ABZ.mjs.map +0 -1
  137. package/dist/client/DeletePcaModal-D9v8E0Ki.mjs +0 -92
  138. package/dist/client/DeletePcaModal-D9v8E0Ki.mjs.map +0 -1
  139. package/dist/client/DetailsInfo-h7rPJ4Jf.mjs +0 -61
  140. package/dist/client/DetailsInfo-h7rPJ4Jf.mjs.map +0 -1
  141. package/dist/client/FloatingIpActionModals-BfEDfYg9.mjs +0 -417
  142. package/dist/client/FloatingIpActionModals-BfEDfYg9.mjs.map +0 -1
  143. package/dist/client/ImageToastNotifications-C0Tluzq-.mjs +0 -1125
  144. package/dist/client/ImageToastNotifications-C0Tluzq-.mjs.map +0 -1
  145. package/dist/client/RouteError-B-NPGIv7.mjs +0 -25
  146. package/dist/client/RouteError-B-NPGIv7.mjs.map +0 -1
  147. package/dist/client/SortInput-DysAXpB3.mjs.map +0 -1
  148. package/dist/client/StatusError-DX-GvLjq.mjs +0 -39
  149. package/dist/client/StatusError-DX-GvLjq.mjs.map +0 -1
  150. package/dist/client/_auth-R5H2yKFf.mjs +0 -11
  151. package/dist/client/_auth-R5H2yKFf.mjs.map +0 -1
  152. package/dist/client/_flavorId-Dit5mM8I.mjs +0 -210
  153. package/dist/client/_flavorId-Dit5mM8I.mjs.map +0 -1
  154. package/dist/client/_flavorId-Zj7LNL-R.mjs.map +0 -1
  155. package/dist/client/_floatingIpId-B0MCoqE3.mjs +0 -215
  156. package/dist/client/_floatingIpId-B0MCoqE3.mjs.map +0 -1
  157. package/dist/client/_floatingIpId-DCQQpNO-.mjs.map +0 -1
  158. package/dist/client/_imageId-CZYzBAVx.mjs +0 -558
  159. package/dist/client/_imageId-CZYzBAVx.mjs.map +0 -1
  160. package/dist/client/_pcaId-CHRRsWmO.mjs +0 -605
  161. package/dist/client/_pcaId-CHRRsWmO.mjs.map +0 -1
  162. package/dist/client/_projectId-B8wWSxPu.mjs +0 -98
  163. package/dist/client/_projectId-B8wWSxPu.mjs.map +0 -1
  164. package/dist/client/_projectId-C5DUYIjt.mjs +0 -291
  165. package/dist/client/_projectId-C5DUYIjt.mjs.map +0 -1
  166. package/dist/client/_projectId-D2pFfYIs.mjs +0 -46
  167. package/dist/client/_projectId-D2pFfYIs.mjs.map +0 -1
  168. package/dist/client/_projectId-DhSWowQo.mjs +0 -29
  169. package/dist/client/_projectId-DhSWowQo.mjs.map +0 -1
  170. package/dist/client/_securityGroupId-DZ4D4WwB.mjs +0 -1801
  171. package/dist/client/_securityGroupId-DZ4D4WwB.mjs.map +0 -1
  172. package/dist/client/_securityGroupId-Mj8NJT2-.mjs.map +0 -1
  173. package/dist/client/_storageType-C-9bNkmZ.mjs +0 -2211
  174. package/dist/client/_storageType-C-9bNkmZ.mjs.map +0 -1
  175. package/dist/client/components/Error/StatusError.d.ts +0 -11
  176. package/dist/client/components/ProjectView/ProjectInfoBox.d.ts +0 -12
  177. package/dist/client/flavors-Cp0LEGOH.mjs.map +0 -1
  178. package/dist/client/flavors-CwMbDRHm2.mjs +0 -650
  179. package/dist/client/flavors-CwMbDRHm2.mjs.map +0 -1
  180. package/dist/client/floatingips-ICwo-rV_.mjs +0 -591
  181. package/dist/client/floatingips-ICwo-rV_.mjs.map +0 -1
  182. package/dist/client/images-DOGZmr3D.mjs +0 -1937
  183. package/dist/client/images-DOGZmr3D.mjs.map +0 -1
  184. package/dist/client/images-DWiM_72I.mjs.map +0 -1
  185. package/dist/client/objects-D2MKUCxc.mjs +0 -56
  186. package/dist/client/objects-D2MKUCxc.mjs.map +0 -1
  187. package/dist/client/objects-DI1-tnKr.mjs +0 -56
  188. package/dist/client/objects-DI1-tnKr.mjs.map +0 -1
  189. package/dist/client/objects-DeK2WD5K.mjs +0 -10078
  190. package/dist/client/objects-DeK2WD5K.mjs.map +0 -1
  191. package/dist/client/pca-BokFv4Gz.mjs +0 -239
  192. package/dist/client/pca-BokFv4Gz.mjs.map +0 -1
  193. package/dist/client/pca-D5jHAl0b.mjs +0 -26
  194. package/dist/client/pca-D5jHAl0b.mjs.map +0 -1
  195. package/dist/client/pcaAccess-Br4kVjLQ.mjs +0 -9
  196. package/dist/client/pcaAccess-Br4kVjLQ.mjs.map +0 -1
  197. package/dist/client/routeInfo-CdTRlSxv.mjs +0 -32
  198. package/dist/client/routeInfo-CdTRlSxv.mjs.map +0 -1
  199. package/dist/client/routes-B05u5bk4.mjs.map +0 -1
  200. package/dist/client/routes-DOJr5onJ.mjs +0 -115
  201. package/dist/client/routes-DOJr5onJ.mjs.map +0 -1
  202. package/dist/client/securitygroups-Be2Qgmew.mjs +0 -595
  203. package/dist/client/securitygroups-Be2Qgmew.mjs.map +0 -1
  204. package/dist/client/securitygroups-_7SYN2jN.mjs.map +0 -1
  205. package/dist/client/useSecurityGroupPermissions-qPwm4mFt.mjs.map +0 -1
@@ -1,239 +0,0 @@
1
- import { B as e, C as t, E as n, G as r, I as i, S as a, Y as o, Z as s, _ as c, a as l, dt as u, f as d, h as f, k as p, m, rt as h, s as g, t as _ } from "./build-DnD-T35u.mjs";
2
- import { a as v } from "./trpcClient-D7gpR7YG.mjs";
3
- import { t as y } from "./pca-D5jHAl0b.mjs";
4
- import { t as b } from "./useProjectId-DBc5lpoU.mjs";
5
- import { f as x, n as S } from "./md-DNzcRhmz.mjs";
6
- import { t as C } from "./ContentHeader-D64NtKvo.mjs";
7
- import "./hooks-CrriowRk.mjs";
8
- import { t as w } from "./useModal-DCs1OJh7.mjs";
9
- import { t as T } from "./DeletePcaModal-D9v8E0Ki.mjs";
10
- import { Fragment as E, jsx as D, jsxs as O } from "react/jsx-runtime";
11
- import { useState as k } from "react";
12
- import { useNavigate as A } from "@tanstack/react-router";
13
- import { Trans as j, useLingui as M } from "@lingui/react";
14
- import { z as N } from "zod";
15
- import { useForm as P, useStore as F } from "@tanstack/react-form";
16
- //#region src/client/routes/_auth/projects/$projectId/services/pca/-components/-table/PcaTableRow.tsx
17
- var I = ({ pca: e }) => {
18
- let { i18n: t, _: i } = M(), o = A(), s = b(), [l, u] = w(!1), f = () => o({
19
- to: "/projects/$projectId/services/pca/$pcaId",
20
- params: {
21
- projectId: s,
22
- pcaId: e.id
23
- }
24
- }), m = {
25
- CREATING: {
26
- text: t._({ id: "E9bKSA" }),
27
- icon: /*#__PURE__*/ D(r, { size: "18" })
28
- },
29
- AWAITING_CERTIFICATE: {
30
- text: t._({ id: "mB4LB4" }),
31
- icon: /*#__PURE__*/ D(d, {
32
- icon: "accessTime",
33
- size: 20,
34
- color: "#FBC02D"
35
- })
36
- },
37
- READY: {
38
- text: t._({ id: "ckH3fT" }),
39
- icon: /*#__PURE__*/ D(S, {
40
- size: 20,
41
- color: "white",
42
- fill: "#4FB81C"
43
- })
44
- },
45
- FAILED: {
46
- text: t._({ id: "7Bj3x9" }),
47
- icon: /*#__PURE__*/ D(x, {
48
- size: 20,
49
- color: "white",
50
- fill: "#D32F2F"
51
- })
52
- }
53
- };
54
- return /*#__PURE__*/ O(E, { children: [/*#__PURE__*/ O(n, {
55
- "data-testid": `pca-row-${e.id}`,
56
- onClick: f,
57
- children: [
58
- /*#__PURE__*/ D(_, { children: /*#__PURE__*/ O("div", {
59
- className: "flex items-center gap-2",
60
- children: [m[e.state].icon, m[e.state].text]
61
- }) }),
62
- /*#__PURE__*/ D(_, { children: e.id }),
63
- /*#__PURE__*/ D(_, { children: e.display_subject || "—" }),
64
- /*#__PURE__*/ D(_, {
65
- onClick: (e) => e.stopPropagation(),
66
- className: "items-end pr-0",
67
- children: /*#__PURE__*/ D(p, { children: /*#__PURE__*/ O(c, { children: [/*#__PURE__*/ D(a, {
68
- label: t._({ id: "v0hPHE" }),
69
- onClick: f
70
- }), /*#__PURE__*/ D(a, {
71
- label: t._({ id: "nzFJqC" }),
72
- onClick: u
73
- })] }) })
74
- })
75
- ]
76
- }, e.id), l && /*#__PURE__*/ D(T, {
77
- pca: e,
78
- open: l,
79
- onClose: u
80
- })] });
81
- }, L = /^(?=.{1,253}$)(?:\*\.)?(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+[A-Za-z]{2,63}$/, R = (e) => L.test(e), z = ({ open: e, onClose: t }) => {
82
- let { i18n: n, _: a } = M(), s = A(), c = b(), l = v.useUtils(), { isPending: d, ...p } = v.services.pca.create.useMutation({ onSettled: () => l.services.pca.list.invalidate() }), h = N.object({ common_name: N.string().trim().min(1, n._({ id: "qhDo93" })).refine((e) => R(e), { message: n._({ id: "gy6L1u" }) }) }), g = P({
83
- defaultValues: { common_name: "" },
84
- validators: { onSubmit: h },
85
- onSubmit: async ({ value: e }) => {
86
- if (d) return;
87
- let t = await p.mutateAsync({
88
- project_id: c,
89
- configuration: { subject: { named_attributes: { cn: e.common_name } } }
90
- });
91
- _(), await s({
92
- to: "/projects/$projectId/services/pca/$pcaId",
93
- params: {
94
- projectId: c,
95
- pcaId: t.id
96
- }
97
- });
98
- }
99
- }), _ = () => {
100
- d || (g.reset(), p.reset(), t());
101
- }, y = F(g.store, (e) => e.isSubmitting || e.values.common_name.trim().length === 0);
102
- return /*#__PURE__*/ O(o, {
103
- open: e,
104
- size: "large",
105
- title: n._({ id: "WidMsn" }),
106
- onCancel: _,
107
- cancelButtonLabel: n._({ id: "dEgA5A" }),
108
- confirmButtonLabel: n._({ id: "tfDRzk" }),
109
- onConfirm: g.handleSubmit,
110
- disableConfirmButton: d || y,
111
- children: [
112
- p.error?.message && /*#__PURE__*/ D(i, {
113
- dismissible: !1,
114
- variant: "error",
115
- className: "mb-4",
116
- children: p.error.message
117
- }),
118
- d && /*#__PURE__*/ O("div", {
119
- className: "mb-4 flex items-center justify-center gap-2",
120
- children: [/*#__PURE__*/ D(r, { variant: "primary" }), /*#__PURE__*/ D("span", {
121
- className: "text-theme-high text-sm",
122
- children: /*#__PURE__*/ D(j, { id: "wdUvGT" })
123
- })]
124
- }),
125
- !d && /*#__PURE__*/ D(u, {
126
- className: "mb-0",
127
- id: "create-certificate-authority-form",
128
- onSubmit: (e) => {
129
- e.preventDefault(), g.handleSubmit();
130
- },
131
- children: /*#__PURE__*/ D(m, {
132
- className: "mb-4",
133
- children: /*#__PURE__*/ D(g.Field, {
134
- name: "common_name",
135
- children: (e) => /*#__PURE__*/ D(f, {
136
- id: e.name,
137
- name: e.name,
138
- value: e.state.value,
139
- onBlur: e.handleBlur,
140
- onChange: (t) => e.handleChange(t.target.value),
141
- label: n._({ id: "DHrCY6" }),
142
- placeholder: n._({ id: "RWQ6BN" }),
143
- helptext: n._({ id: "jVjr9h" }),
144
- errortext: e.state.meta.errors.map((e) => e?.message).join(", "),
145
- disabled: d
146
- })
147
- })
148
- })
149
- })
150
- ]
151
- });
152
- }, B = 50, V = () => {
153
- let { i18n: i, _: a } = M(), o = b(), [c, u] = w(!1), [d, f] = k([void 0]), [p, m] = k(1), y = d[p - 1], { data: x, isLoading: S, isError: C, error: T } = v.services.pca.list.useQuery({
154
- project_id: o,
155
- limit: B,
156
- next_page_marker: y
157
- }), A = x?.certificate_authorities ?? [], N = x?.next_page_marker, P = N ? p + 1 : p, F = Math.max(P, d.length), L = (e) => {
158
- e < 1 || e > F || (e > p && N && f((t) => {
159
- let n = [...t];
160
- return n[e - 1] = N, n;
161
- }), m(e));
162
- };
163
- if (S) return /*#__PURE__*/ O(s, {
164
- className: "py-8",
165
- distribution: "center",
166
- alignment: "center",
167
- direction: "vertical",
168
- children: [/*#__PURE__*/ D(r, {
169
- variant: "primary",
170
- size: "large",
171
- className: "mb-2"
172
- }), /*#__PURE__*/ D(j, { id: "Z3FXyt" })]
173
- });
174
- if (C) return /*#__PURE__*/ D(s, {
175
- className: "py-8",
176
- distribution: "center",
177
- alignment: "center",
178
- direction: "vertical",
179
- children: T?.message ?? i._({ id: "Sf3Gvg" })
180
- });
181
- let R = [
182
- i._({ id: "RS0o7b" }),
183
- i._({ id: "S0kLOH" }),
184
- i._({ id: "QGFuw+" }),
185
- ""
186
- ], V = R.length;
187
- return /*#__PURE__*/ O("div", {
188
- className: "relative",
189
- children: [
190
- /*#__PURE__*/ D(s, {
191
- className: "pt-3 pb-2",
192
- distribution: "end",
193
- children: /*#__PURE__*/ D(l, {
194
- variant: "primary",
195
- label: i._({ id: "WidMsn" }),
196
- onClick: u
197
- })
198
- }),
199
- A.length === 0 && p === 1 ? /*#__PURE__*/ D(g, {
200
- columns: V,
201
- className: "pca",
202
- "data-testid": "no-pcas",
203
- children: /*#__PURE__*/ D(n, { children: /*#__PURE__*/ O(_, {
204
- colSpan: V,
205
- children: [/*#__PURE__*/ D(h, { children: /*#__PURE__*/ D(j, { id: "8S2nDL" }) }), /*#__PURE__*/ D("p", { children: /*#__PURE__*/ D(j, { id: "ng+PCh" }) })]
206
- }) })
207
- }) : /*#__PURE__*/ O(E, { children: [/*#__PURE__*/ O(g, {
208
- columns: V,
209
- children: [/*#__PURE__*/ D(n, { children: R.map((e) => /*#__PURE__*/ D(t, { children: e }, e)) }), A.map((e) => /*#__PURE__*/ D(I, { pca: e }, e.id))]
210
- }), F > 1 && /*#__PURE__*/ D("div", {
211
- className: "flex justify-center py-4",
212
- children: /*#__PURE__*/ D(e, {
213
- variant: "input",
214
- currentPage: p,
215
- pages: F,
216
- onPressPrevious: () => L(p - 1),
217
- onPressNext: () => L(p + 1)
218
- })
219
- })] }),
220
- c && /*#__PURE__*/ D(z, {
221
- open: c,
222
- onClose: u
223
- })
224
- ]
225
- });
226
- };
227
- //#endregion
228
- //#region src/client/routes/_auth/projects/$projectId/services/pca/index.tsx?tsr-split=component
229
- function H() {
230
- let { i18n: e, _: t } = M(), { projectId: n } = y.useParams();
231
- return /*#__PURE__*/ O(E, { children: [/*#__PURE__*/ D(C, {
232
- title: e._({ id: "ffw//c" }),
233
- projectId: n
234
- }), /*#__PURE__*/ D(V, {})] });
235
- }
236
- //#endregion
237
- export { H as component };
238
-
239
- //# sourceMappingURL=pca-BokFv4Gz.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pca-BokFv4Gz.mjs","names":["MdCheckCircle","MdReportProblem","useNavigate","DataGridCell","DataGridRow","Icon","PopupMenu","PopupMenuItem","PopupMenuOptions","Spinner","useModal","useProjectId","DeletePcaModal","PcaTableRow","pca","useLingui","navigate","projectId","deletePcaModalOpen","toggleDeletePcaModal","navigateToDetailsPage","to","params","pcaId","id","STATE_CONFIG","CREATING","text","t","icon","size","AWAITING_CERTIFICATE","color","READY","fill","FAILED","data-testid","onClick","div","className","state","display_subject","e","stopPropagation","label","open","onClose","z","useForm","useStore","useNavigate","Modal","Form","FormSection","Spinner","TextInput","Message","trpcReact","useProjectId","csrRegex","isValidCommonName","value","test","CreatePcaModal","open","onClose","useLingui","navigate","projectId","utils","useUtils","isPending","createPcaMutation","services","pca","create","useMutation","onSettled","list","invalidate","formSchema","object","common_name","string","trim","min","t","refine","message","form","defaultValues","validators","onSubmit","createdPca","mutateAsync","project_id","configuration","subject","named_attributes","cn","handleClose","to","params","pcaId","id","reset","isCreateDisabled","store","state","isSubmitting","values","length","size","title","onCancel","cancelButtonLabel","confirmButtonLabel","onConfirm","handleSubmit","disableConfirmButton","error","dismissible","variant","className","div","span","e","preventDefault","Field","name","children","field","onBlur","handleBlur","onChange","handleChange","target","label","placeholder","helptext","errortext","meta","errors","map","join","disabled","useState","Stack","Spinner","DataGrid","DataGridRow","DataGridCell","ContentHeading","DataGridHeadCell","Button","Pagination","trpcReact","useProjectId","useModal","PcaTableRow","CreatePcaModal","ITEMS_PER_PAGE","PcaListContainer","useLingui","projectId","createCaOpen","toggleCreateCa","pageMarkers","setPageMarkers","undefined","currentPage","setCurrentPage","currentMarker","data","isLoading","isError","error","services","pca","list","useQuery","project_id","limit","next_page_marker","pcas","certificate_authorities","nextMarker","computedTotal","totalPages","Math","max","length","goToPage","page","prev","updated","className","distribution","alignment","direction","variant","size","message","t","TABLE_COLUMNS","columnsLength","div","label","onClick","columns","data-testid","colSpan","p","map","id","pages","onPressPrevious","onPressNext","open","onClose","useLingui","ContentHeader","PcaListContainer","Route","RouteComponent","t","projectId","useParams","component"],"sources":["../../src/client/routes/_auth/projects/$projectId/services/pca/-components/-table/PcaTableRow.tsx","../../src/client/routes/_auth/projects/$projectId/services/pca/-components/-modals/CreatePcaModal.tsx","../../src/client/routes/_auth/projects/$projectId/services/pca/-components/-table/PcaListContainer.tsx","../../src/client/routes/_auth/projects/$projectId/services/pca/index.tsx?tsr-split=component"],"sourcesContent":["import { MdCheckCircle, MdReportProblem } from \"react-icons/md\"\nimport { useNavigate } from \"@tanstack/react-router\"\nimport { useLingui } from \"@lingui/react/macro\"\nimport {\n DataGridCell,\n DataGridRow,\n Icon,\n PopupMenu,\n PopupMenuItem,\n PopupMenuOptions,\n Spinner,\n} from \"@cloudoperators/juno-ui-components\"\nimport { CertificateAuthority } from \"@/server/Services/types/pca\"\nimport { useModal } from \"@/client/utils/useModal\"\nimport { useProjectId } from \"@/client/hooks\"\nimport { DeletePcaModal } from \"../-modals/DeletePcaModal\"\n\ninterface PcaTableRowProps {\n pca: CertificateAuthority\n}\n\nexport const PcaTableRow = ({ pca }: PcaTableRowProps) => {\n const { t } = useLingui()\n const navigate = useNavigate()\n const projectId = useProjectId()\n const [deletePcaModalOpen, toggleDeletePcaModal] = useModal(false)\n\n const navigateToDetailsPage = () =>\n navigate({\n to: \"/projects/$projectId/services/pca/$pcaId\",\n params: { projectId, pcaId: pca.id },\n })\n\n const STATE_CONFIG = {\n CREATING: {\n text: t`Creating`,\n icon: <Spinner size=\"18\" />,\n },\n AWAITING_CERTIFICATE: {\n text: t`Awaiting Certificate`,\n icon: <Icon icon=\"accessTime\" size={20} color=\"#FBC02D\" />,\n },\n READY: {\n text: t`Ready`,\n icon: <MdCheckCircle size={20} color=\"white\" fill=\"#4FB81C\" />,\n },\n FAILED: {\n text: t`Failed`,\n icon: <MdReportProblem size={20} color=\"white\" fill=\"#D32F2F\" />,\n },\n } as const\n\n return (\n <>\n <DataGridRow key={pca.id} data-testid={`pca-row-${pca.id}`} onClick={navigateToDetailsPage}>\n <DataGridCell>\n <div className=\"flex items-center gap-2\">\n {STATE_CONFIG[pca.state].icon}\n {STATE_CONFIG[pca.state].text}\n </div>\n </DataGridCell>\n <DataGridCell>{pca.id}</DataGridCell>\n <DataGridCell>{pca.display_subject || \"—\"}</DataGridCell>\n <DataGridCell onClick={(e) => e.stopPropagation()} className=\"items-end pr-0\">\n <PopupMenu>\n <PopupMenuOptions>\n <PopupMenuItem label={t`Show Details`} onClick={navigateToDetailsPage} />\n <PopupMenuItem label={t`Delete CA`} onClick={toggleDeletePcaModal} />\n </PopupMenuOptions>\n </PopupMenu>\n </DataGridCell>\n </DataGridRow>\n\n {deletePcaModalOpen && <DeletePcaModal pca={pca} open={deletePcaModalOpen} onClose={toggleDeletePcaModal} />}\n </>\n )\n}\n","import { z } from \"zod\"\nimport { useForm, useStore } from \"@tanstack/react-form\"\nimport { useNavigate } from \"@tanstack/react-router\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport { Modal, Form, FormSection, Spinner, TextInput, Message } from \"@cloudoperators/juno-ui-components\"\nimport { trpcReact } from \"@/client/trpcClient\"\nimport { useProjectId } from \"@/client/hooks\"\n\ninterface CreatePcaModalProps {\n open: boolean\n onClose: () => void\n}\n\nconst csrRegex = /^(?=.{1,253}$)(?:\\*\\.)?(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\\.)+[A-Za-z]{2,63}$/\nconst isValidCommonName = (value: string) => csrRegex.test(value)\n\nexport const CreatePcaModal = ({ open, onClose }: CreatePcaModalProps) => {\n const { t } = useLingui()\n const navigate = useNavigate()\n const projectId = useProjectId()\n const utils = trpcReact.useUtils()\n\n const { isPending, ...createPcaMutation } = trpcReact.services.pca.create.useMutation({\n onSettled: () => utils.services.pca.list.invalidate(),\n })\n\n const formSchema = z.object({\n common_name: z\n .string()\n .trim()\n .min(1, t`Common name is required.`)\n .refine((value) => isValidCommonName(value), { message: t`Must be a valid common name (FQDN).` }),\n })\n\n const form = useForm({\n defaultValues: {\n common_name: \"\",\n },\n validators: {\n onSubmit: formSchema,\n },\n onSubmit: async ({ value }) => {\n if (isPending) return\n\n const createdPca = await createPcaMutation.mutateAsync({\n project_id: projectId,\n configuration: {\n subject: {\n named_attributes: {\n cn: value.common_name,\n },\n },\n },\n })\n handleClose()\n\n await navigate({\n to: \"/projects/$projectId/services/pca/$pcaId\",\n params: { projectId, pcaId: createdPca.id },\n })\n },\n })\n\n const handleClose = () => {\n if (isPending) return\n\n form.reset()\n createPcaMutation.reset()\n onClose()\n }\n\n // Reactive subscription used to control create action disabled state.\n const isCreateDisabled = useStore(\n form.store,\n (state) => state.isSubmitting || state.values.common_name.trim().length === 0\n )\n\n return (\n <Modal\n open={open}\n size=\"large\"\n title={t`Create Certificate Authority`}\n onCancel={handleClose}\n cancelButtonLabel={t`Cancel`}\n confirmButtonLabel={t`Save`}\n onConfirm={form.handleSubmit}\n disableConfirmButton={isPending || isCreateDisabled}\n >\n {createPcaMutation.error?.message && (\n <Message dismissible={false} variant=\"error\" className=\"mb-4\">\n {createPcaMutation.error.message}\n </Message>\n )}\n\n {isPending && (\n <div className=\"mb-4 flex items-center justify-center gap-2\">\n <Spinner variant=\"primary\" />\n <span className=\"text-theme-high text-sm\">\n <Trans>Creating Certificate Authority...</Trans>\n </span>\n </div>\n )}\n\n {!isPending && (\n <Form\n className=\"mb-0\"\n id=\"create-certificate-authority-form\"\n onSubmit={(e) => {\n e.preventDefault()\n form.handleSubmit()\n }}\n >\n <FormSection className=\"mb-4\">\n <form.Field\n name=\"common_name\"\n children={(field) => (\n <TextInput\n id={field.name}\n name={field.name}\n value={field.state.value}\n onBlur={field.handleBlur}\n onChange={(e) => field.handleChange(e.target.value)}\n label={t`Common name`}\n placeholder={t`Enter Common name (e.g., demo-ca.test.sci)`}\n helptext={t`Enter a valid common name in FQDN format (e.g., demo-ca.test.sci).`}\n errortext={field.state.meta.errors.map((e) => e?.message).join(\", \")}\n disabled={isPending}\n />\n )}\n />\n </FormSection>\n </Form>\n )}\n </Modal>\n )\n}\n","import { Trans, useLingui } from \"@lingui/react/macro\"\nimport { useState } from \"react\"\nimport {\n Stack,\n Spinner,\n DataGrid,\n DataGridRow,\n DataGridCell,\n ContentHeading,\n DataGridHeadCell,\n Button,\n Pagination,\n} from \"@cloudoperators/juno-ui-components\"\nimport { trpcReact } from \"@/client/trpcClient\"\nimport { useProjectId } from \"@/client/hooks\"\nimport { useModal } from \"@/client/utils/useModal\"\nimport { PcaTableRow } from \"./PcaTableRow\"\nimport { CreatePcaModal } from \"../-modals/CreatePcaModal\"\n\nconst ITEMS_PER_PAGE = 50\n\nexport const PcaListContainer = () => {\n const { t } = useLingui()\n const projectId = useProjectId()\n const [createCaOpen, toggleCreateCa] = useModal(false)\n const [pageMarkers, setPageMarkers] = useState<(string | undefined)[]>([undefined])\n const [currentPage, setCurrentPage] = useState(1)\n const currentMarker = pageMarkers[currentPage - 1]\n\n const { data, isLoading, isError, error } = trpcReact.services.pca.list.useQuery({\n project_id: projectId,\n limit: ITEMS_PER_PAGE,\n next_page_marker: currentMarker,\n })\n\n const pcas = data?.certificate_authorities ?? []\n const nextMarker = data?.next_page_marker\n const computedTotal = nextMarker ? currentPage + 1 : currentPage\n const totalPages = Math.max(computedTotal, pageMarkers.length)\n\n const goToPage = (page: number) => {\n if (page < 1 || page > totalPages) return\n if (page > currentPage && nextMarker) {\n setPageMarkers((prev) => {\n const updated = [...prev]\n updated[page - 1] = nextMarker\n return updated\n })\n }\n setCurrentPage(page)\n }\n\n if (isLoading) {\n return (\n <Stack className=\"py-8\" distribution=\"center\" alignment=\"center\" direction=\"vertical\">\n <Spinner variant=\"primary\" size=\"large\" className=\"mb-2\" />\n <Trans>Loading...</Trans>\n </Stack>\n )\n }\n\n if (isError) {\n return (\n <Stack className=\"py-8\" distribution=\"center\" alignment=\"center\" direction=\"vertical\">\n {error?.message ?? t`Failed to load PCAs`}\n </Stack>\n )\n }\n\n const TABLE_COLUMNS = [\n t`State`,\n t`ID`,\n t`Subject Information`,\n \"\", // empty column for item-action with context menu containing \"Delete CA\" button\n ] as const\n const columnsLength = TABLE_COLUMNS.length\n\n return (\n <div className=\"relative\">\n <Stack className=\"pt-3 pb-2\" distribution=\"end\">\n <Button variant=\"primary\" label={t`Create Certificate Authority`} onClick={toggleCreateCa} />\n </Stack>\n\n {pcas.length === 0 && currentPage === 1 ? (\n <DataGrid columns={columnsLength} className=\"pca\" data-testid=\"no-pcas\">\n <DataGridRow>\n <DataGridCell colSpan={columnsLength}>\n <ContentHeading>\n <Trans>No PCAs found</Trans>\n </ContentHeading>\n <p>\n <Trans>There are no PCAs available for this project.</Trans>\n </p>\n </DataGridCell>\n </DataGridRow>\n </DataGrid>\n ) : (\n <>\n <DataGrid columns={columnsLength}>\n <DataGridRow>\n {TABLE_COLUMNS.map((label) => (\n <DataGridHeadCell key={label}>{label}</DataGridHeadCell>\n ))}\n </DataGridRow>\n {pcas.map((pca) => (\n <PcaTableRow key={pca.id} pca={pca} />\n ))}\n </DataGrid>\n\n {totalPages > 1 && (\n <div className=\"flex justify-center py-4\">\n <Pagination\n variant=\"input\"\n currentPage={currentPage}\n pages={totalPages}\n onPressPrevious={() => goToPage(currentPage - 1)}\n onPressNext={() => goToPage(currentPage + 1)}\n />\n </div>\n )}\n </>\n )}\n\n {createCaOpen && <CreatePcaModal open={createCaOpen} onClose={toggleCreateCa} />}\n </div>\n )\n}\n","import { createFileRoute, redirect } from \"@tanstack/react-router\"\nimport { t } from \"@lingui/core/macro\"\nimport { useLingui } from \"@lingui/react/macro\"\nimport { getServiceIndex } from \"@/server/Authentication/helpers\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\nimport { ContentHeader } from \"@/client/components/ContentHeader/ContentHeader\"\nimport { canAccessClavisPca } from \"./-components/pcaAccess\"\nimport { PcaListContainer } from \"./-components/-table/PcaListContainer\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/services/pca/\")({\n staticData: {\n section: \"services\",\n service: \"pca\",\n analytics: {\n name: \"services.pca.list\",\n },\n sectionCrumb: { labelKey: \"Services\" },\n crumb: { labelKey: \"PCA (Clavis)\" },\n } satisfies RouteInfo,\n head: () => ({ meta: [{ title: t`PCA` }] }),\n beforeLoad: async ({ context, params }) => {\n const availableServices = (await context.trpcClient?.auth.getAvailableServices.query()) || []\n const serviceIndex = getServiceIndex(availableServices)\n\n if (!canAccessClavisPca(serviceIndex, context.enabledServices)) {\n throw redirect({\n to: \"/projects/$projectId\",\n params: { projectId: params.projectId },\n })\n }\n },\n component: RouteComponent,\n})\n\nfunction RouteComponent() {\n const { t } = useLingui()\n const { projectId } = Route.useParams()\n\n return (\n <>\n <ContentHeader title={t`PCA`} projectId={projectId} />\n <PcaListContainer />\n </>\n )\n}\n"],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- import { t as e } from "./helpers-1PpYf-fC.mjs";
2
- import { t } from "./pcaAccess-Br4kVjLQ.mjs";
3
- import { createFileRoute as n, lazyRouteComponent as r, redirect as i } from "@tanstack/react-router";
4
- import { i18n as a } from "@lingui/core";
5
- var o = n("/_auth/projects/$projectId/services/pca/")({
6
- staticData: {
7
- section: "services",
8
- service: "pca",
9
- analytics: { name: "services.pca.list" },
10
- sectionCrumb: { labelKey: "Services" },
11
- crumb: { labelKey: "PCA (Clavis)" }
12
- },
13
- head: () => ({ meta: [{ title: a._({ id: "ffw//c" }) }] }),
14
- beforeLoad: async ({ context: n, params: r }) => {
15
- let a = await n.trpcClient?.auth.getAvailableServices.query() || [], o = e(a);
16
- if (!t(o, n.enabledServices)) throw i({
17
- to: "/projects/$projectId",
18
- params: { projectId: r.projectId }
19
- });
20
- },
21
- component: r(() => import("./pca-BokFv4Gz.mjs"), "component")
22
- });
23
- //#endregion
24
- export { o as t };
25
-
26
- //# sourceMappingURL=pca-D5jHAl0b.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pca-D5jHAl0b.mjs","names":["createFileRoute","redirect","t","getServiceIndex","canAccessClavisPca","Route","staticData","section","service","analytics","name","sectionCrumb","labelKey","crumb","RouteInfo","head","meta","title","beforeLoad","context","params","availableServices","trpcClient","auth","getAvailableServices","query","serviceIndex","enabledServices","to","projectId","component","lazyRouteComponent","$$splitComponentImporter"],"sources":["../../src/client/routes/_auth/projects/$projectId/services/pca/index.tsx"],"sourcesContent":["import { createFileRoute, redirect } from \"@tanstack/react-router\"\nimport { t } from \"@lingui/core/macro\"\nimport { useLingui } from \"@lingui/react/macro\"\nimport { getServiceIndex } from \"@/server/Authentication/helpers\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\nimport { ContentHeader } from \"@/client/components/ContentHeader/ContentHeader\"\nimport { canAccessClavisPca } from \"./-components/pcaAccess\"\nimport { PcaListContainer } from \"./-components/-table/PcaListContainer\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/services/pca/\")({\n staticData: {\n section: \"services\",\n service: \"pca\",\n analytics: {\n name: \"services.pca.list\",\n },\n sectionCrumb: { labelKey: \"Services\" },\n crumb: { labelKey: \"PCA (Clavis)\" },\n } satisfies RouteInfo,\n head: () => ({ meta: [{ title: t`PCA` }] }),\n beforeLoad: async ({ context, params }) => {\n const availableServices = (await context.trpcClient?.auth.getAvailableServices.query()) || []\n const serviceIndex = getServiceIndex(availableServices)\n\n if (!canAccessClavisPca(serviceIndex, context.enabledServices)) {\n throw redirect({\n to: \"/projects/$projectId\",\n params: { projectId: params.projectId },\n })\n }\n },\n component: RouteComponent,\n})\n\nfunction RouteComponent() {\n const { t } = useLingui()\n const { projectId } = Route.useParams()\n\n return (\n <>\n <ContentHeader title={t`PCA`} projectId={projectId} />\n <PcaListContainer />\n </>\n )\n}\n"],"mappings":";;;;AASA,IAAaK,IAAQL,EAAgB,0CAAA,CAAA,CAA4C;CAC/EM,YAAY;EACVC,SAAS;EACTC,SAAS;EACTC,WAAW,EACTC,MAAM,oBACR;EACAC,cAAc,EAAEC,UAAU,WAAW;EACrCC,OAAO,EAAED,UAAU,eAAe;CACpC;CACAG,aAAa,EAAEC,MAAM,CAAC,EAAEC,OAAOf,EAAAA,EAAC,EAAA,IAAA,SAAA,CAAA,EAAM,CAAC,EAAE;CACzCgB,YAAY,OAAO,EAAEC,YAASC,gBAAQ;EACpC,IAAMC,IAAoB,MAAOF,EAAQG,YAAYC,KAAKC,qBAAqBC,MAAAA,KAAY,CAAA,GACrFC,IAAevB,EAAgBkB,CAAAA;EAErC,IAAI,CAACjB,EAAmBsB,GAAcP,EAAQQ,eAAe,GAC3D,MAAM1B,EAAS;GACb2B,IAAI;GACJR,QAAQ,EAAES,WAAWT,EAAOS,UAAU;EACxC,CAAA;CAEJ;CACAC,WAASC,sCAAA,WAAA;AACX,CAAA"}
@@ -1,9 +0,0 @@
1
- //#region src/client/routes/_auth/projects/$projectId/services/pca/-components/pcaAccess.ts
2
- var e = (e, t) => {
3
- let n = !t || t.includes("pca");
4
- return e.pca?.clavis && n;
5
- };
6
- //#endregion
7
- export { e as t };
8
-
9
- //# sourceMappingURL=pcaAccess-Br4kVjLQ.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pcaAccess-Br4kVjLQ.mjs","names":["canAccessClavisPca","serviceIndex","enabledServices","isPcaEnabled","includes"],"sources":["../../src/client/routes/_auth/projects/$projectId/services/pca/-components/pcaAccess.ts"],"sourcesContent":["import type { getServiceIndex } from \"@/server/Authentication/helpers\"\n\ntype ServiceIndex = ReturnType<typeof getServiceIndex>\n\nexport const canAccessClavisPca = (serviceIndex: ServiceIndex, enabledServices?: string[]) => {\n const isPcaEnabled = !enabledServices || enabledServices.includes(\"pca\")\n return serviceIndex[\"pca\"]?.[\"clavis\"] && isPcaEnabled\n}\n"],"mappings":";AAIA,IAAaA,KAAsBC,GAA4BC,MAAAA;CAC7D,IAAMC,IAAe,CAACD,KAAmBA,EAAgBE,SAAS,KAAA;CAClE,OAAOH,EAAa,KAAS,UAAaE;AAC5C"}
@@ -1,32 +0,0 @@
1
- import { z as e } from "zod";
2
- var t = e.object({
3
- labelKey: e.enum([
4
- "Compute",
5
- "Network",
6
- "Storage",
7
- "Services",
8
- "Images",
9
- "Flavors",
10
- "Security Groups",
11
- "Floating IPs",
12
- "PCA (Clavis)"
13
- ]).optional(),
14
- to: e.string().optional(),
15
- useParamAsLabel: e.string().optional(),
16
- useParentTitleAsLabel: e.boolean().optional()
17
- }), n = e.object({ name: e.string() }), r = e.object({
18
- section: e.string().optional(),
19
- service: e.string().optional(),
20
- isDetail: e.boolean().optional(),
21
- crumb: t.optional(),
22
- sectionCrumb: t.optional(),
23
- intermediateCrumb: t.optional(),
24
- analytics: n.optional()
25
- });
26
- function i(e) {
27
- return r.safeParse(e).success;
28
- }
29
- //#endregion
30
- export { i as t };
31
-
32
- //# sourceMappingURL=routeInfo-CdTRlSxv.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"routeInfo-CdTRlSxv.mjs","names":["z","CRUMB_LABEL_KEYS","CrumbSchema","object","labelKey","enum","optional","to","string","useParamAsLabel","useParentTitleAsLabel","boolean","AnalyticsSchema","name","RouteInfoSchema","section","service","isDetail","crumb","sectionCrumb","intermediateCrumb","analytics","isRouteInfo","data","safeParse","success"],"sources":["../../src/client/routes/routeInfo.ts"],"sourcesContent":["import { z } from \"zod\"\n\nexport const CRUMB_LABEL_KEYS = [\n \"Compute\",\n \"Network\",\n \"Storage\",\n \"Services\",\n \"Images\",\n \"Flavors\",\n \"Security Groups\",\n \"Floating IPs\",\n \"PCA (Clavis)\",\n] as const\n\nexport type CrumbLabelKey = (typeof CRUMB_LABEL_KEYS)[number]\n\nconst CrumbSchema = z.object({\n labelKey: z.enum(CRUMB_LABEL_KEYS).optional(),\n to: z.string().optional(),\n useParamAsLabel: z.string().optional(),\n useParentTitleAsLabel: z.boolean().optional(),\n})\n\nconst AnalyticsSchema = z.object({\n name: z.string(),\n})\n\nconst RouteInfoSchema = z.object({\n section: z.string().optional(),\n service: z.string().optional(),\n isDetail: z.boolean().optional(),\n crumb: CrumbSchema.optional(),\n sectionCrumb: CrumbSchema.optional(),\n intermediateCrumb: CrumbSchema.optional(),\n analytics: AnalyticsSchema.optional(),\n})\n\nexport type Crumb = z.infer<typeof CrumbSchema>\nexport type Analytics = z.infer<typeof AnalyticsSchema>\nexport type RouteInfo = z.infer<typeof RouteInfoSchema>\n\nexport function isRouteInfo(data: unknown): data is RouteInfo {\n return RouteInfoSchema.safeParse(data).success\n}\n"],"mappings":";AAgBA,IAAME,IAAcF,EAAEG,OAAO;CAC3BC,UAAUJ,EAAEK,KAAKJ;EAdjB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CAMiBA,CAAAA,CAAAA,CAAkBK,SAAQ;CAC3CC,IAAIP,EAAEQ,OAAM,CAAA,CAAGF,SAAQ;CACvBG,iBAAiBT,EAAEQ,OAAM,CAAA,CAAGF,SAAQ;CACpCI,uBAAuBV,EAAEW,QAAO,CAAA,CAAGL,SAAQ;AAC7C,CAAA,GAEMM,IAAkBZ,EAAEG,OAAO,EAC/BU,MAAMb,EAAEQ,OAAM,EAChB,CAAA,GAEMM,IAAkBd,EAAEG,OAAO;CAC/BY,SAASf,EAAEQ,OAAM,CAAA,CAAGF,SAAQ;CAC5BU,SAAShB,EAAEQ,OAAM,CAAA,CAAGF,SAAQ;CAC5BW,UAAUjB,EAAEW,QAAO,CAAA,CAAGL,SAAQ;CAC9BY,OAAOhB,EAAYI,SAAQ;CAC3Ba,cAAcjB,EAAYI,SAAQ;CAClCc,mBAAmBlB,EAAYI,SAAQ;CACvCe,WAAWT,EAAgBN,SAAQ;AACrC,CAAA;AAMA,SAAgBgB,EAAYC,GAAa;CACvC,OAAOT,EAAgBU,UAAUD,CAAAA,CAAAA,CAAME;AACzC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"routes-B05u5bk4.mjs","names":["createFileRoute","z","Route","validateSearch","object","redirect","string","optional","catch","component","lazyRouteComponent","$$splitComponentImporter"],"sources":["../../src/client/routes/index.tsx"],"sourcesContent":["import { createFileRoute, useNavigate } from \"@tanstack/react-router\"\nimport { Stack, Spinner } from \"@cloudoperators/juno-ui-components\"\nimport { z } from \"zod\"\nimport { useEffect } from \"react\"\nimport { LoginForm } from \"../components/Auth/LoginForm\"\nimport { Slot } from \"../components/Slot\"\nimport { useAuth } from \"../store/AuthProvider\"\n\nfunction isSafeRedirect(path: unknown): path is string {\n return typeof path === \"string\" && path.startsWith(\"/\") && !path.startsWith(\"//\")\n}\n\nexport const Route = createFileRoute(\"/\")({\n validateSearch: z.object({\n redirect: z.string().optional().catch(\"\"),\n }),\n component: LandingPage,\n})\n\nfunction LandingPage() {\n const { isLoading, isAuthenticated } = useAuth()\n const { slots } = Route.useRouteContext()\n const { redirect: searchRedirect } = Route.useSearch()\n const navigate = useNavigate()\n\n // Redirect when authenticated\n useEffect(() => {\n if (isAuthenticated && !isLoading) {\n const target = isSafeRedirect(searchRedirect) ? searchRedirect : \"/projects\"\n navigate({ to: target, replace: true })\n }\n }, [isAuthenticated, isLoading, navigate, searchRedirect])\n\n if (isLoading) {\n return (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\">\n <div className=\"absolute inset-0 backdrop-blur-sm\" />\n <Spinner variant=\"primary\" size=\"large\" />\n </Stack>\n )\n }\n\n if (slots?.login && !isAuthenticated) {\n return (\n <div className=\"mt-8 flex justify-center\">\n <Slot component={slots.login} useShadowDOM={false} />\n </div>\n )\n }\n\n if (!isAuthenticated) {\n return <LoginForm />\n }\n\n // Redirecting...\n return null\n}\n"],"mappings":";;AAYA,IAAaE,IAAQF,EAAgB,GAAA,CAAA,CAAK;CACxCG,gBAAgBF,EAAEG,OAAO,EACvBC,UAAUJ,EAAEK,OAAM,CAAA,CAAGC,SAAQ,CAAA,CAAGC,MAAM,EAAA,EACxC,CAAA;CACAC,WAASC,yCAAA,WAAA;AACX,CAAA"}
@@ -1,115 +0,0 @@
1
- import { G as e, I as t, Z as n, a as r, g as i, h as a, rt as o } from "./build-DnD-T35u.mjs";
2
- import { n as s } from "./AuthProvider-5TyZKZkx.mjs";
3
- import { t as c } from "./Slot-CWb612-_.mjs";
4
- import { t as l } from "./routes-B05u5bk4.mjs";
5
- import { jsx as u, jsxs as d } from "react/jsx-runtime";
6
- import { useEffect as f } from "react";
7
- import { useNavigate as p } from "@tanstack/react-router";
8
- import { Trans as m } from "@lingui/react";
9
- //#region src/client/components/Auth/LoginForm.tsx
10
- function h() {
11
- let { isLoading: e, error: n, login: c } = s();
12
- return /*#__PURE__*/ u("div", {
13
- className: "mt-8 flex justify-center",
14
- children: /*#__PURE__*/ d("div", {
15
- className: "border-theme-light relative w-full max-w-md rounded-lg border p-6 shadow-lg",
16
- children: [
17
- /*#__PURE__*/ u(o, {
18
- className: "text-center",
19
- children: /*#__PURE__*/ u(m, { id: "MDQl/K" })
20
- }),
21
- /*#__PURE__*/ u("p", {
22
- className: "mb-6 text-center",
23
- children: /*#__PURE__*/ u(m, { id: "N5vGcw" })
24
- }),
25
- /*#__PURE__*/ d("form", {
26
- className: "space-y-5",
27
- onSubmit: (e) => {
28
- e.preventDefault();
29
- let t = new FormData(e.currentTarget);
30
- c({
31
- domain: String(t.get("domain") ?? ""),
32
- user: String(t.get("user") ?? ""),
33
- password: String(t.get("password") ?? "")
34
- });
35
- },
36
- children: [
37
- n && /*#__PURE__*/ u(t, {
38
- text: n,
39
- variant: "error"
40
- }),
41
- /*#__PURE__*/ u(i, { children: /*#__PURE__*/ u(a, {
42
- id: "domain",
43
- name: "domain",
44
- label: "Domain",
45
- autoComplete: "domain",
46
- required: !0
47
- }) }),
48
- /*#__PURE__*/ u(i, { children: /*#__PURE__*/ u(a, {
49
- id: "user",
50
- name: "user",
51
- label: "User",
52
- autoComplete: "user",
53
- required: !0
54
- }) }),
55
- /*#__PURE__*/ u(i, { children: /*#__PURE__*/ u(a, {
56
- id: "password",
57
- name: "password",
58
- type: "password",
59
- label: "Password",
60
- autoComplete: "password",
61
- required: !0
62
- }) }),
63
- /*#__PURE__*/ u(r, {
64
- type: "submit",
65
- variant: "primary",
66
- className: "mt-2 w-full",
67
- disabled: e,
68
- children: e ? /*#__PURE__*/ u(m, { id: "Z3FXyt" }) : /*#__PURE__*/ u(m, { id: "n1ekoW" })
69
- })
70
- ]
71
- })
72
- ]
73
- })
74
- });
75
- }
76
- //#endregion
77
- //#region src/client/routes/index.tsx?tsr-split=component
78
- function g(e) {
79
- return typeof e == "string" && e.startsWith("/") && !e.startsWith("//");
80
- }
81
- function _() {
82
- let { isLoading: t, isAuthenticated: r } = s(), { slots: i } = l.useRouteContext(), { redirect: a } = l.useSearch(), o = p();
83
- return f(() => {
84
- if (r && !t) {
85
- let e = g(a) ? a : "/projects";
86
- o({
87
- to: e,
88
- replace: !0
89
- });
90
- }
91
- }, [
92
- r,
93
- t,
94
- o,
95
- a
96
- ]), t ? /*#__PURE__*/ d(n, {
97
- className: "fixed inset-0",
98
- distribution: "center",
99
- alignment: "center",
100
- children: [/*#__PURE__*/ u("div", { className: "absolute inset-0 backdrop-blur-sm" }), /*#__PURE__*/ u(e, {
101
- variant: "primary",
102
- size: "large"
103
- })]
104
- }) : i?.login && !r ? /*#__PURE__*/ u("div", {
105
- className: "mt-8 flex justify-center",
106
- children: /*#__PURE__*/ u(c, {
107
- component: i.login,
108
- useShadowDOM: !1
109
- })
110
- }) : r ? null : /*#__PURE__*/ u(h, {});
111
- }
112
- //#endregion
113
- export { _ as component };
114
-
115
- //# sourceMappingURL=routes-DOJr5onJ.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"routes-DOJr5onJ.mjs","names":["ContentHeading","Message","Button","FormRow","TextInput","useAuth","LoginForm","isLoading","error","loginError","login","div","className","p","form","onSubmit","e","preventDefault","formData","FormData","currentTarget","domain","String","get","user","password","text","variant","id","name","label","autoComplete","required","type","disabled","useNavigate","Stack","Spinner","useEffect","LoginForm","Slot","useAuth","isSafeRedirect","path","startsWith","Route","LandingPage","isLoading","isAuthenticated","slots","useRouteContext","redirect","searchRedirect","useSearch","navigate","target","to","replace","login","component"],"sources":["../../src/client/components/Auth/LoginForm.tsx","../../src/client/routes/index.tsx?tsr-split=component"],"sourcesContent":["import { ContentHeading, Message, Button, FormRow, TextInput } from \"@cloudoperators/juno-ui-components\"\nimport { Trans } from \"@lingui/react/macro\"\nimport { useAuth } from \"../../store/AuthProvider\"\n\nexport function LoginForm() {\n const { isLoading, error: loginError, login } = useAuth()\n\n return (\n <div className=\"mt-8 flex justify-center\">\n <div className=\"border-theme-light relative w-full max-w-md rounded-lg border p-6 shadow-lg\">\n <ContentHeading className=\"text-center\">\n <Trans>Sign In to Your Account</Trans>\n </ContentHeading>\n <p className=\"mb-6 text-center\">\n <Trans>Enter your credentials to access your account</Trans>\n </p>\n\n <form\n className=\"space-y-5\"\n onSubmit={(e) => {\n e.preventDefault()\n const formData = new FormData(e.currentTarget)\n login({\n domain: String(formData.get(\"domain\") ?? \"\"),\n user: String(formData.get(\"user\") ?? \"\"),\n password: String(formData.get(\"password\") ?? \"\"),\n })\n }}\n >\n {loginError && <Message text={loginError} variant=\"error\" />}\n <FormRow>\n <TextInput id=\"domain\" name=\"domain\" label=\"Domain\" autoComplete=\"domain\" required />\n </FormRow>\n <FormRow>\n <TextInput id=\"user\" name=\"user\" label=\"User\" autoComplete=\"user\" required />\n </FormRow>\n <FormRow>\n <TextInput\n id=\"password\"\n name=\"password\"\n type=\"password\"\n label=\"Password\"\n autoComplete=\"password\"\n required\n />\n </FormRow>\n\n <Button type=\"submit\" variant=\"primary\" className=\"mt-2 w-full\" disabled={isLoading}>\n {isLoading ? <Trans>Loading...</Trans> : <Trans>Sign In</Trans>}\n </Button>\n </form>\n </div>\n </div>\n )\n}\n","import { createFileRoute, useNavigate } from \"@tanstack/react-router\"\nimport { Stack, Spinner } from \"@cloudoperators/juno-ui-components\"\nimport { z } from \"zod\"\nimport { useEffect } from \"react\"\nimport { LoginForm } from \"../components/Auth/LoginForm\"\nimport { Slot } from \"../components/Slot\"\nimport { useAuth } from \"../store/AuthProvider\"\n\nfunction isSafeRedirect(path: unknown): path is string {\n return typeof path === \"string\" && path.startsWith(\"/\") && !path.startsWith(\"//\")\n}\n\nexport const Route = createFileRoute(\"/\")({\n validateSearch: z.object({\n redirect: z.string().optional().catch(\"\"),\n }),\n component: LandingPage,\n})\n\nfunction LandingPage() {\n const { isLoading, isAuthenticated } = useAuth()\n const { slots } = Route.useRouteContext()\n const { redirect: searchRedirect } = Route.useSearch()\n const navigate = useNavigate()\n\n // Redirect when authenticated\n useEffect(() => {\n if (isAuthenticated && !isLoading) {\n const target = isSafeRedirect(searchRedirect) ? searchRedirect : \"/projects\"\n navigate({ to: target, replace: true })\n }\n }, [isAuthenticated, isLoading, navigate, searchRedirect])\n\n if (isLoading) {\n return (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\">\n <div className=\"absolute inset-0 backdrop-blur-sm\" />\n <Spinner variant=\"primary\" size=\"large\" />\n </Stack>\n )\n }\n\n if (slots?.login && !isAuthenticated) {\n return (\n <div className=\"mt-8 flex justify-center\">\n <Slot component={slots.login} useShadowDOM={false} />\n </div>\n )\n }\n\n if (!isAuthenticated) {\n return <LoginForm />\n }\n\n // Redirecting...\n return null\n}\n"],"mappings":";;;;;;;;;AAIA,SAAgBM,IAAAA;CACd,IAAM,EAAEC,cAAWC,OAAOC,GAAYC,aAAUL,EAAAA;CAEhD,OACE,gBAACM,OAAAA;EAAIC,WAAU;EACb,UAAA,gBAACD,OAAAA;GAAIC,WAAU;;IACb,gBAACZ,GAAAA;KAAeY,WAAU;KACxB,UAAA,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;;IAEF,gBAACC,KAAAA;KAAED,WAAU;KACX,UAAA,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;;IAGF,gBAACE,QAAAA;KACCF,WAAU;KACVG,WAAWC,MAAAA;MACTA,EAAEC,eAAc;MAChB,IAAMC,IAAW,IAAIC,SAASH,EAAEI,aAAa;MAC7CV,EAAM;OACJW,QAAQC,OAAOJ,EAASK,IAAI,QAAA,KAAa,EAAA;OACzCC,MAAMF,OAAOJ,EAASK,IAAI,MAAA,KAAW,EAAA;OACrCE,UAAUH,OAAOJ,EAASK,IAAI,UAAA,KAAe,EAAA;MAC/C,CAAA;KACF;;MAECd,KAAc,gBAACR,GAAAA;OAAQyB,MAAMjB;OAAYkB,SAAQ;;MAClD,gBAACxB,GAAAA,EACC,UAAA,gBAACC,GAAAA;OAAUwB,IAAG;OAASC,MAAK;OAASC,OAAM;OAASC,cAAa;OAASC,UAAQ;;MAEpF,gBAAC7B,GAAAA,EACC,UAAA,gBAACC,GAAAA;OAAUwB,IAAG;OAAOC,MAAK;OAAOC,OAAM;OAAOC,cAAa;OAAOC,UAAQ;;MAE5E,gBAAC7B,GAAAA,EACC,UAAA,gBAACC,GAAAA;OACCwB,IAAG;OACHC,MAAK;OACLI,MAAK;OACLH,OAAM;OACNC,cAAa;OACbC,UAAQ;;MAIZ,gBAAC9B,GAAAA;OAAO+B,MAAK;OAASN,SAAQ;OAAUf,WAAU;OAAcsB,UAAU3B;OACvEA,UAAAA,IAAY,gBAAA,GAAA,EAAA,IAAA,SAA4B,CAAA,IAAA,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;;;;;;;AAMrD;;;AC9CA,SAASmC,EAAeC,GAAa;CACnC,OAAO,OAAOA,KAAS,YAAYA,EAAKC,WAAW,GAAA,KAAQ,CAACD,EAAKC,WAAW,IAAA;AAC9E;AASA,SAASE,IAAAA;CACP,IAAM,EAAEC,cAAWC,uBAAoBP,EAAAA,GACjC,EAAEQ,aAAUJ,EAAMK,gBAAe,GACjC,EAAEC,UAAUC,MAAmBP,EAAMQ,UAAS,GAC9CC,IAAWnB,EAAAA;CAgCjB,OA7BAG,QAAU;EACR,IAAIU,KAAmB,CAACD,GAAW;GACjC,IAAMQ,IAASb,EAAeU,CAAAA,IAAkBA,IAAiB;GACjEE,EAAS;IAAEE,IAAID;IAAQE,SAAS;GAAK,CAAA;EACvC;CACF,GAAG;EAACT;EAAiBD;EAAWO;EAAUF;CAAe,CAAA,GAErDL,IAEA,gBAAC,GAAA;EAAM,WAAU;EAAgB,cAAa;EAAS,WAAU;EAC/D,UAAA,CAAA,gBAAC,OAAA,EAAI,WAAU,oCAAA,CAAA,GACf,gBAAC,GAAA;GAAQ,SAAQ;GAAU,MAAK;;MAKlCE,GAAOS,SAAS,CAACV,IAEjB,gBAAC,OAAA;EAAI,WAAU;EACb,UAAA,gBAAC,GAAA;GAAK,WAAWC,EAAMS;GAAO,cAAc;;MAK7CV,IAKE,OAJE,gBAAC,GAAA,CAAA,CAAA;AAKZ"}