@cobaltcore-dev/aurora 1.1.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.
- package/README.md +59 -9
- package/dist/client/App.d.ts +2 -2
- package/dist/client/AuroraApp.d.ts +33 -13
- package/dist/client/{AuthProvider-BS5OVv8n.mjs → AuthProvider-CVSAwW9f.mjs} +22 -8
- package/dist/client/AuthProvider-CVSAwW9f.mjs.map +1 -0
- package/dist/client/{ContentHeader-BHMUzd9H.mjs → ContentHeader-CPJbgYWn.mjs} +18 -18
- package/dist/client/{ContentHeader-BHMUzd9H.mjs.map → ContentHeader-CPJbgYWn.mjs.map} +1 -1
- package/dist/client/DeleteFlavorModal-V44QCJBd.mjs +773 -0
- package/dist/client/DeleteFlavorModal-V44QCJBd.mjs.map +1 -0
- package/dist/client/DynamicBreadcrumbContext-CVcUQFou.mjs +26 -0
- package/dist/client/DynamicBreadcrumbContext-CVcUQFou.mjs.map +1 -0
- package/dist/client/{FiltersInput-B8CNBg1L.mjs → FiltersInput-CKI6zWnm.mjs} +18 -18
- package/dist/client/{FiltersInput-B8CNBg1L.mjs.map → FiltersInput-CKI6zWnm.mjs.map} +1 -1
- package/dist/client/FloatingIpActionModals-CwEC5GR-.mjs +460 -0
- package/dist/client/FloatingIpActionModals-CwEC5GR-.mjs.map +1 -0
- package/dist/client/ImageToastNotifications-m6c3tVPb.mjs +1152 -0
- package/dist/client/ImageToastNotifications-m6c3tVPb.mjs.map +1 -0
- package/dist/client/SortInput-4g7nSTHW.mjs +34 -0
- package/dist/client/SortInput-4g7nSTHW.mjs.map +1 -0
- package/dist/client/{TwoColumnDescriptionList-DiDx3PnH.mjs → TwoColumnDescriptionList-NvgvErua.mjs} +2 -2
- package/dist/client/{TwoColumnDescriptionList-DiDx3PnH.mjs.map → TwoColumnDescriptionList-NvgvErua.mjs.map} +1 -1
- package/dist/client/_-CAsCx-Ay.mjs +6 -0
- package/dist/client/_-CAsCx-Ay.mjs.map +1 -0
- package/dist/client/_auth-SrDjHL6j.mjs +12 -0
- package/dist/client/_auth-SrDjHL6j.mjs.map +1 -0
- package/dist/client/_flavorId-9PcBBW52.mjs +231 -0
- package/dist/client/_flavorId-9PcBBW52.mjs.map +1 -0
- package/dist/client/{_flavorId-BN_qessZ.mjs → _flavorId-a9Gu66R1.mjs} +3 -9
- package/dist/client/_flavorId-a9Gu66R1.mjs.map +1 -0
- package/dist/client/_floatingIpId-AE9Fu8l6.mjs +210 -0
- package/dist/client/_floatingIpId-AE9Fu8l6.mjs.map +1 -0
- package/dist/client/{_floatingIpId-CwDGHkWm.mjs → _floatingIpId-AZ11Ksmu.mjs} +3 -9
- package/dist/client/_floatingIpId-AZ11Ksmu.mjs.map +1 -0
- package/dist/client/{_imageId-BtJ7GmYB.mjs → _imageId-BtAql2Kr.mjs} +104 -92
- package/dist/client/_imageId-BtAql2Kr.mjs.map +1 -0
- package/dist/client/_imageId-D76BxvFY.mjs +39 -0
- package/dist/client/_imageId-D76BxvFY.mjs.map +1 -0
- package/dist/client/{_projectId-Byt3GQDW.mjs → _projectId-7Nl1MQTJ.mjs} +5 -5
- package/dist/client/_projectId-7Nl1MQTJ.mjs.map +1 -0
- package/dist/client/_projectId-B3wmSala.mjs +281 -0
- package/dist/client/_projectId-B3wmSala.mjs.map +1 -0
- package/dist/client/_projectId-DPzv0CCp.mjs +77 -0
- package/dist/client/_projectId-DPzv0CCp.mjs.map +1 -0
- package/dist/client/_projectId-DfeVJy0G.mjs +30 -0
- package/dist/client/_projectId-DfeVJy0G.mjs.map +1 -0
- package/dist/client/_securityGroupId-C5huJNfO.mjs +1810 -0
- package/dist/client/_securityGroupId-C5huJNfO.mjs.map +1 -0
- package/dist/client/{_securityGroupId-BcbkRhsN.mjs → _securityGroupId-D85mSigA.mjs} +3 -9
- package/dist/client/_securityGroupId-D85mSigA.mjs.map +1 -0
- package/dist/client/_serviceType-DS8DxsrP.mjs +20 -0
- package/dist/client/_serviceType-DS8DxsrP.mjs.map +1 -0
- package/dist/client/_serviceType-M8d9rOT6.mjs +6 -0
- package/dist/client/_serviceType-M8d9rOT6.mjs.map +1 -0
- package/dist/client/_storageType-BRWWJtow.mjs +14 -0
- package/dist/client/_storageType-BRWWJtow.mjs.map +1 -0
- package/dist/client/_storageType-CzZ4u9x_.mjs +12 -0
- package/dist/client/_storageType-CzZ4u9x_.mjs.map +1 -0
- package/dist/client/_storageType-Dy9uCVXr.mjs +845 -0
- package/dist/client/_storageType-Dy9uCVXr.mjs.map +1 -0
- package/dist/client/_storageType-zeSZe--V.mjs.map +1 -1
- package/dist/client/{about-_73VmpTB.mjs → about-BmQTyLWc.mjs} +2 -2
- package/dist/client/{about-_73VmpTB.mjs.map → about-BmQTyLWc.mjs.map} +1 -1
- package/dist/client/{aurora-EbwGRLLf.mjs → aurora-CIml-f2f.mjs} +2 -2
- package/dist/client/{aurora-EbwGRLLf.mjs.map → aurora-CIml-f2f.mjs.map} +1 -1
- package/dist/client/{build-C_4vRMCq.mjs → build-WuxXRAqf.mjs} +121 -24
- package/dist/client/{build-C_4vRMCq.mjs.map → build-WuxXRAqf.mjs.map} +1 -1
- package/dist/client/components/Breadcrumbs.d.ts +1 -0
- package/dist/client/components/ListToolbar/SortInput.d.ts +3 -0
- package/dist/client/context/BreadcrumbExtensionContext.d.ts +9 -0
- package/dist/client/context/DynamicBreadcrumbContext.d.ts +9 -0
- package/dist/client/{flavors-CiHCYrtZ.mjs → flavors-B0rbqffG.mjs} +3 -5
- package/dist/client/flavors-B0rbqffG.mjs.map +1 -0
- package/dist/client/flavors-DWMZ6TuJ.mjs.map +1 -1
- package/dist/client/flavors-Rl20bxVU.mjs +628 -0
- package/dist/client/flavors-Rl20bxVU.mjs.map +1 -0
- package/dist/client/floatingips-Cz9k80cc.mjs +8 -0
- package/dist/client/floatingips-Cz9k80cc.mjs.map +1 -0
- package/dist/client/floatingips-xbO_mu4f.mjs +576 -0
- package/dist/client/floatingips-xbO_mu4f.mjs.map +1 -0
- package/dist/client/hooks/useBreadcrumbs.d.ts +16 -0
- package/dist/client/hooks/usePushBreadcrumbs.d.ts +10 -0
- package/dist/client/hooks/useSetBreadcrumb.d.ts +11 -0
- package/dist/client/{hooks-LutR2Yg3.mjs → hooks-D0yKIumu.mjs} +2 -2
- package/dist/client/{hooks-LutR2Yg3.mjs.map → hooks-D0yKIumu.mjs.map} +1 -1
- package/dist/client/images-BGQv9kKT.mjs +1983 -0
- package/dist/client/images-BGQv9kKT.mjs.map +1 -0
- package/dist/client/{images-CS4kZQyu.mjs → images-CPmMa4SQ.mjs} +3 -5
- package/dist/client/images-CPmMa4SQ.mjs.map +1 -0
- package/dist/client/images-NBf2bV43.mjs.map +1 -1
- package/dist/client/index.d.ts +7 -3
- package/dist/client/index.js +549 -535
- package/dist/client/index.js.map +1 -1
- package/dist/client/{objects-C3azvW8m.mjs → objects-BE_u5yRt.mjs} +7087 -4211
- package/dist/client/objects-BE_u5yRt.mjs.map +1 -0
- package/dist/client/objects-BN-59Th0.mjs +66 -0
- package/dist/client/objects-BN-59Th0.mjs.map +1 -0
- package/dist/client/objects-D9Luf9KB.mjs +66 -0
- package/dist/client/objects-D9Luf9KB.mjs.map +1 -0
- package/dist/client/projects-yiK0HGSA.mjs.map +1 -1
- package/dist/client/routeInfo-DP3v74Wg.mjs +19 -0
- package/dist/client/routeInfo-DP3v74Wg.mjs.map +1 -0
- package/dist/client/router.d.ts +2 -2
- package/dist/client/{routes-CdDm-hhO.mjs → routes-CJj7SR_K.mjs} +2 -2
- package/dist/client/routes-CJj7SR_K.mjs.map +1 -0
- package/dist/client/routes-xofA3ksU.mjs +110 -0
- package/dist/client/routes-xofA3ksU.mjs.map +1 -0
- package/dist/client/securitygroups-BjhgLBHm.mjs +620 -0
- package/dist/client/securitygroups-BjhgLBHm.mjs.map +1 -0
- package/dist/client/securitygroups-CtKne8UQ.mjs +8 -0
- package/dist/client/securitygroups-CtKne8UQ.mjs.map +1 -0
- package/dist/client/{securitygroups-Byte-iSp.mjs → securitygroups-DEJQBcxm.mjs} +3 -5
- package/dist/client/securitygroups-DEJQBcxm.mjs.map +1 -0
- package/dist/client/trpcClient.d.ts +135 -3
- package/dist/client/useBreadcrumbs-ha3IlaxX.mjs +54 -0
- package/dist/client/useBreadcrumbs-ha3IlaxX.mjs.map +1 -0
- package/dist/client/useModalTracking-BcOKTYRN.mjs +33 -0
- package/dist/client/useModalTracking-BcOKTYRN.mjs.map +1 -0
- package/dist/client/{useSecurityGroupPermissions-C29mzb3b.mjs → useSecurityGroupPermissions-BOyLQLdC.mjs} +85 -19
- package/dist/client/useSecurityGroupPermissions-BOyLQLdC.mjs.map +1 -0
- package/dist/client/useSetBreadcrumb-tn7lBaQV.mjs +19 -0
- package/dist/client/useSetBreadcrumb-tn7lBaQV.mjs.map +1 -0
- package/dist/client/utils/formatSwiftDate.d.ts +30 -0
- package/dist/server/index.d.ts +136 -4
- package/dist/server/index.js +845 -260
- package/package.json +37 -36
- package/dist/client/AuthProvider-BS5OVv8n.mjs.map +0 -1
- package/dist/client/DeleteFlavorModal-BP83t9zX.mjs +0 -721
- package/dist/client/DeleteFlavorModal-BP83t9zX.mjs.map +0 -1
- package/dist/client/FloatingIpActionModals-BraiJWBi.mjs +0 -417
- package/dist/client/FloatingIpActionModals-BraiJWBi.mjs.map +0 -1
- package/dist/client/ImageToastNotifications-BXMHJaIH.mjs +0 -1131
- package/dist/client/ImageToastNotifications-BXMHJaIH.mjs.map +0 -1
- package/dist/client/RouteError-hAF8_jbe.mjs +0 -25
- package/dist/client/RouteError-hAF8_jbe.mjs.map +0 -1
- package/dist/client/SortInput-Cqs2poV3.mjs +0 -34
- package/dist/client/SortInput-Cqs2poV3.mjs.map +0 -1
- package/dist/client/StatusError-C5KodQOq.mjs +0 -39
- package/dist/client/StatusError-C5KodQOq.mjs.map +0 -1
- package/dist/client/_auth-DJ9wHZaj.mjs +0 -11
- package/dist/client/_auth-DJ9wHZaj.mjs.map +0 -1
- package/dist/client/_flavorId-BN_qessZ.mjs.map +0 -1
- package/dist/client/_flavorId-CJjEB_Ao.mjs +0 -210
- package/dist/client/_flavorId-CJjEB_Ao.mjs.map +0 -1
- package/dist/client/_floatingIpId-CwDGHkWm.mjs.map +0 -1
- package/dist/client/_floatingIpId-foMIwbE4.mjs +0 -215
- package/dist/client/_floatingIpId-foMIwbE4.mjs.map +0 -1
- package/dist/client/_imageId-BtJ7GmYB.mjs.map +0 -1
- package/dist/client/_projectId-BmtCuzJu.mjs +0 -29
- package/dist/client/_projectId-BmtCuzJu.mjs.map +0 -1
- package/dist/client/_projectId-Byt3GQDW.mjs.map +0 -1
- package/dist/client/_projectId-NYk1IN_a.mjs +0 -291
- package/dist/client/_projectId-NYk1IN_a.mjs.map +0 -1
- package/dist/client/_projectId-QueiFczy.mjs +0 -46
- package/dist/client/_projectId-QueiFczy.mjs.map +0 -1
- package/dist/client/_securityGroupId-BcbkRhsN.mjs.map +0 -1
- package/dist/client/_securityGroupId-pPtJsCoe.mjs +0 -1797
- package/dist/client/_securityGroupId-pPtJsCoe.mjs.map +0 -1
- package/dist/client/_storageType-BmqrU06i.mjs +0 -2202
- package/dist/client/_storageType-BmqrU06i.mjs.map +0 -1
- package/dist/client/components/Error/StatusError.d.ts +0 -11
- package/dist/client/components/ProjectView/ProjectInfoBox.d.ts +0 -12
- package/dist/client/flavors-CiHCYrtZ.mjs.map +0 -1
- package/dist/client/flavors-DY-bDc8l.mjs +0 -650
- package/dist/client/flavors-DY-bDc8l.mjs.map +0 -1
- package/dist/client/floatingips-Ci4jHkaG.mjs +0 -591
- package/dist/client/floatingips-Ci4jHkaG.mjs.map +0 -1
- package/dist/client/images-91U7tr9Y2.mjs +0 -1976
- package/dist/client/images-91U7tr9Y2.mjs.map +0 -1
- package/dist/client/images-CS4kZQyu.mjs.map +0 -1
- package/dist/client/objects-C3azvW8m.mjs.map +0 -1
- package/dist/client/objects-CM265S6b.mjs +0 -56
- package/dist/client/objects-CM265S6b.mjs.map +0 -1
- package/dist/client/objects-EE9Cd1wI.mjs +0 -56
- package/dist/client/objects-EE9Cd1wI.mjs.map +0 -1
- package/dist/client/routeInfo-DXqB2HCf.mjs +0 -32
- package/dist/client/routeInfo-DXqB2HCf.mjs.map +0 -1
- package/dist/client/routes-CBd8CCuM.mjs +0 -115
- package/dist/client/routes-CBd8CCuM.mjs.map +0 -1
- package/dist/client/routes-CdDm-hhO.mjs.map +0 -1
- package/dist/client/securitygroups-Bd_uV4S9.mjs +0 -595
- package/dist/client/securitygroups-Bd_uV4S9.mjs.map +0 -1
- package/dist/client/securitygroups-Byte-iSp.mjs.map +0 -1
- package/dist/client/useSecurityGroupPermissions-C29mzb3b.mjs.map +0 -1
|
@@ -1,10 +1,76 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { K as e, L as t, M as n, P as r, X as i, ft as a, h as o, i as s, lt as c, m as l, p as u } from "./build-WuxXRAqf.mjs";
|
|
2
2
|
import { a as d } from "./trpcClient-D7gpR7YG.mjs";
|
|
3
3
|
import { jsx as f, jsxs as p } from "react/jsx-runtime";
|
|
4
4
|
import { useEffect as m, useState as h } from "react";
|
|
5
5
|
import { Trans as g, useLingui as _ } from "@lingui/react";
|
|
6
|
-
//#region src/client/routes/_auth/projects/$projectId/network/securitygroups/-components
|
|
7
|
-
var v = (
|
|
6
|
+
//#region src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/SecurityGroupToastNotifications.tsx
|
|
7
|
+
var v = (e) => ({
|
|
8
|
+
message: /*#__PURE__*/ f(g, { id: "FT6BiH" }),
|
|
9
|
+
description: /*#__PURE__*/ f(g, {
|
|
10
|
+
id: "+rAGXM",
|
|
11
|
+
values: { name: e }
|
|
12
|
+
})
|
|
13
|
+
}), y = (e) => ({
|
|
14
|
+
message: /*#__PURE__*/ f(g, { id: "xc8SHc" }),
|
|
15
|
+
description: /*#__PURE__*/ f(g, {
|
|
16
|
+
id: "K4twCt",
|
|
17
|
+
values: { errorMessage: e }
|
|
18
|
+
})
|
|
19
|
+
}), b = (e) => ({
|
|
20
|
+
message: /*#__PURE__*/ f(g, { id: "pySxXV" }),
|
|
21
|
+
description: /*#__PURE__*/ f(g, {
|
|
22
|
+
id: "/GSSFQ",
|
|
23
|
+
values: { name: e }
|
|
24
|
+
})
|
|
25
|
+
}), x = (e) => ({
|
|
26
|
+
message: /*#__PURE__*/ f(g, { id: "9PnW2j" }),
|
|
27
|
+
description: /*#__PURE__*/ f(g, {
|
|
28
|
+
id: "6x1HCw",
|
|
29
|
+
values: { errorMessage: e }
|
|
30
|
+
})
|
|
31
|
+
}), S = () => ({
|
|
32
|
+
message: /*#__PURE__*/ f(g, { id: "3qYWKy" }),
|
|
33
|
+
description: /*#__PURE__*/ f(g, { id: "8Xn6tg" })
|
|
34
|
+
}), C = (e) => ({
|
|
35
|
+
message: /*#__PURE__*/ f(g, { id: "3cksfP" }),
|
|
36
|
+
description: /*#__PURE__*/ f(g, {
|
|
37
|
+
id: "nqaM9R",
|
|
38
|
+
values: { errorMessage: e }
|
|
39
|
+
})
|
|
40
|
+
}), w = () => ({
|
|
41
|
+
message: /*#__PURE__*/ f(g, { id: "ygiW4d" }),
|
|
42
|
+
description: /*#__PURE__*/ f(g, { id: "lbxRVC" })
|
|
43
|
+
}), T = (e) => ({
|
|
44
|
+
message: /*#__PURE__*/ f(g, { id: "qToFUF" }),
|
|
45
|
+
description: /*#__PURE__*/ f(g, {
|
|
46
|
+
id: "/9TcRw",
|
|
47
|
+
values: { errorMessage: e }
|
|
48
|
+
})
|
|
49
|
+
}), E = (e) => ({
|
|
50
|
+
message: /*#__PURE__*/ f(g, { id: "CpPgKl" }),
|
|
51
|
+
description: /*#__PURE__*/ f(g, {
|
|
52
|
+
id: "3Gviib",
|
|
53
|
+
values: { targetTenant: e }
|
|
54
|
+
})
|
|
55
|
+
}), D = (e) => ({
|
|
56
|
+
message: /*#__PURE__*/ f(g, { id: "7xCEph" }),
|
|
57
|
+
description: /*#__PURE__*/ f(g, {
|
|
58
|
+
id: "tXYQKw",
|
|
59
|
+
values: { errorMessage: e }
|
|
60
|
+
})
|
|
61
|
+
}), O = (e) => ({
|
|
62
|
+
message: /*#__PURE__*/ f(g, { id: "+lwzZX" }),
|
|
63
|
+
description: /*#__PURE__*/ f(g, {
|
|
64
|
+
id: "+W6219",
|
|
65
|
+
values: { targetTenant: e }
|
|
66
|
+
})
|
|
67
|
+
}), k = (e) => ({
|
|
68
|
+
message: /*#__PURE__*/ f(g, { id: "YmvhrF" }),
|
|
69
|
+
description: /*#__PURE__*/ f(g, {
|
|
70
|
+
id: "Pc3uze",
|
|
71
|
+
values: { errorMessage: e }
|
|
72
|
+
})
|
|
73
|
+
}), A = ({ securityGroup: d, open: v, onClose: y, onUpdate: b, isLoading: x = !1, error: S = null }) => {
|
|
8
74
|
let { i18n: C, _: w } = _(), [T, E] = h({
|
|
9
75
|
name: d.name || "",
|
|
10
76
|
description: d.description || ""
|
|
@@ -38,30 +104,30 @@ var v = ({ securityGroup: d, open: v, onClose: y, onUpdate: b, isLoading: x = !1
|
|
|
38
104
|
}, M = () => {
|
|
39
105
|
O({}), y();
|
|
40
106
|
};
|
|
41
|
-
return /*#__PURE__*/ p(
|
|
107
|
+
return /*#__PURE__*/ p(i, {
|
|
42
108
|
open: v,
|
|
43
109
|
onCancel: M,
|
|
44
110
|
size: "large",
|
|
45
111
|
title: C._({ id: "yu9G3x" }),
|
|
46
|
-
modalFooter: /*#__PURE__*/ f(
|
|
112
|
+
modalFooter: /*#__PURE__*/ f(r, {
|
|
47
113
|
className: "flex justify-end",
|
|
48
|
-
children: /*#__PURE__*/ p(
|
|
114
|
+
children: /*#__PURE__*/ p(n, { children: [/*#__PURE__*/ f(s, {
|
|
49
115
|
variant: "default",
|
|
50
116
|
onClick: M,
|
|
51
117
|
disabled: x,
|
|
52
118
|
children: /*#__PURE__*/ f(g, { id: "dEgA5A" })
|
|
53
|
-
}), /*#__PURE__*/ f(
|
|
119
|
+
}), /*#__PURE__*/ f(s, {
|
|
54
120
|
variant: "primary",
|
|
55
121
|
onClick: (e) => {
|
|
56
122
|
j(e);
|
|
57
123
|
},
|
|
58
124
|
disabled: x,
|
|
59
125
|
"data-testid": "update-security-group-button",
|
|
60
|
-
children: x ? /*#__PURE__*/ f(
|
|
126
|
+
children: x ? /*#__PURE__*/ f(e, { size: "small" }) : /*#__PURE__*/ f(g, { id: "Df0YHr" })
|
|
61
127
|
})] })
|
|
62
128
|
}),
|
|
63
129
|
children: [
|
|
64
|
-
S && /*#__PURE__*/ f(
|
|
130
|
+
S && /*#__PURE__*/ f(t, {
|
|
65
131
|
dismissible: !1,
|
|
66
132
|
variant: "error",
|
|
67
133
|
className: "mb-4",
|
|
@@ -69,18 +135,18 @@ var v = ({ securityGroup: d, open: v, onClose: y, onUpdate: b, isLoading: x = !1
|
|
|
69
135
|
}),
|
|
70
136
|
x && /*#__PURE__*/ p("div", {
|
|
71
137
|
className: "mb-4 flex items-center justify-center gap-2",
|
|
72
|
-
children: [/*#__PURE__*/ f(
|
|
138
|
+
children: [/*#__PURE__*/ f(e, { variant: "primary" }), /*#__PURE__*/ f("span", {
|
|
73
139
|
className: "text-theme-high text-sm",
|
|
74
140
|
children: /*#__PURE__*/ f(g, { id: "V804LY" })
|
|
75
141
|
})]
|
|
76
142
|
}),
|
|
77
|
-
!x && /*#__PURE__*/ f(
|
|
143
|
+
!x && /*#__PURE__*/ f(a, {
|
|
78
144
|
className: "mb-6",
|
|
79
|
-
children: /*#__PURE__*/ p(
|
|
145
|
+
children: /*#__PURE__*/ p(u, {
|
|
80
146
|
className: "mb-6",
|
|
81
|
-
children: [/*#__PURE__*/ f(
|
|
147
|
+
children: [/*#__PURE__*/ f(o, {
|
|
82
148
|
className: "mb-6",
|
|
83
|
-
children: /*#__PURE__*/ f(
|
|
149
|
+
children: /*#__PURE__*/ f(l, {
|
|
84
150
|
id: "name",
|
|
85
151
|
name: "name",
|
|
86
152
|
label: C._({ id: "6YtxFj" }),
|
|
@@ -91,9 +157,9 @@ var v = ({ securityGroup: d, open: v, onClose: y, onUpdate: b, isLoading: x = !1
|
|
|
91
157
|
placeholder: C._({ id: "Ac6dy9" }),
|
|
92
158
|
disabled: x
|
|
93
159
|
})
|
|
94
|
-
}), /*#__PURE__*/ f(
|
|
160
|
+
}), /*#__PURE__*/ f(o, {
|
|
95
161
|
className: "mb-6",
|
|
96
|
-
children: /*#__PURE__*/ f(
|
|
162
|
+
children: /*#__PURE__*/ f(c, {
|
|
97
163
|
id: "description",
|
|
98
164
|
name: "description",
|
|
99
165
|
label: C._({ id: "Nu4oKW" }),
|
|
@@ -111,7 +177,7 @@ var v = ({ securityGroup: d, open: v, onClose: y, onUpdate: b, isLoading: x = !1
|
|
|
111
177
|
};
|
|
112
178
|
//#endregion
|
|
113
179
|
//#region src/client/routes/_auth/projects/$projectId/network/securitygroups/-hooks/useSecurityGroupPermissions.ts
|
|
114
|
-
function
|
|
180
|
+
function j(e) {
|
|
115
181
|
let { data: t = {
|
|
116
182
|
canView: !1,
|
|
117
183
|
canCreate: !1,
|
|
@@ -156,6 +222,6 @@ function y(e) {
|
|
|
156
222
|
};
|
|
157
223
|
}
|
|
158
224
|
//#endregion
|
|
159
|
-
export { v as n, y as t };
|
|
225
|
+
export { k as a, v as c, T as d, w as f, E as i, C as l, b as m, A as n, O as o, x as p, D as r, y as s, j as t, S as u };
|
|
160
226
|
|
|
161
|
-
//# sourceMappingURL=useSecurityGroupPermissions-
|
|
227
|
+
//# sourceMappingURL=useSecurityGroupPermissions-BOyLQLdC.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSecurityGroupPermissions-BOyLQLdC.mjs","names":["getSecurityGroupDeletedToast","name","message","description","getSecurityGroupDeleteErrorToast","errorMessage","getSecurityGroupUpdatedToast","getSecurityGroupUpdateErrorToast","getSecurityGroupRuleCreatedToast","getSecurityGroupRuleCreateErrorToast","getSecurityGroupRuleDeletedToast","getSecurityGroupRuleDeleteErrorToast","getRBACPolicyAddedToast","targetTenant","getRBACPolicyAddErrorToast","getRBACPolicyDeletedToast","getRBACPolicyDeleteErrorToast","React","useState","useEffect","Modal","Form","FormRow","FormSection","TextInput","Button","ButtonRow","Spinner","ModalFooter","Textarea","Message","EditSecurityGroupModal","securityGroup","open","onClose","onUpdate","isLoading","error","useLingui","properties","setProperties","name","description","errors","setErrors","handleInputChange","e","value","type","target","checked","prev","newErrors","validateForm","trim","t","Object","keys","length","handleSubmit","preventDefault","updateData","undefined","id","handleClose","onCancel","size","title","modalFooter","className","variant","onClick","disabled","data-testid","dismissible","div","span","label","onChange","required","errortext","placeholder","rows","trpcReact","useSecurityGroupPermissions","projectId","data","permissions","canView","canCreate","canUpdate","canDelete","canCreateRule","canDeleteRule","canManageAccess","canViewRBAC","isLoading","isError","network","canUser","useQuery","project_id","permission","enabled","Boolean","select","canCreateRBAC","canDeleteRBAC","staleTime","Infinity","gcTime"],"sources":["../../src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/SecurityGroupToastNotifications.tsx","../../src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/-modals/EditSecurityGroupModal.tsx","../../src/client/routes/_auth/projects/$projectId/network/securitygroups/-hooks/useSecurityGroupPermissions.ts"],"sourcesContent":["import { ReactNode } from \"react\"\nimport { NotificationOptions } from \"@cloudoperators/juno-ui-components\"\nimport { Trans } from \"@lingui/react/macro\"\n\ntype ToastReturnType = { message: ReactNode } & NotificationOptions\n\n// ── Security Group operations ──────────────────────────────────────────────\n\nexport const getSecurityGroupDeletedToast = (name: string): ToastReturnType => ({\n message: <Trans>Security Group Deleted</Trans>,\n description: <Trans>Security group \"{name}\" was successfully deleted.</Trans>,\n})\n\nexport const getSecurityGroupDeleteErrorToast = (errorMessage: string): ToastReturnType => ({\n message: <Trans>Failed to Delete Security Group</Trans>,\n description: <Trans>Could not delete security group: {errorMessage}</Trans>,\n})\n\nexport const getSecurityGroupUpdatedToast = (name: string): ToastReturnType => ({\n message: <Trans>Security Group Updated</Trans>,\n description: <Trans>Security group \"{name}\" was successfully updated.</Trans>,\n})\n\nexport const getSecurityGroupUpdateErrorToast = (errorMessage: string): ToastReturnType => ({\n message: <Trans>Failed to Update Security Group</Trans>,\n description: <Trans>Could not update security group: {errorMessage}</Trans>,\n})\n\n// ── Rule operations ────────────────────────────────────────────────────────\n\nexport const getSecurityGroupRuleCreatedToast = (): ToastReturnType => ({\n message: <Trans>Rule Created</Trans>,\n description: <Trans>Security group rule was successfully created.</Trans>,\n})\n\nexport const getSecurityGroupRuleCreateErrorToast = (errorMessage: string): ToastReturnType => ({\n message: <Trans>Failed to Create Rule</Trans>,\n description: <Trans>Could not create security group rule: {errorMessage}</Trans>,\n})\n\nexport const getSecurityGroupRuleDeletedToast = (): ToastReturnType => ({\n message: <Trans>Rule Deleted</Trans>,\n description: <Trans>Security group rule was successfully deleted.</Trans>,\n})\n\nexport const getSecurityGroupRuleDeleteErrorToast = (errorMessage: string): ToastReturnType => ({\n message: <Trans>Failed to Delete Rule</Trans>,\n description: <Trans>Could not delete security group rule: {errorMessage}</Trans>,\n})\n\n// ── RBAC Policy operations ─────────────────────────────────────────────────\n\nexport const getRBACPolicyAddedToast = (targetTenant: string): ToastReturnType => ({\n message: <Trans>Security Group Shared</Trans>,\n description: <Trans>Security group was successfully shared with project \"{targetTenant}\".</Trans>,\n})\n\nexport const getRBACPolicyAddErrorToast = (errorMessage: string): ToastReturnType => ({\n message: <Trans>Failed to Share Security Group</Trans>,\n description: <Trans>Could not share security group: {errorMessage}</Trans>,\n})\n\nexport const getRBACPolicyDeletedToast = (targetTenant: string): ToastReturnType => ({\n message: <Trans>Access Revoked</Trans>,\n description: <Trans>Access for project \"{targetTenant}\" was successfully revoked.</Trans>,\n})\n\nexport const getRBACPolicyDeleteErrorToast = (errorMessage: string): ToastReturnType => ({\n message: <Trans>Failed to Revoke Access</Trans>,\n description: <Trans>Could not revoke access: {errorMessage}</Trans>,\n})\n","import React, { useState, useEffect } from \"react\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport {\n Modal,\n Form,\n FormRow,\n FormSection,\n TextInput,\n Button,\n ButtonRow,\n Spinner,\n ModalFooter,\n Textarea,\n Message,\n} from \"@cloudoperators/juno-ui-components\"\nimport type { SecurityGroup } from \"@/server/Network/types/securityGroup\"\nimport { UpdateSecurityGroupInput } from \"@/server/Network/types/securityGroup\"\n\ninterface EditSecurityGroupModalProps {\n securityGroup: SecurityGroup\n open: boolean\n onClose: () => void\n onUpdate?: (\n securityGroupId: string,\n data: Omit<UpdateSecurityGroupInput, \"securityGroupId\" | \"project_id\">\n ) => Promise<void>\n isLoading?: boolean\n error?: string | null\n}\n\ninterface SecurityGroupProperties {\n name: string\n description: string\n}\n\nexport const EditSecurityGroupModal: React.FC<EditSecurityGroupModalProps> = ({\n securityGroup,\n open,\n onClose,\n onUpdate,\n isLoading = false,\n error = null,\n}) => {\n const { t } = useLingui()\n\n const [properties, setProperties] = useState<SecurityGroupProperties>({\n name: securityGroup.name || \"\",\n description: securityGroup.description || \"\",\n })\n const [errors, setErrors] = useState<{ [key: string]: string }>({})\n\n // Update properties when securityGroup changes\n useEffect(() => {\n setProperties({\n name: securityGroup.name || \"\",\n description: securityGroup.description || \"\",\n })\n }, [securityGroup])\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const { name, value, type } = e.target\n const checked = (e.target as HTMLInputElement).checked\n\n setProperties((prev) => ({\n ...prev,\n [name]: type === \"checkbox\" ? checked : value,\n }))\n\n if (errors[name]) {\n setErrors((prev) => {\n const newErrors = { ...prev }\n delete newErrors[name]\n return newErrors\n })\n }\n }\n\n const validateForm = (): boolean => {\n const newErrors: { [key: string]: string } = {}\n\n if (!properties.name || properties.name.trim() === \"\") {\n newErrors.name = t`Security group name is required`\n }\n\n setErrors(newErrors)\n return Object.keys(newErrors).length === 0\n }\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n\n if (!validateForm()) {\n return\n }\n\n if (onUpdate) {\n // Prepare base update data without stateful\n const updateData: Omit<UpdateSecurityGroupInput, \"securityGroupId\" | \"project_id\"> = {\n name: properties.name.trim(),\n description: properties.description.trim() || undefined,\n }\n\n // Note: We deliberately do NOT include 'stateful' field here\n // because it requires special 'update_security_group:stateful' permission\n // which needs cloud admin role. Regular users can only update name/description.\n\n await onUpdate(securityGroup.id, updateData)\n }\n }\n\n const handleClose = () => {\n setErrors({})\n onClose()\n }\n\n return (\n <Modal\n open={open}\n onCancel={handleClose}\n size=\"large\"\n title={t`Edit Security Group`}\n modalFooter={\n <ModalFooter className=\"flex justify-end\">\n <ButtonRow>\n <Button variant=\"default\" onClick={handleClose} disabled={isLoading}>\n <Trans>Cancel</Trans>\n </Button>\n <Button\n variant=\"primary\"\n onClick={(e) => {\n handleSubmit(e)\n }}\n disabled={isLoading}\n data-testid=\"update-security-group-button\"\n >\n {isLoading ? <Spinner size=\"small\" /> : <Trans>Update Security Group</Trans>}\n </Button>\n </ButtonRow>\n </ModalFooter>\n }\n >\n {/* Error Message */}\n {error && (\n <Message dismissible={false} variant=\"error\" className=\"mb-4\">\n {error}\n </Message>\n )}\n\n {isLoading && (\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>Updating security group...</Trans>\n </span>\n </div>\n )}\n\n {!isLoading && (\n <Form className=\"mb-6\">\n <FormSection className=\"mb-6\">\n <FormRow className=\"mb-6\">\n <TextInput\n id=\"name\"\n name=\"name\"\n label={t`Name`}\n value={properties.name}\n onChange={handleInputChange}\n required\n errortext={errors.name}\n placeholder={t`Type name`}\n disabled={isLoading}\n />\n </FormRow>\n\n <FormRow className=\"mb-6\">\n <Textarea\n id=\"description\"\n name=\"description\"\n label={t`Description`}\n value={properties.description}\n onChange={handleInputChange}\n placeholder={t`Description`}\n disabled={isLoading}\n rows={3}\n />\n </FormRow>\n {/* Note: Stateful checkbox is not shown here because it requires 'update_security_group:stateful' permission (cloud admin only) */}\n </FormSection>\n </Form>\n )}\n </Modal>\n )\n}\n","import { trpcReact } from \"@/client/trpcClient\"\n\nexport interface SecurityGroupPermissions {\n canView: boolean\n canCreate: boolean\n canUpdate: boolean\n canDelete: boolean\n canCreateRule: boolean\n canDeleteRule: boolean\n canManageAccess: boolean\n canViewRBAC: boolean\n}\n\n/**\n * Hook to fetch security group permissions for the current user\n * Uses React Query with infinite cache since permissions don't change during session\n */\nexport function useSecurityGroupPermissions(projectId: string) {\n const {\n data: permissions = {\n canView: false,\n canCreate: false,\n canUpdate: false,\n canDelete: false,\n canCreateRule: false,\n canDeleteRule: false,\n canManageAccess: false,\n canViewRBAC: false,\n },\n isLoading,\n isError,\n } = trpcReact.network.canUser.useQuery(\n {\n project_id: projectId || \"\",\n permission: [\n \"network:security_groups:read\",\n \"network:security_groups:create\",\n \"network:security_groups:update\",\n \"network:security_groups:delete\",\n \"network:security_group_rules:create\",\n \"network:security_group_rules:delete\",\n \"network:rbac_policies:create\",\n \"network:rbac_policies:delete\",\n \"network:rbac_policies:read\",\n ],\n },\n {\n enabled: Boolean(projectId), // Only fetch if we have a project ID\n select: ([\n canView,\n canCreate,\n canUpdate,\n canDelete,\n canCreateRule,\n canDeleteRule,\n canCreateRBAC,\n canDeleteRBAC,\n canViewRBAC,\n ]) => ({\n canView,\n canCreate,\n canUpdate,\n canDelete,\n canCreateRule,\n canDeleteRule,\n canManageAccess: canCreateRBAC && canDeleteRBAC,\n canViewRBAC,\n }),\n staleTime: Infinity, // Permissions don't change during session\n gcTime: Infinity, // Keep in cache forever (previously cacheTime)\n }\n )\n\n return {\n permissions,\n isLoading,\n isError,\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { t as e } from "./DynamicBreadcrumbContext-CVcUQFou.mjs";
|
|
2
|
+
import { useContext as t, useLayoutEffect as n } from "react";
|
|
3
|
+
//#region src/client/hooks/useSetBreadcrumb.ts
|
|
4
|
+
function r(r, i, a) {
|
|
5
|
+
let { setCrumb: o } = t(e), s = a?.to;
|
|
6
|
+
n(() => (i ? o(r, {
|
|
7
|
+
text: i,
|
|
8
|
+
to: s
|
|
9
|
+
}) : o(r, null), () => o(r, null)), [
|
|
10
|
+
r,
|
|
11
|
+
i,
|
|
12
|
+
s,
|
|
13
|
+
o
|
|
14
|
+
]);
|
|
15
|
+
}
|
|
16
|
+
//#endregion
|
|
17
|
+
export { r as t };
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=useSetBreadcrumb-tn7lBaQV.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSetBreadcrumb-tn7lBaQV.mjs","names":["useContext","useLayoutEffect","DynamicBreadcrumbContext","useSetBreadcrumb","routeId","text","options","setCrumb","to"],"sources":["../../src/client/hooks/useSetBreadcrumb.ts"],"sourcesContent":["import { useContext, useLayoutEffect } from \"react\"\nimport { DynamicBreadcrumbContext } from \"@/client/context/DynamicBreadcrumbContext\"\n\n/**\n * Registers a dynamic breadcrumb for a route. Call inside a route component, passing Route.id.\n * The entry is added when text is defined and removed when text becomes undefined or the component unmounts.\n *\n * Requirements:\n * - Must be rendered inside `DynamicBreadcrumbProvider` (mounted at `_auth.tsx`)\n * - Pass `Route.id` as routeId so `useBreadcrumbs` can correlate it with the correct match\n */\nexport function useSetBreadcrumb(routeId: string, text: string | undefined, options?: { to?: string }) {\n const { setCrumb } = useContext(DynamicBreadcrumbContext)\n const to = options?.to\n\n useLayoutEffect(() => {\n if (text) {\n setCrumb(routeId, { text, to })\n } else {\n setCrumb(routeId, null)\n }\n return () => setCrumb(routeId, null)\n }, [routeId, text, to, setCrumb])\n}\n"],"mappings":";;;AAWA,SAAgBG,EAAiBC,GAAiBC,GAA0BC,GAAyB;CACnG,IAAM,EAAEC,gBAAaP,EAAWE,CAAAA,GAC1BM,IAAKF,GAASE;CAEpBP,SACMI,IACFE,EAASH,GAAS;EAAEC;EAAMG;CAAG,CAAA,IAE7BD,EAASH,GAAS,IAAA,SAEPG,EAASH,GAAS,IAAA,IAC9B;EAACA;EAASC;EAAMG;EAAID;CAAS,CAAA;AAClC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Swift timestamp helpers.
|
|
3
|
+
*
|
|
4
|
+
* Swift returns `last_modified` in container and object listings as an ISO 8601
|
|
5
|
+
* timestamp that is UTC but carries NO zone designator — e.g.
|
|
6
|
+
* "2024-03-01T08:00:00.000000" (see OpenStack Swift bug #1169287: dates in the
|
|
7
|
+
* JSON listings are UTC without a trailing "Z"). Per ISO 8601, a date-time with
|
|
8
|
+
* no zone is interpreted as LOCAL time, so `new Date("...T08:00:00")` treats the
|
|
9
|
+
* value as local and the rendered time ends up shifted by the viewer's UTC
|
|
10
|
+
* offset (#1236).
|
|
11
|
+
*
|
|
12
|
+
* These helpers treat a zone-less timestamp as UTC (by appending "Z" before
|
|
13
|
+
* parsing) so it converts correctly to the viewer's local time. Timestamps that
|
|
14
|
+
* already carry a zone — a trailing "Z" or an explicit ±hh:mm offset, as Ceph
|
|
15
|
+
* returns — are left untouched.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Parse a Swift timestamp into a Date, treating a zone-less value as UTC.
|
|
19
|
+
* Returns null for empty or unparseable input.
|
|
20
|
+
*/
|
|
21
|
+
export declare const parseSwiftDate: (value: string | null | undefined) => Date | null;
|
|
22
|
+
/**
|
|
23
|
+
* Format a Swift timestamp, defaulting to the viewer's local timezone (unless
|
|
24
|
+
* overridden via `options.timeZone`).
|
|
25
|
+
*
|
|
26
|
+
* Returns null for empty/invalid input so callers can supply their own fallback
|
|
27
|
+
* (e.g. a translated "N/A"). `locales`/`options` are passed straight through to
|
|
28
|
+
* `Date.prototype.toLocaleString`.
|
|
29
|
+
*/
|
|
30
|
+
export declare const formatSwiftDate: (value: string | null | undefined, locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions) => string | null;
|
package/dist/server/index.d.ts
CHANGED
|
@@ -132,7 +132,7 @@ declare const auroraRouter: _trpc_server.TRPCRouterBuilder<{
|
|
|
132
132
|
errorShape: _trpc_server.TRPCDefaultErrorShape;
|
|
133
133
|
transformer: false;
|
|
134
134
|
}>;
|
|
135
|
-
declare const publicProcedure: _trpc_server.TRPCProcedureBuilder<AuroraPortalContext, object,
|
|
135
|
+
declare const publicProcedure: _trpc_server.TRPCProcedureBuilder<AuroraPortalContext, object, {}, _trpc_server.TRPCUnsetMarker, _trpc_server.TRPCUnsetMarker, _trpc_server.TRPCUnsetMarker, _trpc_server.TRPCUnsetMarker, false>;
|
|
136
136
|
declare const protectedProcedure: _trpc_server.TRPCProcedureBuilder<AuroraPortalContext, object, {
|
|
137
137
|
req: fastify.FastifyRequest<fastify.RouteGenericInterface, fastify.RawServerDefault, http.IncomingMessage, fastify.FastifySchema, fastify.FastifyTypeProviderDefault, unknown, fastify.FastifyBaseLogger, fastify_types_type_provider.ResolveFastifyRequestType<fastify.FastifyTypeProviderDefault, fastify.FastifySchema, fastify.RouteGenericInterface>>;
|
|
138
138
|
res: fastify.FastifyReply<fastify.RouteGenericInterface, fastify.RawServerDefault, http.IncomingMessage, http.ServerResponse<http.IncomingMessage>, unknown, fastify.FastifySchema, fastify.FastifyTypeProviderDefault, unknown>;
|
|
@@ -745,7 +745,6 @@ declare const buildBaseRouter: (policyDir: string) => _trpc_server.TRPCBuiltRout
|
|
|
745
745
|
create: _trpc_server.TRPCMutationProcedure<{
|
|
746
746
|
input: {
|
|
747
747
|
project_id: string;
|
|
748
|
-
tenant_id: string;
|
|
749
748
|
floating_network_id: string;
|
|
750
749
|
fixed_ip_address?: string | undefined;
|
|
751
750
|
floating_ip_address?: string | undefined;
|
|
@@ -2365,6 +2364,137 @@ declare const buildBaseRouter: (policyDir: string) => _trpc_server.TRPCBuiltRout
|
|
|
2365
2364
|
meta: object;
|
|
2366
2365
|
}>;
|
|
2367
2366
|
}>>;
|
|
2367
|
+
lifecycle: _trpc_server.TRPCBuiltRouter<{
|
|
2368
|
+
ctx: AuroraPortalContext;
|
|
2369
|
+
meta: object;
|
|
2370
|
+
errorShape: _trpc_server.TRPCDefaultErrorShape;
|
|
2371
|
+
transformer: false;
|
|
2372
|
+
}, _trpc_server.TRPCDecorateCreateRouterOptions<{
|
|
2373
|
+
get: _trpc_server.TRPCQueryProcedure<{
|
|
2374
|
+
input: {
|
|
2375
|
+
project_id: string;
|
|
2376
|
+
bucketName: string;
|
|
2377
|
+
};
|
|
2378
|
+
output: {
|
|
2379
|
+
rules: {
|
|
2380
|
+
Status: string;
|
|
2381
|
+
ID?: string | undefined;
|
|
2382
|
+
Prefix?: string | undefined;
|
|
2383
|
+
Filter?: {
|
|
2384
|
+
[x: string]: unknown;
|
|
2385
|
+
Prefix?: string | undefined;
|
|
2386
|
+
Tag?: {
|
|
2387
|
+
Key: string;
|
|
2388
|
+
Value: string;
|
|
2389
|
+
} | undefined;
|
|
2390
|
+
ObjectSizeGreaterThan?: number | undefined;
|
|
2391
|
+
ObjectSizeLessThan?: number | undefined;
|
|
2392
|
+
And?: {
|
|
2393
|
+
Prefix?: string | undefined;
|
|
2394
|
+
Tags?: {
|
|
2395
|
+
Key: string;
|
|
2396
|
+
Value: string;
|
|
2397
|
+
}[] | undefined;
|
|
2398
|
+
ObjectSizeGreaterThan?: number | undefined;
|
|
2399
|
+
ObjectSizeLessThan?: number | undefined;
|
|
2400
|
+
} | undefined;
|
|
2401
|
+
} | undefined;
|
|
2402
|
+
Expiration?: {
|
|
2403
|
+
[x: string]: unknown;
|
|
2404
|
+
Days?: number | undefined;
|
|
2405
|
+
Date?: string | Date | undefined;
|
|
2406
|
+
ExpiredObjectDeleteMarker?: boolean | undefined;
|
|
2407
|
+
} | undefined;
|
|
2408
|
+
Transitions?: {
|
|
2409
|
+
[x: string]: unknown;
|
|
2410
|
+
StorageClass: string;
|
|
2411
|
+
Days?: number | undefined;
|
|
2412
|
+
Date?: string | Date | undefined;
|
|
2413
|
+
}[] | undefined;
|
|
2414
|
+
NoncurrentVersionExpiration?: {
|
|
2415
|
+
[x: string]: unknown;
|
|
2416
|
+
NoncurrentDays?: number | undefined;
|
|
2417
|
+
NewerNoncurrentVersions?: number | undefined;
|
|
2418
|
+
} | undefined;
|
|
2419
|
+
NoncurrentVersionTransitions?: {
|
|
2420
|
+
[x: string]: unknown;
|
|
2421
|
+
StorageClass: string;
|
|
2422
|
+
NoncurrentDays?: number | undefined;
|
|
2423
|
+
NewerNoncurrentVersions?: number | undefined;
|
|
2424
|
+
}[] | undefined;
|
|
2425
|
+
AbortIncompleteMultipartUpload?: {
|
|
2426
|
+
[x: string]: unknown;
|
|
2427
|
+
DaysAfterInitiation?: number | undefined;
|
|
2428
|
+
} | undefined;
|
|
2429
|
+
}[] | null;
|
|
2430
|
+
skippedRuleCount: number;
|
|
2431
|
+
};
|
|
2432
|
+
meta: object;
|
|
2433
|
+
}>;
|
|
2434
|
+
set: _trpc_server.TRPCMutationProcedure<{
|
|
2435
|
+
input: {
|
|
2436
|
+
project_id: string;
|
|
2437
|
+
bucketName: string;
|
|
2438
|
+
lifecycleConfiguration: {
|
|
2439
|
+
Rules: {
|
|
2440
|
+
Status: "Enabled" | "Disabled";
|
|
2441
|
+
ID?: string | undefined;
|
|
2442
|
+
Prefix?: string | undefined;
|
|
2443
|
+
Filter?: {
|
|
2444
|
+
Prefix?: string | undefined;
|
|
2445
|
+
Tag?: {
|
|
2446
|
+
Key: string;
|
|
2447
|
+
Value: string;
|
|
2448
|
+
} | undefined;
|
|
2449
|
+
ObjectSizeGreaterThan?: number | undefined;
|
|
2450
|
+
ObjectSizeLessThan?: number | undefined;
|
|
2451
|
+
And?: {
|
|
2452
|
+
Prefix?: string | undefined;
|
|
2453
|
+
Tags?: {
|
|
2454
|
+
Key: string;
|
|
2455
|
+
Value: string;
|
|
2456
|
+
}[] | undefined;
|
|
2457
|
+
ObjectSizeGreaterThan?: number | undefined;
|
|
2458
|
+
ObjectSizeLessThan?: number | undefined;
|
|
2459
|
+
} | undefined;
|
|
2460
|
+
} | undefined;
|
|
2461
|
+
Expiration?: {
|
|
2462
|
+
Days?: number | undefined;
|
|
2463
|
+
Date?: string | undefined;
|
|
2464
|
+
ExpiredObjectDeleteMarker?: boolean | undefined;
|
|
2465
|
+
} | undefined;
|
|
2466
|
+
Transitions?: {
|
|
2467
|
+
StorageClass: string;
|
|
2468
|
+
Days?: number | undefined;
|
|
2469
|
+
Date?: string | undefined;
|
|
2470
|
+
}[] | undefined;
|
|
2471
|
+
NoncurrentVersionExpiration?: {
|
|
2472
|
+
NoncurrentDays: number;
|
|
2473
|
+
NewerNoncurrentVersions?: number | undefined;
|
|
2474
|
+
} | undefined;
|
|
2475
|
+
NoncurrentVersionTransitions?: {
|
|
2476
|
+
NoncurrentDays: number;
|
|
2477
|
+
StorageClass: string;
|
|
2478
|
+
NewerNoncurrentVersions?: number | undefined;
|
|
2479
|
+
}[] | undefined;
|
|
2480
|
+
AbortIncompleteMultipartUpload?: {
|
|
2481
|
+
DaysAfterInitiation: number;
|
|
2482
|
+
} | undefined;
|
|
2483
|
+
}[];
|
|
2484
|
+
};
|
|
2485
|
+
};
|
|
2486
|
+
output: boolean;
|
|
2487
|
+
meta: object;
|
|
2488
|
+
}>;
|
|
2489
|
+
delete: _trpc_server.TRPCMutationProcedure<{
|
|
2490
|
+
input: {
|
|
2491
|
+
project_id: string;
|
|
2492
|
+
bucketName: string;
|
|
2493
|
+
};
|
|
2494
|
+
output: boolean;
|
|
2495
|
+
meta: object;
|
|
2496
|
+
}>;
|
|
2497
|
+
}>>;
|
|
2368
2498
|
}>>;
|
|
2369
2499
|
};
|
|
2370
2500
|
}> & _trpc_server.TRPCDecorateCreateRouterOptions<{
|
|
@@ -2501,6 +2631,7 @@ declare const buildBaseRouter: (policyDir: string) => _trpc_server.TRPCBuiltRout
|
|
|
2501
2631
|
first?: string | undefined;
|
|
2502
2632
|
next?: string | undefined;
|
|
2503
2633
|
schema?: string | undefined;
|
|
2634
|
+
totalCount?: number | undefined;
|
|
2504
2635
|
};
|
|
2505
2636
|
meta: object;
|
|
2506
2637
|
}>;
|
|
@@ -2584,6 +2715,7 @@ declare const buildBaseRouter: (policyDir: string) => _trpc_server.TRPCBuiltRout
|
|
|
2584
2715
|
first?: string | undefined;
|
|
2585
2716
|
next?: string | undefined;
|
|
2586
2717
|
schema?: string | undefined;
|
|
2718
|
+
totalCount?: number | undefined;
|
|
2587
2719
|
};
|
|
2588
2720
|
meta: object;
|
|
2589
2721
|
}>;
|
|
@@ -3375,7 +3507,7 @@ declare const buildBaseRouter: (policyDir: string) => _trpc_server.TRPCBuiltRout
|
|
|
3375
3507
|
domain: {
|
|
3376
3508
|
id?: string;
|
|
3377
3509
|
name?: string;
|
|
3378
|
-
}
|
|
3510
|
+
};
|
|
3379
3511
|
} | {
|
|
3380
3512
|
project: {
|
|
3381
3513
|
domain?: {
|
|
@@ -3384,7 +3516,7 @@ declare const buildBaseRouter: (policyDir: string) => _trpc_server.TRPCBuiltRout
|
|
|
3384
3516
|
};
|
|
3385
3517
|
id?: string;
|
|
3386
3518
|
name?: string;
|
|
3387
|
-
}
|
|
3519
|
+
};
|
|
3388
3520
|
domain: {
|
|
3389
3521
|
id?: string;
|
|
3390
3522
|
name?: string;
|