@cobaltcore-dev/aurora 0.18.0 → 0.19.1
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.
- package/dist/client/App.d.ts +12 -0
- package/dist/client/{BucketToastNotifications-D2Cq2VrV.mjs → BucketToastNotifications-BGd2wVmh.mjs} +2 -2
- package/dist/client/{BucketToastNotifications-D2Cq2VrV.mjs.map → BucketToastNotifications-BGd2wVmh.mjs.map} +1 -1
- package/dist/client/DeletePcaModal-BU6kbKsw.mjs +80 -0
- package/dist/client/DeletePcaModal-BU6kbKsw.mjs.map +1 -0
- package/dist/client/DetailsInfo-BUyuYpJj.mjs +52 -0
- package/dist/client/DetailsInfo-BUyuYpJj.mjs.map +1 -0
- package/dist/client/{FloatingIpActionModals-sJlSFIsK.mjs → FloatingIpActionModals-DAtZoYGS.mjs} +22 -22
- package/dist/client/{FloatingIpActionModals-sJlSFIsK.mjs.map → FloatingIpActionModals-DAtZoYGS.mjs.map} +1 -1
- package/dist/client/{ImageToastNotifications-CISH3c_d.mjs → ImageToastNotifications-BhjU1bfT.mjs} +7 -7
- package/dist/client/{ImageToastNotifications-CISH3c_d.mjs.map → ImageToastNotifications-BhjU1bfT.mjs.map} +1 -1
- package/dist/client/{_flavorId-Cx5tf2KQ.mjs → _flavorId-BQY7YhNx.mjs} +2 -2
- package/dist/client/{_flavorId-Cx5tf2KQ.mjs.map → _flavorId-BQY7YhNx.mjs.map} +1 -1
- package/dist/client/{_flavorId-C6RJfhh8.mjs → _flavorId-sS1sg_DZ.mjs} +3 -3
- package/dist/client/{_flavorId-C6RJfhh8.mjs.map → _flavorId-sS1sg_DZ.mjs.map} +1 -1
- package/dist/client/{_floatingIpId-C4Sa8tMa.mjs → _floatingIpId-BHZGh8U8.mjs} +2 -2
- package/dist/client/{_floatingIpId-C4Sa8tMa.mjs.map → _floatingIpId-BHZGh8U8.mjs.map} +1 -1
- package/dist/client/{_floatingIpId-CAUBZ5WD2.mjs → _floatingIpId-CR3aD38l2.mjs} +5 -5
- package/dist/client/{_floatingIpId-CAUBZ5WD2.mjs.map → _floatingIpId-CR3aD38l2.mjs.map} +1 -1
- package/dist/client/{_imageId-DpXNAIbD.mjs → _imageId-Cf-Xdksv.mjs} +3 -3
- package/dist/client/{_imageId-DpXNAIbD.mjs.map → _imageId-Cf-Xdksv.mjs.map} +1 -1
- package/dist/client/_pcaId-B7j0sXnY.mjs +545 -0
- package/dist/client/_pcaId-B7j0sXnY.mjs.map +1 -0
- package/dist/client/{_projectId-fEA6fnFQ.mjs → _projectId-Cq9JnhRj.mjs} +3 -3
- package/dist/client/{_projectId-fEA6fnFQ.mjs.map → _projectId-Cq9JnhRj.mjs.map} +1 -1
- package/dist/client/{_projectId-w-tZz0FI.mjs → _projectId-D8FHe0gr.mjs} +2 -2
- package/dist/client/{_projectId-w-tZz0FI.mjs.map → _projectId-D8FHe0gr.mjs.map} +1 -1
- package/dist/client/{_projectId-qvINx3Dx.mjs → _projectId-Ig3QqYzt.mjs} +2 -2
- package/dist/client/{_projectId-qvINx3Dx.mjs.map → _projectId-Ig3QqYzt.mjs.map} +1 -1
- package/dist/client/{_projectId-BOaPmCuz.mjs → _projectId-b4NGeECR.mjs} +3 -3
- package/dist/client/{_projectId-BOaPmCuz.mjs.map → _projectId-b4NGeECR.mjs.map} +1 -1
- package/dist/client/{_securityGroupId-B6_lD8ry.mjs → _securityGroupId-BVSsCus9.mjs} +2 -2
- package/dist/client/{_securityGroupId-B6_lD8ry.mjs.map → _securityGroupId-BVSsCus9.mjs.map} +1 -1
- package/dist/client/{_securityGroupId-D9FHSkNU.mjs → _securityGroupId-gwV4eB0s.mjs} +16 -16
- package/dist/client/{_securityGroupId-D9FHSkNU.mjs.map → _securityGroupId-gwV4eB0s.mjs.map} +1 -1
- package/dist/client/{_storageType-ZFnIALny.mjs → _storageType-CH2khFcZ.mjs} +2 -2
- package/dist/client/{_storageType-ZFnIALny.mjs.map → _storageType-CH2khFcZ.mjs.map} +1 -1
- package/dist/client/{_storageType-MgntkZb6.mjs → _storageType-D-1H6SX1.mjs} +856 -856
- package/dist/client/{_storageType-MgntkZb6.mjs.map → _storageType-D-1H6SX1.mjs.map} +1 -1
- package/dist/client/analytics/setupRouterAnalytics.d.ts +20 -0
- package/dist/client/assets/__mocks__/svgMock.d.ts +3 -0
- package/dist/client/build-DgeVmENN.mjs.map +1 -1
- package/dist/client/components/Auth/SessionExpirationTimer.d.ts +4 -0
- package/dist/client/components/ClipboardText.d.ts +10 -0
- package/dist/client/components/ContentHeader/ContentHeader.d.ts +10 -0
- package/dist/client/components/Error/RouteError.d.ts +9 -0
- package/dist/client/components/Error/StatusError.d.ts +11 -0
- package/dist/client/components/JsonEditor.d.ts +39 -0
- package/dist/client/components/ListToolbar/FiltersInput.d.ts +6 -0
- package/dist/client/components/ListToolbar/SelectedFilters.d.ts +24 -0
- package/dist/client/components/ListToolbar/SortInput.d.ts +11 -0
- package/dist/client/components/ListToolbar/index.d.ts +26 -0
- package/dist/client/components/ListToolbar/types.d.ts +116 -0
- package/dist/client/components/ProjectView/ProjectInfoBox.d.ts +12 -0
- package/dist/client/components/Slot.d.ts +7 -0
- package/dist/client/components/navigation/LanguageSelect.d.ts +3 -0
- package/dist/client/components/navigation/MainNavigation.d.ts +10 -0
- package/dist/client/components/navigation/UserMenu.d.ts +1 -0
- package/dist/client/components/navigation/types.d.ts +4 -0
- package/dist/client/{floatingips-DOGKGGkC.mjs → floatingips-DyBEotB8.mjs} +10 -10
- package/dist/client/{floatingips-DOGKGGkC.mjs.map → floatingips-DyBEotB8.mjs.map} +1 -1
- package/dist/client/hooks/index.d.ts +15 -0
- package/dist/client/hooks/useDomainId.d.ts +21 -0
- package/dist/client/hooks/useModalTracking.d.ts +33 -0
- package/dist/client/hooks/useProjectId.d.ts +22 -0
- package/dist/client/hooks-iGiEkLTp.mjs +12 -0
- package/dist/client/hooks-iGiEkLTp.mjs.map +1 -0
- package/dist/client/{images-B1wqMKYw.mjs → images-BklbSacK.mjs} +2 -2
- package/dist/client/{images-B1wqMKYw.mjs.map → images-BklbSacK.mjs.map} +1 -1
- package/dist/client/{images-D5UsQi8i.mjs → images-C3voJ3B1.mjs} +259 -259
- package/dist/client/{images-D5UsQi8i.mjs.map → images-C3voJ3B1.mjs.map} +1 -1
- package/dist/client/index.d.ts +2 -0
- package/dist/client/index.js +337 -344
- package/dist/client/index.js.map +1 -1
- package/dist/client/md-CyCflQee.mjs.map +1 -1
- package/dist/client/{objects-DpgXMFrG.mjs → objects-B3Z8h4RU.mjs} +2 -2
- package/dist/client/{objects-DpgXMFrG.mjs.map → objects-B3Z8h4RU.mjs.map} +1 -1
- package/dist/client/{objects-Deo1Ic1A.mjs → objects-CGOfO00N.mjs} +499 -475
- package/dist/client/objects-CGOfO00N.mjs.map +1 -0
- package/dist/client/{pca-DztTIs18.mjs → pca-72YR_Pk0.mjs} +3 -3
- package/dist/client/pca-72YR_Pk0.mjs.map +1 -0
- package/dist/client/pca-CsBx_IDO.mjs +251 -0
- package/dist/client/pca-CsBx_IDO.mjs.map +1 -0
- package/dist/client/pcaAccess-Br4kVjLQ.mjs +9 -0
- package/dist/client/pcaAccess-Br4kVjLQ.mjs.map +1 -0
- package/dist/client/router.d.ts +7 -0
- package/dist/client/{securitygroups-BRtHaTLm.mjs → securitygroups-8vRbXmBL.mjs} +3 -3
- package/dist/client/{securitygroups-BRtHaTLm.mjs.map → securitygroups-8vRbXmBL.mjs.map} +1 -1
- package/dist/client/store/AuthProvider.d.ts +23 -0
- package/dist/client/trpcClient-BxcNKnhv.mjs +65 -0
- package/dist/client/trpcClient-BxcNKnhv.mjs.map +1 -0
- package/dist/client/trpcClient.d.ts +56 -49
- package/dist/client/utils/buildFilterParams.d.ts +5 -0
- package/dist/client/utils/cn.d.ts +27 -0
- package/dist/client/utils/formatBytes.d.ts +40 -0
- package/dist/client/utils/formatFloatingIpStatus.d.ts +6 -0
- package/dist/client/utils/languageDetection.d.ts +11 -0
- package/dist/client/utils/trpcErrors.d.ts +13 -0
- package/dist/client/utils/useErrorTranslation.d.ts +4 -0
- package/dist/client/utils/useListWithFiltering.d.ts +84 -0
- package/dist/client/utils/useModal.d.ts +3 -0
- package/dist/server/index.d.ts +51 -49
- package/dist/server/index.js +53 -23
- package/package.json +4 -2
- package/dist/client/_pcaId-DY9GPV7t.mjs +0 -479
- package/dist/client/_pcaId-DY9GPV7t.mjs.map +0 -1
- package/dist/client/_pcaId-ldtkXsbp.mjs +0 -36
- package/dist/client/_pcaId-ldtkXsbp.mjs.map +0 -1
- package/dist/client/constants-COPE2ktv.mjs +0 -153
- package/dist/client/constants-COPE2ktv.mjs.map +0 -1
- package/dist/client/hooks-DvdvErNv.mjs +0 -2
- package/dist/client/objects-Deo1Ic1A.mjs.map +0 -1
- package/dist/client/pca-B7WldCGw.mjs +0 -202
- package/dist/client/pca-B7WldCGw.mjs.map +0 -1
- package/dist/client/pca-DztTIs18.mjs.map +0 -1
- package/dist/client/pcaAccess-BYUY700H.mjs +0 -9
- package/dist/client/pcaAccess-BYUY700H.mjs.map +0 -1
- package/dist/client/trpcClient-Dy_MP_Pv.mjs +0 -57
- package/dist/client/trpcClient-Dy_MP_Pv.mjs.map +0 -1
|
@@ -1,202 +0,0 @@
|
|
|
1
|
-
import { A as e, B as t, C as n, E as r, G as i, H as a, K as o, P as s, R as c, U as l, Y as u, at as d, o as f, r as p, rt as m, tt as h, y as g } from "./build-DgeVmENN.mjs";
|
|
2
|
-
import { r as _ } from "./trpcClient-Dy_MP_Pv.mjs";
|
|
3
|
-
import { t as v } from "./pca-DztTIs18.mjs";
|
|
4
|
-
import { t as y } from "./ContentHeader-BIScbvb4.mjs";
|
|
5
|
-
import { t as b } from "./useModal-DCs1OJh7.mjs";
|
|
6
|
-
import { t as x } from "./useProjectId-DBc5lpoU.mjs";
|
|
7
|
-
import "./hooks-DvdvErNv.mjs";
|
|
8
|
-
import { n as S, r as C, t as w } from "./constants-COPE2ktv.mjs";
|
|
9
|
-
import { Fragment as T, jsx as E, jsxs as D } from "react/jsx-runtime";
|
|
10
|
-
import { useState as O } from "react";
|
|
11
|
-
import { useNavigate as k } from "@tanstack/react-router";
|
|
12
|
-
import { Trans as A, useLingui as j } from "@lingui/react";
|
|
13
|
-
import { z as M } from "zod";
|
|
14
|
-
import { useForm as N, useStore as P } from "@tanstack/react-form";
|
|
15
|
-
//#region src/client/routes/_auth/projects/$projectId/services/pca/-components/-table/PcaTableRow.tsx
|
|
16
|
-
var F = ({ pca: t }) => {
|
|
17
|
-
let { i18n: n, _: a } = j(), o = k(), s = x(), [c, l] = b(!1), u = () => o({
|
|
18
|
-
to: "/projects/$projectId/services/pca/$pcaId",
|
|
19
|
-
params: {
|
|
20
|
-
projectId: s,
|
|
21
|
-
pcaId: t.id
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
return /*#__PURE__*/ D(T, { children: [/*#__PURE__*/ D(r, {
|
|
25
|
-
"data-testid": `pca-row-${t.id}`,
|
|
26
|
-
onClick: u,
|
|
27
|
-
children: [
|
|
28
|
-
/*#__PURE__*/ E(i, { children: /*#__PURE__*/ D("div", {
|
|
29
|
-
className: "flex items-center gap-2",
|
|
30
|
-
children: [w[t.state].icon, w[t.state].text]
|
|
31
|
-
}) }),
|
|
32
|
-
/*#__PURE__*/ E(i, { children: t.id }),
|
|
33
|
-
/*#__PURE__*/ E(i, { children: t.configuration?.subject?.common_name || "—" }),
|
|
34
|
-
/*#__PURE__*/ E(i, {
|
|
35
|
-
onClick: (e) => e.stopPropagation(),
|
|
36
|
-
className: "items-end pr-0",
|
|
37
|
-
children: /*#__PURE__*/ E(m, { children: /*#__PURE__*/ D(e, { children: [/*#__PURE__*/ E(d, {
|
|
38
|
-
label: n._({ id: "v0hPHE" }),
|
|
39
|
-
onClick: u
|
|
40
|
-
}), /*#__PURE__*/ E(d, {
|
|
41
|
-
label: n._({ id: "nzFJqC" }),
|
|
42
|
-
onClick: l
|
|
43
|
-
})] }) })
|
|
44
|
-
})
|
|
45
|
-
]
|
|
46
|
-
}, t.id), c && /*#__PURE__*/ E(C, {
|
|
47
|
-
pca: t,
|
|
48
|
-
open: c,
|
|
49
|
-
onClose: l
|
|
50
|
-
})] });
|
|
51
|
-
}, I = /^(?=.{1,253}$)(?:\*\.)?(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+[A-Za-z]{2,63}$/, L = (e) => I.test(e), R = ({ open: e, onClose: n }) => {
|
|
52
|
-
let { i18n: r, _: i } = j(), s = k(), c = x(), u = _.useUtils(), { isPending: d, ...m } = _.services.pca.create.useMutation({ onSettled: () => u.services.pca.list.invalidate() }), h = N({
|
|
53
|
-
defaultValues: { common_name: "" },
|
|
54
|
-
validators: { onSubmit: M.object({ common_name: M.string().trim().min(1, r._({ id: "qhDo93" })).refine((e) => L(e), { message: r._({ id: "gy6L1u" }) }) }) },
|
|
55
|
-
onSubmit: async ({ value: e }) => {
|
|
56
|
-
if (d) return;
|
|
57
|
-
let t = await m.mutateAsync({
|
|
58
|
-
project_id: c,
|
|
59
|
-
configuration: { subject: { common_name: e.common_name } }
|
|
60
|
-
});
|
|
61
|
-
g(), await s({
|
|
62
|
-
to: "/projects/$projectId/services/pca/$pcaId",
|
|
63
|
-
params: {
|
|
64
|
-
projectId: c,
|
|
65
|
-
pcaId: t.id
|
|
66
|
-
}
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
}), g = () => {
|
|
70
|
-
d || (h.reset(), m.reset(), n());
|
|
71
|
-
}, v = P(h.store, (e) => e.isSubmitting || e.values.common_name.trim().length === 0);
|
|
72
|
-
return /*#__PURE__*/ D(p, {
|
|
73
|
-
open: e,
|
|
74
|
-
size: "large",
|
|
75
|
-
title: r._({ id: "WidMsn" }),
|
|
76
|
-
onCancel: g,
|
|
77
|
-
cancelButtonLabel: r._({ id: "dEgA5A" }),
|
|
78
|
-
confirmButtonLabel: r._({ id: "tfDRzk" }),
|
|
79
|
-
onConfirm: h.handleSubmit,
|
|
80
|
-
disableConfirmButton: d || v,
|
|
81
|
-
children: [
|
|
82
|
-
m.error?.message && /*#__PURE__*/ E(t, {
|
|
83
|
-
dismissible: !1,
|
|
84
|
-
variant: "error",
|
|
85
|
-
className: "mb-4",
|
|
86
|
-
children: m.error.message
|
|
87
|
-
}),
|
|
88
|
-
d && /*#__PURE__*/ D("div", {
|
|
89
|
-
className: "mb-4 flex items-center justify-center gap-2",
|
|
90
|
-
children: [/*#__PURE__*/ E(o, { variant: "primary" }), /*#__PURE__*/ E("span", {
|
|
91
|
-
className: "text-theme-high text-sm",
|
|
92
|
-
children: /*#__PURE__*/ E(A, { id: "wdUvGT" })
|
|
93
|
-
})]
|
|
94
|
-
}),
|
|
95
|
-
!d && /*#__PURE__*/ E(f, {
|
|
96
|
-
className: "mb-0",
|
|
97
|
-
id: "create-certificate-authority-form",
|
|
98
|
-
onSubmit: (e) => {
|
|
99
|
-
e.preventDefault(), h.handleSubmit();
|
|
100
|
-
},
|
|
101
|
-
children: /*#__PURE__*/ E(a, {
|
|
102
|
-
className: "mb-4",
|
|
103
|
-
children: /*#__PURE__*/ E(h.Field, {
|
|
104
|
-
name: "common_name",
|
|
105
|
-
children: (e) => /*#__PURE__*/ E(l, {
|
|
106
|
-
id: e.name,
|
|
107
|
-
name: e.name,
|
|
108
|
-
value: e.state.value,
|
|
109
|
-
onBlur: e.handleBlur,
|
|
110
|
-
onChange: (t) => e.handleChange(t.target.value),
|
|
111
|
-
label: r._({ id: "DHrCY6" }),
|
|
112
|
-
placeholder: r._({ id: "RWQ6BN" }),
|
|
113
|
-
helptext: r._({ id: "jVjr9h" }),
|
|
114
|
-
errortext: e.state.meta.errors.map((e) => e?.message).join(", "),
|
|
115
|
-
disabled: d
|
|
116
|
-
})
|
|
117
|
-
})
|
|
118
|
-
})
|
|
119
|
-
})
|
|
120
|
-
]
|
|
121
|
-
});
|
|
122
|
-
}, z = 50, B = () => {
|
|
123
|
-
let { i18n: e, _: t } = j(), a = x(), l = S(), d = l.length, [f, p] = b(!1), [m, v] = O([void 0]), [y, C] = O(1), w = m[y - 1], { data: T, isLoading: k, isError: M, error: N } = _.services.pca.list.useQuery({
|
|
124
|
-
project_id: a,
|
|
125
|
-
limit: z,
|
|
126
|
-
next_page_marker: w
|
|
127
|
-
}), P = T?.certificate_authorities ?? [], I = T?.next_page_marker, L = I ? y + 1 : y, B = Math.max(L, m.length), V = (e) => {
|
|
128
|
-
e < 1 || e > B || (e > y && I && v((t) => {
|
|
129
|
-
let n = [...t];
|
|
130
|
-
return n[e - 1] = I, n;
|
|
131
|
-
}), C(e));
|
|
132
|
-
};
|
|
133
|
-
return k ? /*#__PURE__*/ D(h, {
|
|
134
|
-
className: "py-8",
|
|
135
|
-
distribution: "center",
|
|
136
|
-
alignment: "center",
|
|
137
|
-
direction: "vertical",
|
|
138
|
-
children: [/*#__PURE__*/ E(o, {
|
|
139
|
-
variant: "primary",
|
|
140
|
-
size: "large",
|
|
141
|
-
className: "mb-2"
|
|
142
|
-
}), /*#__PURE__*/ E(A, { id: "Z3FXyt" })]
|
|
143
|
-
}) : M ? /*#__PURE__*/ E(h, {
|
|
144
|
-
className: "py-8",
|
|
145
|
-
distribution: "center",
|
|
146
|
-
alignment: "center",
|
|
147
|
-
direction: "vertical",
|
|
148
|
-
children: N?.message ?? e._({ id: "Sf3Gvg" })
|
|
149
|
-
}) : P.length === 0 && y === 1 ? /*#__PURE__*/ E(s, {
|
|
150
|
-
columns: d,
|
|
151
|
-
className: "pca",
|
|
152
|
-
"data-testid": "no-pcas",
|
|
153
|
-
children: /*#__PURE__*/ E(r, { children: /*#__PURE__*/ D(i, {
|
|
154
|
-
colSpan: d,
|
|
155
|
-
children: [/*#__PURE__*/ E(u, { children: /*#__PURE__*/ E(A, { id: "8S2nDL" }) }), /*#__PURE__*/ E("p", { children: /*#__PURE__*/ E(A, { id: "ng+PCh" }) })]
|
|
156
|
-
}) })
|
|
157
|
-
}) : /*#__PURE__*/ D("div", {
|
|
158
|
-
className: "relative",
|
|
159
|
-
children: [
|
|
160
|
-
/*#__PURE__*/ E(h, {
|
|
161
|
-
className: "pt-3 pb-2",
|
|
162
|
-
distribution: "end",
|
|
163
|
-
children: /*#__PURE__*/ E(g, {
|
|
164
|
-
variant: "primary",
|
|
165
|
-
label: e._({ id: "WidMsn" }),
|
|
166
|
-
onClick: p
|
|
167
|
-
})
|
|
168
|
-
}),
|
|
169
|
-
/*#__PURE__*/ D(s, {
|
|
170
|
-
columns: d,
|
|
171
|
-
children: [/*#__PURE__*/ E(r, { children: l.map((e) => /*#__PURE__*/ E(c, { children: e }, e)) }), P.map((e) => /*#__PURE__*/ E(F, { pca: e }, e.id))]
|
|
172
|
-
}),
|
|
173
|
-
B > 1 && /*#__PURE__*/ E("div", {
|
|
174
|
-
className: "flex justify-center py-4",
|
|
175
|
-
children: /*#__PURE__*/ E(n, {
|
|
176
|
-
variant: "input",
|
|
177
|
-
currentPage: y,
|
|
178
|
-
pages: B,
|
|
179
|
-
onPressPrevious: () => V(y - 1),
|
|
180
|
-
onPressNext: () => V(y + 1)
|
|
181
|
-
})
|
|
182
|
-
}),
|
|
183
|
-
f && /*#__PURE__*/ E(R, {
|
|
184
|
-
open: f,
|
|
185
|
-
onClose: p
|
|
186
|
-
})
|
|
187
|
-
]
|
|
188
|
-
});
|
|
189
|
-
};
|
|
190
|
-
//#endregion
|
|
191
|
-
//#region src/client/routes/_auth/projects/$projectId/services/pca/index.tsx?tsr-split=component
|
|
192
|
-
function V() {
|
|
193
|
-
let { i18n: e, _: t } = j(), { projectId: n } = v.useParams();
|
|
194
|
-
return /*#__PURE__*/ D(T, { children: [/*#__PURE__*/ E(y, {
|
|
195
|
-
title: e._({ id: "ffw//c" }),
|
|
196
|
-
projectId: n
|
|
197
|
-
}), /*#__PURE__*/ E(B, {})] });
|
|
198
|
-
}
|
|
199
|
-
//#endregion
|
|
200
|
-
export { V as component };
|
|
201
|
-
|
|
202
|
-
//# sourceMappingURL=pca-B7WldCGw.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pca-B7WldCGw.mjs","names":["useNavigate","DataGridCell","DataGridRow","PopupMenu","PopupMenuItem","PopupMenuOptions","useModal","useProjectId","DeletePcaModal","STATE_CONFIG","PcaTableRow","pca","useLingui","navigate","projectId","deletePcaModalOpen","toggleDeletePcaModal","navigateToDetailsPage","to","params","pcaId","id","data-testid","onClick","div","className","state","icon","text","configuration","subject","common_name","e","stopPropagation","label","t","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","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","TABLE_COLUMNS","PcaTableRow","CreatePcaModal","ITEMS_PER_PAGE","PcaListContainer","useLingui","projectId","columns","columnsLength","length","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","goToPage","page","prev","updated","className","distribution","alignment","direction","variant","size","message","t","data-testid","colSpan","p","div","label","onClick","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/PcaListContainer.tsx","../../src/client/routes/_auth/projects/$projectId/services/pca/index.tsx?tsr-split=component"],"sourcesContent":["import { useNavigate } from \"@tanstack/react-router\"\nimport { useLingui } from \"@lingui/react/macro\"\nimport {\n DataGridCell,\n DataGridRow,\n PopupMenu,\n PopupMenuItem,\n PopupMenuOptions,\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\"\nimport { STATE_CONFIG } from \"./constants\"\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 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.configuration?.subject?.common_name || \"—\"}</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\nexport interface CreateCaModalProps {\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 }: CreateCaModalProps) => {\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: { common_name: value.common_name },\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 { TABLE_COLUMNS } from \"./-table/constants\"\nimport { PcaTableRow } from \"./-table/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 columns = TABLE_COLUMNS()\n const columnsLength = columns.length\n const [createCaOpen, toggleCreateCa] = useModal(false)\n const [pageMarkers, setPageMarkers] = useState<(string | undefined)[]>([undefined])\n const [currentPage, setCurrentPage] = useState(1)\n\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 if (pcas.length === 0 && currentPage === 1) {\n return (\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\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 <DataGrid columns={columnsLength}>\n <DataGridRow>\n {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 {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/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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pca-DztTIs18.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/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,EAA4C;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,CAAA,EAAG;CACzCgB,YAAY,OAAO,EAAEC,YAASC,gBAAQ;EAIpC,IAAI,CAAChB,EAFgBD,EADK,MAAOgB,EAAQG,YAAYC,KAAKC,qBAAqBC,MAAAA,KAAY,CAAA,CAGnEC,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) => !!(e.pca?.["clavis-beta"] || e.pca?.["clavis-dev"]), t = (t, n) => {
|
|
3
|
-
let r = !n || n.includes("pca");
|
|
4
|
-
return e(t) && r;
|
|
5
|
-
};
|
|
6
|
-
//#endregion
|
|
7
|
-
export { t };
|
|
8
|
-
|
|
9
|
-
//# sourceMappingURL=pcaAccess-BYUY700H.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pcaAccess-BYUY700H.mjs","names":["hasClavisPcaService","serviceIndex","Boolean","canAccessClavisPca","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 hasClavisPcaService = (serviceIndex: ServiceIndex) => {\n // Temporary mapping while Clavis is exposed under beta/dev service names.\n return Boolean(serviceIndex[\"pca\"]?.[\"clavis-beta\"] || serviceIndex[\"pca\"]?.[\"clavis-dev\"])\n}\n\nexport const canAccessClavisPca = (serviceIndex: ServiceIndex, enabledServices?: string[]) => {\n const isPcaEnabled = !enabledServices || enabledServices.includes(\"pca\")\n return hasClavisPcaService(serviceIndex) && isPcaEnabled\n}\n"],"mappings":";AAIA,IAAaA,KAAuBC,MAE3BC,GAAQD,EAAa,MAAS,kBAAkBA,EAAa,MAAS,gBAGlEE,KAAsBF,GAA4BG,MAAAA;CAC7D,IAAMC,IAAe,CAACD,KAAmBA,EAAgBE,SAAS,KAAA;CAClE,OAAON,EAAoBC,CAAAA,KAAiBI;AAC9C"}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { createTRPCReact as e } from "@trpc/react-query";
|
|
2
|
-
import { createTRPCClient as t, httpBatchLink as n, httpBatchStreamLink as r, httpLink as i, httpSubscriptionLink as a, isNonJsonSerializable as o, splitLink as s } from "@trpc/client";
|
|
3
|
-
//#region src/client/trpcClient.ts
|
|
4
|
-
var c = async () => {
|
|
5
|
-
try {
|
|
6
|
-
let { csrfToken: e } = await fetch("/csrf-token").then((e) => e.json());
|
|
7
|
-
return { "x-csrf-token": e };
|
|
8
|
-
} catch (e) {
|
|
9
|
-
return console.error("Failed to fetch CSRF token:", e), {};
|
|
10
|
-
}
|
|
11
|
-
}, l = new Set(["storage.swift.downloadObject", "storage.ceph.objects.downloadObject"]), u = "/polaris-bff";
|
|
12
|
-
function d(e) {
|
|
13
|
-
u = e;
|
|
14
|
-
}
|
|
15
|
-
var f = () => [s({
|
|
16
|
-
condition: (e) => e.type === "subscription",
|
|
17
|
-
true: a({
|
|
18
|
-
url: u,
|
|
19
|
-
eventSourceOptions: async () => ({ headers: await c() })
|
|
20
|
-
}),
|
|
21
|
-
false: s({
|
|
22
|
-
condition: (e) => o(e.input),
|
|
23
|
-
true: i({
|
|
24
|
-
url: u,
|
|
25
|
-
async headers({ op: e }) {
|
|
26
|
-
let t = await c(), n = e.context?.headers ?? {};
|
|
27
|
-
return {
|
|
28
|
-
...t,
|
|
29
|
-
...n
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
}),
|
|
33
|
-
false: s({
|
|
34
|
-
condition: (e) => l.has(e.path),
|
|
35
|
-
true: r({
|
|
36
|
-
url: u,
|
|
37
|
-
async headers() {
|
|
38
|
-
return c();
|
|
39
|
-
}
|
|
40
|
-
}),
|
|
41
|
-
false: n({
|
|
42
|
-
url: u,
|
|
43
|
-
async headers() {
|
|
44
|
-
return c();
|
|
45
|
-
}
|
|
46
|
-
})
|
|
47
|
-
})
|
|
48
|
-
})
|
|
49
|
-
})], p = e(), m = null, h = null, g = new Proxy({}, { get(e, t) {
|
|
50
|
-
return m ||= p.createClient({ links: f() }), m[t];
|
|
51
|
-
} }), _ = new Proxy({}, { get(e, n) {
|
|
52
|
-
return h ||= t({ links: f() }), h[n];
|
|
53
|
-
} });
|
|
54
|
-
//#endregion
|
|
55
|
-
export { g as i, _ as n, p as r, d as t };
|
|
56
|
-
|
|
57
|
-
//# sourceMappingURL=trpcClient-Dy_MP_Pv.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"trpcClient-Dy_MP_Pv.mjs","names":["createTRPCReact","createTRPCClient","httpBatchLink","httpBatchStreamLink","httpLink","splitLink","isNonJsonSerializable","httpSubscriptionLink","getCsrfHeaders","csrfToken","fetch","then","res","json","error","console","STREAMING_PROCEDURES","Set","_bffEndpoint","setBffEndpoint","endpoint","getLinks","condition","op","type","true","url","eventSourceOptions","headers","false","input","csrf","extra","context","has","path","trpcReact","_trpcReactClient","_trpcClient","trpcReactClient","Proxy","get","_target","prop","createClient","links","trpcClient"],"sources":["../../src/client/trpcClient.ts"],"sourcesContent":["import { createTRPCReact } from \"@trpc/react-query\"\nimport type { CreateTRPCReact } from \"@trpc/react-query\"\nimport { createTRPCClient, type TRPCClient } from \"@trpc/client\"\nimport {\n httpBatchLink,\n httpBatchStreamLink,\n httpLink,\n splitLink,\n isNonJsonSerializable,\n httpSubscriptionLink,\n} from \"@trpc/client\"\nimport type { AuroraRouter } from \"../server/routers\"\n\n/** Type alias for the React tRPC client */\nexport type TrpcReact = ReturnType<typeof createTRPCReact<AuroraRouter>>\n\n/** Type alias for the vanilla tRPC client */\nexport type TrpcClient = ReturnType<typeof createTRPCClient<AuroraRouter>>\n\n/** Generic type for creating a typed React tRPC client with a custom router */\nexport type CreateTypedTrpcReact<TRouter extends AuroraRouter> = CreateTRPCReact<TRouter, unknown>\n\n/** Generic type for creating a typed vanilla tRPC client with a custom router */\nexport type CreateTypedTrpcClient<TRouter extends AuroraRouter> = TRPCClient<TRouter>\n\n// CSRF headers factory\nconst getCsrfHeaders = async () => {\n try {\n const { csrfToken } = await fetch(\"/csrf-token\").then((res) => res.json())\n return {\n \"x-csrf-token\": csrfToken,\n }\n } catch (error) {\n console.error(\"Failed to fetch CSRF token:\", error)\n return {}\n }\n}\n\n// Procedures that return async iterables (chunked streaming responses).\n// These are routed through httpBatchStreamLink instead of httpBatchLink.\n// Add any new streaming procedure paths here.\nconst STREAMING_PROCEDURES = new Set<string>([\"storage.swift.downloadObject\", \"storage.ceph.objects.downloadObject\"])\n\n// Mutable endpoint — set once by App before any tRPC calls are made.\nlet _bffEndpoint = \"/polaris-bff\"\n\nexport function setBffEndpoint(endpoint: string) {\n _bffEndpoint = endpoint\n}\n\nconst getLinks = () => [\n splitLink({\n // First check: is it a subscription?\n condition: (op) => op.type === \"subscription\",\n // Use HTTP subscription link for subscriptions (long-polling)\n true: httpSubscriptionLink({\n url: _bffEndpoint,\n // Callback to populate headers\n eventSourceOptions: async () => {\n return { headers: await getCsrfHeaders() }\n },\n }),\n // For non-subscriptions, check for non-JSON data or streaming procedures\n false: splitLink({\n // Non-JSON serializable input (FormData, Blob, ArrayBuffer, etc.) → plain httpLink.\n condition: (op) => isNonJsonSerializable(op.input),\n true: httpLink({\n url: _bffEndpoint,\n async headers({ op }) {\n const csrf = await getCsrfHeaders()\n // Per-request headers can be injected via tRPC operation context.\n // op.context is set by the caller and forwarded through the link chain.\n const extra = (op.context as { headers?: Record<string, string> } | undefined)?.headers ?? {}\n return { ...csrf, ...extra }\n },\n }),\n // For JSON procedures, decide between streaming and regular batching\n false: splitLink({\n // Procedures returning async iterables must use httpBatchStreamLink.\n // httpBatchLink buffers the full response before resolving, which\n // breaks streaming. httpBatchStreamLink preserves batching while\n // supporting chunked/streamed responses.\n // Note: httpBatchStreamLink is intentionally NOT used globally because\n // it is incompatible with the @fastify/csrf-protection cookie rotation\n // used in this app — CSRF tokens can expire mid-stream on long-lived\n // connections. Scope it only to procedures that actually need streaming.\n condition: (op) => STREAMING_PROCEDURES.has(op.path),\n true: httpBatchStreamLink({\n url: _bffEndpoint,\n async headers() {\n return getCsrfHeaders()\n },\n }),\n // Regular JSON mutations/queries — standard batching\n false: httpBatchLink({\n url: _bffEndpoint,\n async headers() {\n return getCsrfHeaders()\n },\n }),\n }),\n }),\n }),\n]\n\n// React Query client (for hooks like useQuery/useMutation/useSubscription)\nexport const trpcReact: TrpcReact = createTRPCReact<AuroraRouter>()\n\nlet _trpcReactClient: ReturnType<typeof trpcReact.createClient> | null = null\nlet _trpcClient: TrpcClient | null = null\n\n// Lazily initialised — created on first access after setBffEndpoint() has been called by App.\nexport const trpcReactClient = new Proxy({} as ReturnType<typeof trpcReact.createClient>, {\n get(_target, prop) {\n if (!_trpcReactClient) {\n _trpcReactClient = trpcReact.createClient({ links: getLinks() })\n }\n return (_trpcReactClient as Record<string | symbol, unknown>)[prop]\n },\n})\n\nexport const trpcClient: TrpcClient = new Proxy({} as TrpcClient, {\n get(_target, prop) {\n if (!_trpcClient) {\n _trpcClient = createTRPCClient<AuroraRouter>({ links: getLinks() })\n }\n return (_trpcClient as Record<string | symbol, unknown>)[prop]\n },\n})\n"],"mappings":";;;AA0BA,IAAMQ,IAAiB,YAAA;CACrB,IAAI;EACF,IAAM,EAAEC,iBAAc,MAAMC,MAAM,aAAA,EAAeC,MAAMC,MAAQA,EAAIC,KAAI,CAAA;EACvE,OAAO,EACL,gBAAgBJ,EAClB;CACF,SAASK,GAAO;EAEd,OADAC,QAAQD,MAAM,+BAA+BA,CAAAA,GACtC,CAAC;CACV;AACF,GAKME,IAAuB,IAAIC,IAAY,CAAC,gCAAgC,qCAAA,CAAsC,GAGhHC,IAAe;AAEnB,SAAgBC,EAAeC,GAAgB;CAC7CF,IAAeE;AACjB;AAEA,IAAMC,UAAiB,CACrBhB,EAAU;CAERiB,YAAYC,MAAOA,EAAGC,SAAS;CAE/BC,MAAMlB,EAAqB;EACzBmB,KAAKR;EAELS,oBAAoB,aACX,EAAEC,SAAS,MAAMpB,EAAAA,EAAiB;CAE7C,CAAA;CAEAqB,OAAOxB,EAAU;EAEfiB,YAAYC,MAAOjB,EAAsBiB,EAAGO,KAAK;EACjDL,MAAMrB,EAAS;GACbsB,KAAKR;GACL,MAAMU,QAAQ,EAAEL,SAAI;IAClB,IAAMQ,IAAO,MAAMvB,EAAAA,GAGbwB,IAAQ,EAAIC,SAA8DL,WAAW,CAAC;IAC5F,OAAO;KAAE,GAAGG;KAAM,GAAGC;IAAM;GAC7B;EACF,CAAA;EAEAH,OAAOxB,EAAU;GASfiB,YAAYC,MAAOP,EAAqBkB,IAAIX,EAAGY,IAAI;GACnDV,MAAMtB,EAAoB;IACxBuB,KAAKR;IACL,MAAMU,UAAAA;KACJ,OAAOpB,EAAAA;IACT;GACF,CAAA;GAEAqB,OAAO3B,EAAc;IACnBwB,KAAKR;IACL,MAAMU,UAAAA;KACJ,OAAOpB,EAAAA;IACT;GACF,CAAA;EACF,CAAA;CACF,CAAA;AACF,CAAA,CAAA,GAIW4B,IAAuBpC,EAAAA,GAEhCqC,IAAqE,MACrEC,IAAiC,MAGxBC,IAAkB,IAAIC,MAAM,CAAC,GAAgD,EACxFC,IAAIC,GAASC,GAAI;CAIf,OAHA,AACEN,MAAmBD,EAAUQ,aAAa,EAAEC,OAAOxB,EAAAA,EAAW,CAAA,GAEzD,EAAuDsB;AAChE,EACF,CAAA,GAEaG,IAAyB,IAAIN,MAAM,CAAC,GAAiB,EAChEC,IAAIC,GAASC,GAAI;CAIf,OAHA,AACEL,MAAcrC,EAA+B,EAAE4C,OAAOxB,EAAAA,EAAW,CAAA,GAE5D,EAAkDsB;AAC3D,EACF,CAAA"}
|