typekro 0.25.0 → 0.27.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 (85) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/alchemy/kro-delete.d.ts +8 -0
  3. package/dist/alchemy/kro-delete.d.ts.map +1 -1
  4. package/dist/alchemy/kro-delete.js +34 -35
  5. package/dist/alchemy/kro-delete.js.map +1 -1
  6. package/dist/alchemy/resource-registration.d.ts +60 -0
  7. package/dist/alchemy/resource-registration.d.ts.map +1 -1
  8. package/dist/alchemy/resource-registration.js +290 -11
  9. package/dist/alchemy/resource-registration.js.map +1 -1
  10. package/dist/alchemy/types.d.ts +44 -0
  11. package/dist/alchemy/types.d.ts.map +1 -1
  12. package/dist/core/deployment/direct-factory.d.ts +8 -1
  13. package/dist/core/deployment/direct-factory.d.ts.map +1 -1
  14. package/dist/core/deployment/direct-factory.js +80 -61
  15. package/dist/core/deployment/direct-factory.js.map +1 -1
  16. package/dist/core/deployment/engine.d.ts +2 -0
  17. package/dist/core/deployment/engine.d.ts.map +1 -1
  18. package/dist/core/deployment/engine.js +22 -1
  19. package/dist/core/deployment/engine.js.map +1 -1
  20. package/dist/core/deployment/k8s-helpers.d.ts +12 -0
  21. package/dist/core/deployment/k8s-helpers.d.ts.map +1 -1
  22. package/dist/core/deployment/k8s-helpers.js +26 -1
  23. package/dist/core/deployment/k8s-helpers.js.map +1 -1
  24. package/dist/core/deployment/kro-factory.d.ts +248 -1
  25. package/dist/core/deployment/kro-factory.d.ts.map +1 -1
  26. package/dist/core/deployment/kro-factory.js +1060 -180
  27. package/dist/core/deployment/kro-factory.js.map +1 -1
  28. package/dist/core/deployment/kro-instance-safety.d.ts +209 -0
  29. package/dist/core/deployment/kro-instance-safety.d.ts.map +1 -1
  30. package/dist/core/deployment/kro-instance-safety.js +506 -24
  31. package/dist/core/deployment/kro-instance-safety.js.map +1 -1
  32. package/dist/core/deployment/kro-namespace-teardown.d.ts +248 -0
  33. package/dist/core/deployment/kro-namespace-teardown.d.ts.map +1 -0
  34. package/dist/core/deployment/kro-namespace-teardown.js +459 -0
  35. package/dist/core/deployment/kro-namespace-teardown.js.map +1 -0
  36. package/dist/core/deployment/readiness-waiter.d.ts.map +1 -1
  37. package/dist/core/deployment/readiness-waiter.js +6 -2
  38. package/dist/core/deployment/readiness-waiter.js.map +1 -1
  39. package/dist/core/deployment/rollback-manager.d.ts +33 -1
  40. package/dist/core/deployment/rollback-manager.d.ts.map +1 -1
  41. package/dist/core/deployment/rollback-manager.js +85 -30
  42. package/dist/core/deployment/rollback-manager.js.map +1 -1
  43. package/dist/core/serialization/core.d.ts.map +1 -1
  44. package/dist/core/serialization/core.js +82 -8
  45. package/dist/core/serialization/core.js.map +1 -1
  46. package/dist/core/types/deployment.d.ts +20 -0
  47. package/dist/core/types/deployment.d.ts.map +1 -1
  48. package/dist/factories/index.d.ts +1 -0
  49. package/dist/factories/index.d.ts.map +1 -1
  50. package/dist/factories/index.js +4 -0
  51. package/dist/factories/index.js.map +1 -1
  52. package/dist/factories/nats/compositions/index.d.ts +2 -0
  53. package/dist/factories/nats/compositions/index.d.ts.map +1 -0
  54. package/dist/factories/nats/compositions/index.js +2 -0
  55. package/dist/factories/nats/compositions/index.js.map +1 -0
  56. package/dist/factories/nats/compositions/nats-bootstrap.d.ts +49 -0
  57. package/dist/factories/nats/compositions/nats-bootstrap.d.ts.map +1 -0
  58. package/dist/factories/nats/compositions/nats-bootstrap.js +135 -0
  59. package/dist/factories/nats/compositions/nats-bootstrap.js.map +1 -0
  60. package/dist/factories/nats/index.d.ts +5 -0
  61. package/dist/factories/nats/index.d.ts.map +1 -0
  62. package/dist/factories/nats/index.js +5 -0
  63. package/dist/factories/nats/index.js.map +1 -0
  64. package/dist/factories/nats/resources/helm.d.ts +28 -0
  65. package/dist/factories/nats/resources/helm.d.ts.map +1 -0
  66. package/dist/factories/nats/resources/helm.js +39 -0
  67. package/dist/factories/nats/resources/helm.js.map +1 -0
  68. package/dist/factories/nats/resources/index.d.ts +3 -0
  69. package/dist/factories/nats/resources/index.d.ts.map +1 -0
  70. package/dist/factories/nats/resources/index.js +3 -0
  71. package/dist/factories/nats/resources/index.js.map +1 -0
  72. package/dist/factories/nats/resources/jetstream.d.ts +13 -0
  73. package/dist/factories/nats/resources/jetstream.d.ts.map +1 -0
  74. package/dist/factories/nats/resources/jetstream.js +105 -0
  75. package/dist/factories/nats/resources/jetstream.js.map +1 -0
  76. package/dist/factories/nats/types.d.ts +91 -0
  77. package/dist/factories/nats/types.d.ts.map +1 -0
  78. package/dist/factories/nats/types.js +72 -0
  79. package/dist/factories/nats/types.js.map +1 -0
  80. package/dist/factories/rook/types.d.ts +1 -1
  81. package/dist/utils/string.d.ts +14 -0
  82. package/dist/utils/string.d.ts.map +1 -1
  83. package/dist/utils/string.js +22 -0
  84. package/dist/utils/string.js.map +1 -1
  85. package/package.json +5 -1
@@ -0,0 +1,459 @@
1
+ import { ensureError } from '../errors.js';
2
+ import { createBunCompatibleApiClient, createBunCompatibleKubernetesObjectApi, } from '../kubernetes/bun-api-client.js';
3
+ import { getComponentLogger } from '../logging/index.js';
4
+ import { isConflictError } from './k8s-helpers.js';
5
+ import { createRollbackManager } from './rollback-manager.js';
6
+ /**
7
+ * Annotation stamped on a hoisted workload Namespace at CREATE time, recording
8
+ * the RGD that created it — the durable ownership RECORD used by teardown. A
9
+ * Namespace is a deletion candidate ONLY if it carries this annotation set to
10
+ * THIS composition's RGD name (i.e. typekro created it for this composition);
11
+ * an adopted/pre-existing Namespace never carries it and is never deleted.
12
+ */
13
+ export const NAMESPACE_OWNER_ANNOTATION = 'typekro.io/created-by-rgd';
14
+ /**
15
+ * Annotation stamped on the instance CR at DEPLOY time recording the CONCRETE names
16
+ * of every Namespace this instance hoisted out of the RGD graph (finding #4). Value is
17
+ * a JSON array of names (e.g. `["team-a","team-a-monitoring"]`). Teardown + the pre-hoist
18
+ * guard read it back EXACTLY so a hoisted name derived from an ARBITRARY spec field (e.g.
19
+ * `spec.targetNamespace`) round-trips without re-deriving it from `metadata.namespace` /
20
+ * `spec.namespace` (which can be wrong for non-1:1 hoists).
21
+ */
22
+ export const HOISTED_NAMESPACES_ANNOTATION = 'typekro.io/hoisted-namespaces';
23
+ /**
24
+ * Parse the {@link HOISTED_NAMESPACES_ANNOTATION} value back into a list of namespace
25
+ * names. Tolerant: a missing/blank value yields `[]`; a malformed value yields `[]`
26
+ * (callers decide the fallback). Only string entries are returned.
27
+ */
28
+ export function parseHoistedNamespacesAnnotation(value) {
29
+ if (typeof value !== 'string' || value.trim().length === 0)
30
+ return [];
31
+ try {
32
+ const parsed = JSON.parse(value);
33
+ if (!Array.isArray(parsed))
34
+ return [];
35
+ return parsed.filter((n) => typeof n === 'string' && n.length > 0);
36
+ }
37
+ catch {
38
+ return [];
39
+ }
40
+ }
41
+ export function readHoistedNamespacesRecord(value) {
42
+ if (typeof value !== 'string' || value.trim().length === 0)
43
+ return { status: 'missing' };
44
+ let parsed;
45
+ try {
46
+ parsed = JSON.parse(value);
47
+ }
48
+ catch {
49
+ return { status: 'malformed' };
50
+ }
51
+ if (!Array.isArray(parsed))
52
+ return { status: 'malformed' };
53
+ // STRICT: reject the ENTIRE array (→ fail closed) unless EVERY element is a non-empty string.
54
+ // Filtering junk out (e.g. [42] or [""] → []) would masquerade as a valid empty record and let
55
+ // the guard proceed WITHOUT protecting the intended namespace. An empty [] is vacuously valid.
56
+ if (!parsed.every((n) => typeof n === 'string' && n.length > 0)) {
57
+ return { status: 'malformed' };
58
+ }
59
+ return { status: 'present', names: parsed };
60
+ }
61
+ /**
62
+ * List the NAMES of every Namespace carrying {@link NAMESPACE_OWNER_ANNOTATION} == `rgdName`
63
+ * — the DURABLE, cluster-side record of every workload Namespace typekro created for this RGD.
64
+ *
65
+ * Unlike the CR's {@link HOISTED_NAMESPACES_ANNOTATION} (which dies WITH the instance CR), this
66
+ * record survives the CR, so:
67
+ * - a teardown RETRY after the CR is already gone can still FIND + clean the owned
68
+ * namespace(s) (and gate the RGD/CRD delete on their cleanup), and
69
+ * - the pre-hoist guard can resolve an existing instance's namespaces EXACTLY without
70
+ * approximating from `metadata.namespace` / `spec.namespace`.
71
+ *
72
+ * Lists cluster-wide (small N in practice) and filters client-side by the ownership
73
+ * annotation, FOLLOWING the list continuation token so an owned namespace beyond the first
74
+ * page is never hidden by a silent cap. A list error PROPAGATES (callers fail closed /
75
+ * preserve): an unreadable list is not proof that no owned namespace exists.
76
+ */
77
+ export async function listNamespacesOwnedByRgd(kubeConfig, rgdName, options = {}) {
78
+ const k8sApi = options.k8sApi ?? createBunCompatibleKubernetesObjectApi(kubeConfig);
79
+ const owned = [];
80
+ let continueToken;
81
+ do {
82
+ const result = (await k8sApi.list('v1', 'Namespace', undefined, // namespace (cluster-scoped)
83
+ undefined, // pretty
84
+ undefined, // exact
85
+ undefined, // export
86
+ undefined, // fieldSelector
87
+ undefined, // labelSelector
88
+ 100, // limit
89
+ continueToken // continue
90
+ ));
91
+ for (const item of result.items ?? []) {
92
+ const name = item.metadata?.name;
93
+ if (typeof name === 'string' &&
94
+ name.length > 0 &&
95
+ item.metadata?.annotations?.[NAMESPACE_OWNER_ANNOTATION] === rgdName) {
96
+ owned.push(name);
97
+ }
98
+ }
99
+ const next = result.metadata?.continue;
100
+ continueToken = typeof next === 'string' && next.length > 0 ? next : undefined;
101
+ } while (continueToken);
102
+ return owned;
103
+ }
104
+ /** Default bound for the gated Namespace delete (poll to a real 404, then throw). */
105
+ const DEFAULT_NAMESPACE_DELETE_TIMEOUT_MS = 120_000;
106
+ /** The API group of a `group/version` (or `v1` core, whose group is `""`). */
107
+ function groupOfApiVersion(apiVersion) {
108
+ return apiVersion.includes('/') ? (apiVersion.split('/')[0] ?? '') : '';
109
+ }
110
+ /**
111
+ * Whether an object found in a namespace is a k8s AUTO-PROVISIONED default that does
112
+ * NOT count as "occupied" — every namespace has these regardless of what a
113
+ * user/stack put in it:
114
+ * - the `default` ServiceAccount,
115
+ * - the `kube-root-ca.crt` ConfigMap (the injected cluster CA bundle),
116
+ * - `default-token-*` Secrets (older k8s auto-mounted the SA token this way).
117
+ *
118
+ * `Event` objects are handled at DISCOVERY time ({@link isEventType}) — they are
119
+ * transient, controller-generated bookkeeping (a just-drained namespace still holds
120
+ * deletion Events for up to the event TTL), never a resource a user/stack owns, so
121
+ * they must not pin an otherwise-empty namespace open. Treating them as occupants
122
+ * would make the gate almost never fire. This is a deliberate, documented extension
123
+ * of the brief's three-item default list.
124
+ *
125
+ * Keyed by GROUP + kind + name (finding #5): the built-in defaults all live in the
126
+ * CORE group (`""`). Keying by kind/name alone would wrongly exempt an unrelated CRD
127
+ * whose kind happened to be `ServiceAccount` / `ConfigMap` / `Secret` in some OTHER
128
+ * group — a real occupant — from the emptiness gate.
129
+ */
130
+ export function isAutoProvisionedDefault(group, kind, name) {
131
+ if (group !== '')
132
+ return false; // only genuine CORE-group built-ins are defaults
133
+ if (kind === 'ServiceAccount' && name === 'default')
134
+ return true;
135
+ if (kind === 'ConfigMap' && name === 'kube-root-ca.crt')
136
+ return true;
137
+ if (kind === 'Secret' && name.startsWith('default-token-'))
138
+ return true;
139
+ return false;
140
+ }
141
+ /**
142
+ * Event types — transient, never counted as occupants. Keyed by GROUP + kind (finding
143
+ * #5): only the CORE-group (`""`) `Event` and the `events.k8s.io` `Event` are exempted,
144
+ * so an unrelated CRD named `Event` in some OTHER group is still treated as an occupant.
145
+ */
146
+ export function isEventType(group, kind) {
147
+ return kind === 'Event' && (group === '' || group === 'events.k8s.io');
148
+ }
149
+ /**
150
+ * Classify whether `namespace` is EMPTY (safe to delete) by enumerating every
151
+ * namespaced resource type via discovery and listing each in the namespace. Returns
152
+ * `empty: true` ONLY when nothing but k8s auto-provisioned defaults is present.
153
+ *
154
+ * FAIL SAFE (finding #3 + #4): on ANY uncertainty — discovery error, a per-type list
155
+ * error, or an unexpected occupant — the verdict is `empty: false` (RETAIN). Deleting
156
+ * an occupied namespace is high harm; retaining an empty one is low harm, so every
157
+ * ambiguity resolves toward RETAIN.
158
+ */
159
+ export async function classifyNamespaceEmptiness(inventory, namespace, logger = getComponentLogger('kro-namespace-teardown')) {
160
+ let types;
161
+ try {
162
+ types = await inventory.discoverNamespacedTypes();
163
+ }
164
+ catch (error) {
165
+ return {
166
+ empty: false,
167
+ reason: `API discovery of namespaced types failed (retaining to be safe): ${ensureError(error).message}`,
168
+ };
169
+ }
170
+ for (const type of types) {
171
+ const group = groupOfApiVersion(type.apiVersion);
172
+ if (isEventType(group, type.kind))
173
+ continue; // transient bookkeeping — never an occupant
174
+ let names;
175
+ try {
176
+ names = await inventory.listObjectNames(type, namespace);
177
+ }
178
+ catch (error) {
179
+ // Fail toward RETAIN: we could not prove this type is absent.
180
+ return {
181
+ empty: false,
182
+ reason: `could not list ${type.apiVersion}/${type.kind} in "${namespace}" (retaining to be safe): ${ensureError(error).message}`,
183
+ };
184
+ }
185
+ for (const name of names) {
186
+ if (!isAutoProvisionedDefault(group, type.kind, name)) {
187
+ return {
188
+ empty: false,
189
+ reason: `namespace "${namespace}" still contains ${type.apiVersion}/${type.kind} "${name}" (another stack or user owns resources here)`,
190
+ };
191
+ }
192
+ }
193
+ logger.debug('Emptiness check: type clear', {
194
+ namespace,
195
+ type: `${type.apiVersion}/${type.kind}`,
196
+ count: names.length,
197
+ });
198
+ }
199
+ return { empty: true };
200
+ }
201
+ /**
202
+ * The OWNERSHIP-gated + EMPTY-gated delete (findings #3 + #4), shared by BOTH the
203
+ * imperative `deleteInstance` path and the Alchemy teardown handler.
204
+ *
205
+ * ORDER: this runs AFTER the instance CR is gone (KRO has graph-deleted every child)
206
+ * but BEFORE the RGD/CRD teardown — the current teardown order is CR → namespace →
207
+ * RGD → CRD (the generated CRD is torn down LAST). Deleting the namespace while the
208
+ * RGD + CRD are still HEALTHY/Active is deliberate: the namespace controller confirms
209
+ * emptiness instantly and can never terminate against a *Terminating* CRD (upstream
210
+ * kro #1171). Never scans-and-deletes arbitrary namespaces: the caller passes exactly
211
+ * the namespace THIS instance declared/hoisted.
212
+ *
213
+ * TWO GATES, ownership PRIMARY: with `ownedByRgd` set (both callers pass it), the
214
+ * namespace is deleted ONLY if it carries {@link NAMESPACE_OWNER_ANNOTATION} equal to
215
+ * this RGD (typekro CREATED it) AND is empty. An ADOPTED/undeclared namespace (no
216
+ * matching stamp) is RETAINED — never deleted — as is one another stack/user still
217
+ * OCCUPIES (non-empty) or one that cannot be read (fail-safe retain).
218
+ *
219
+ * GATED (not best-effort): a pre-delete 404 is benign (already gone), but the delete
220
+ * itself polls to a real 404 and THROWS {@link DeploymentTimeoutError} on timeout — a
221
+ * stuck namespace finalizer surfaces as an error, never a silently-abandoned
222
+ * Terminating namespace. (The generated-CRD delete, a LATER step in `deleteInstance`,
223
+ * is the only best-effort deletion — see {@link KroResourceFactoryImpl.deleteInstance}.)
224
+ */
225
+ export async function deleteNamespaceIfEmpty(kubeConfig, namespace, options = {}) {
226
+ const logger = options.logger ?? getComponentLogger('kro-namespace-teardown');
227
+ const context = options.context ?? {};
228
+ const k8sApi = options.k8sApi ?? createBunCompatibleKubernetesObjectApi(kubeConfig);
229
+ // Early existence + OWNERSHIP check FIRST — one read serves both. A 404 means the
230
+ // namespace is already gone (skip discovery entirely). Any OTHER read error →
231
+ // fail-safe RETAIN. When `ownedByRgd` is set, the same read proves ownership: only a
232
+ // namespace typekro created for THIS RGD (matching annotation) is a candidate; an
233
+ // adopted/undeclared namespace is retained (finding #3/#4).
234
+ let live;
235
+ try {
236
+ live = (await k8sApi.read({
237
+ apiVersion: 'v1',
238
+ kind: 'Namespace',
239
+ metadata: { name: namespace },
240
+ }));
241
+ }
242
+ catch (error) {
243
+ const k8sErr = error;
244
+ const code = k8sErr.statusCode ?? k8sErr.code ?? k8sErr.body?.code;
245
+ if (code === 404) {
246
+ logger.debug('Namespace already gone before empty-gate; nothing to do', {
247
+ namespace,
248
+ ...context,
249
+ });
250
+ return;
251
+ }
252
+ logger.info('Retaining namespace after teardown — could not read it (ownership unproven)', {
253
+ namespace,
254
+ error: ensureError(error).message,
255
+ ...context,
256
+ });
257
+ return;
258
+ }
259
+ if (options.ownedByRgd !== undefined) {
260
+ const owner = live.metadata?.annotations?.[NAMESPACE_OWNER_ANNOTATION];
261
+ if (owner !== options.ownedByRgd) {
262
+ logger.info('Retaining namespace after teardown — not owned by this composition (adopted/undeclared)', { namespace, expectedOwner: options.ownedByRgd, actualOwner: owner ?? '(none)', ...context });
263
+ return;
264
+ }
265
+ }
266
+ const inventory = options.inventory ?? createClusterNamespaceInventory(kubeConfig);
267
+ const verdict = await classifyNamespaceEmptiness(inventory, namespace, logger);
268
+ if (!verdict.empty) {
269
+ logger.info('Retaining namespace after teardown — not empty (or emptiness unproven)', {
270
+ namespace,
271
+ reason: verdict.reason,
272
+ ...context,
273
+ });
274
+ return;
275
+ }
276
+ // GATED delete via the engine's ONE deletion primitive: delete, then poll to a real
277
+ // 404 and THROW on timeout (finding #1). Because teardown already waited for the CRD
278
+ // to 404, an empty owned namespace should drain promptly; if it does NOT, a stuck
279
+ // finalizer surfaces as an error rather than a silently-abandoned Terminating
280
+ // namespace. A pre-delete 404 is benign (handled by the primitive).
281
+ const rollback = createRollbackManager(k8sApi);
282
+ await rollback.deleteResourceAndWait({ apiVersion: 'v1', kind: 'Namespace', name: namespace }, { timeout: options.timeoutMs ?? DEFAULT_NAMESPACE_DELETE_TIMEOUT_MS });
283
+ logger.debug('Deleted the empty owned namespace after teardown', { namespace, ...context });
284
+ }
285
+ /**
286
+ * ATOMIC ownership decision via CREATE-FIRST (finding #3), shared by the imperative and
287
+ * alchemy deploy paths. The old GET→(if 404)→SSA-patch-with-owner-stamp was raceable:
288
+ * another actor creating the namespace between the GET and the patch let typekro ADOPT
289
+ * it yet stamp it owned — and later DELETE it. Instead:
290
+ *
291
+ * 1. Attempt to CREATE the namespace (POST) WITH the ownership stamp. A 201 is proof
292
+ * WE created it → we own it (ownership is atomic: owned IFF we created it).
293
+ * 2. On 409 (already exists) it is NOT ours to claim by this call. READ it and treat
294
+ * it as owned ONLY if it already carries THIS RGD's stamp (a prior create by us);
295
+ * otherwise it is ADOPTED (`owned: false`). This 409-read is race-free for the
296
+ * ownership decision because ownership was fixed at the original 201-create.
297
+ * 3. Any OTHER create error is rethrown for the caller to handle (fail loud).
298
+ *
299
+ * `manifestWithStamp` MUST already carry {@link NAMESPACE_OWNER_ANNOTATION} = `ownerRgd`
300
+ * plus the complete declared namespace config, so a 201 lands the full config atomically.
301
+ */
302
+ export async function decideNamespaceOwnershipCreateFirst(api, manifestWithStamp, ownerRgd, fieldManager = 'typekro') {
303
+ try {
304
+ await api.create(manifestWithStamp, undefined, undefined, fieldManager);
305
+ return { created: true, owned: true };
306
+ }
307
+ catch (error) {
308
+ // Use the project's CENTRALIZED 409 classifier so EVERY conflict shape the
309
+ // @kubernetes/client-node stack surfaces (statusCode / response.statusCode /
310
+ // body.code / bare code) is recognized as AlreadyExists — the old hand-rolled
311
+ // check missed `response.statusCode === 409`.
312
+ if (!isConflictError(error))
313
+ throw error; // non-conflict create failure — caller decides
314
+ }
315
+ // 409: the namespace already exists. Owned only if a prior create by THIS RGD stamped it.
316
+ const name = manifestWithStamp.metadata?.name;
317
+ const live = (await api.read({
318
+ apiVersion: 'v1',
319
+ kind: 'Namespace',
320
+ metadata: { name: typeof name === 'string' ? name : '' },
321
+ }));
322
+ const owned = live.metadata?.annotations?.[NAMESPACE_OWNER_ANNOTATION] === ownerRgd;
323
+ return { created: false, owned };
324
+ }
325
+ /**
326
+ * Metrics-only aggregated API groups. Their served resources (`pods`, `nodes`) are
327
+ * EPHEMERAL, read-only metrics samples — never persistent occupants that a stack/user
328
+ * "owns" — so an APIService backing one of these must NOT trip the coverage
329
+ * uncertainty check below (that would make the secondary emptiness gate RETAIN on
330
+ * essentially every cluster with metrics-server installed). Any OTHER aggregated
331
+ * APIService group is treated as UNCERTAINTY → RETAIN.
332
+ */
333
+ const METRICS_AGGREGATION_GROUPS = new Set([
334
+ 'metrics.k8s.io',
335
+ 'custom.metrics.k8s.io',
336
+ 'external.metrics.k8s.io',
337
+ ]);
338
+ /**
339
+ * Default {@link NamespaceInventory} backed by the live cluster. Discovery enumerates
340
+ * EVERY served API group DYNAMICALLY — the core group via `CoreV1Api.getAPIResources()`
341
+ * and every other served group via `CustomObjectsApi.getAPIResources(group, version)`
342
+ * (the generic per-group discovery endpoint, `GET /apis/{group}/{version}`) — all
343
+ * through the Bun-compatible client wrappers (no raw HTTP; identical under Bun and Node).
344
+ * This covers built-in AND custom (CRD) namespaced kinds uniformly, since a CRD's group
345
+ * appears in the served-group list. Listing uses `KubernetesObjectApi.list(apiVersion,
346
+ * kind, namespace)` and FOLLOWS the list continuation token so a namespace with more
347
+ * objects than one page never hides an occupant behind a silent cap (finding #5b).
348
+ *
349
+ * COVERAGE / UNCERTAINTY (finding #5a): the emptiness gate is a SECONDARY backstop
350
+ * (ownership is the PRIMARY teardown guard), so it must never misclassify occupied as
351
+ * empty. If the cluster serves a namespaced group this inventory CANNOT enumerate — for
352
+ * ANY reason: a native group whose discovery call fails, or an aggregated APIService
353
+ * whose external backend is unreachable — discovery THROWS an uncertainty error, which
354
+ * {@link classifyNamespaceEmptiness} turns into a fail-safe RETAIN. The ONLY groups
355
+ * deliberately skipped are the ephemeral metrics aggregation groups (their samples are
356
+ * never persistent occupants). There is no native-vs-aggregated distinction: anything we
357
+ * can't enumerate is uncertainty.
358
+ */
359
+ export function createClusterNamespaceInventory(kubeConfig) {
360
+ const objectApi = createBunCompatibleKubernetesObjectApi(kubeConfig);
361
+ return {
362
+ async discoverNamespacedTypes() {
363
+ // Deduplicate by apiVersion/kind — a kind can surface via more than one path.
364
+ const seen = new Map();
365
+ const add = (apiVersion, kind) => {
366
+ const key = `${apiVersion}/${kind}`;
367
+ if (!seen.has(key))
368
+ seen.set(key, { apiVersion, kind });
369
+ };
370
+ // Add every NAMESPACED, LISTABLE (non-subresource) kind from a discovered
371
+ // V1APIResourceList served at `groupVersion`.
372
+ const addFromList = (groupVersion, list) => {
373
+ for (const resource of list.resources ?? []) {
374
+ if (resource.namespaced !== true)
375
+ continue;
376
+ if (resource.name.includes('/'))
377
+ continue; // subresource
378
+ if (!(resource.verbs ?? []).includes('list'))
379
+ continue;
380
+ const apiVersion = resource.group && resource.version
381
+ ? `${resource.group}/${resource.version}`
382
+ : groupVersion;
383
+ add(apiVersion, resource.kind);
384
+ }
385
+ };
386
+ const k8sClient = await import('@kubernetes/client-node');
387
+ // 1. Core group (`/api/v1`) — no group name, so use the core client directly.
388
+ const coreClient = createBunCompatibleApiClient(kubeConfig, k8sClient.CoreV1Api);
389
+ addFromList('v1', await coreClient.getAPIResources());
390
+ // 2. EVERY other served API group, enumerated dynamically. `getAPIVersions` lists
391
+ // all served groups; for each we discover its preferred version's resources via
392
+ // the GENERIC per-group endpoint. A group we cannot enumerate (discovery failure,
393
+ // or an unreachable aggregated backend) is UNCERTAINTY → RETAIN (throw).
394
+ const apisApi = createBunCompatibleApiClient(kubeConfig, k8sClient.ApisApi);
395
+ const groupList = await apisApi.getAPIVersions();
396
+ // Cast to the CustomObjectsApi shape whose generic `getAPIResources({group, version})`
397
+ // hits `GET /apis/{group}/{version}` for ANY group (built-in or CRD-backed).
398
+ const customApi = createBunCompatibleApiClient(kubeConfig, k8sClient.CustomObjectsApi);
399
+ for (const group of groupList.groups ?? []) {
400
+ const groupName = group.name;
401
+ if (typeof groupName !== 'string' || groupName.length === 0)
402
+ continue;
403
+ // Metrics groups are ephemeral read-only samples — never persistent occupants —
404
+ // so they are deliberately skipped rather than treated as uncertainty.
405
+ if (METRICS_AGGREGATION_GROUPS.has(groupName))
406
+ continue;
407
+ // Enumerate EVERY SERVED version of the group, not just the preferred one
408
+ // (finding #5): resources are published per group-VERSION, so a kind served
409
+ // ONLY on a non-preferred version (a common CRD conversion pattern) would be
410
+ // MISSED if we discovered the preferred version alone — and a missed kind lets
411
+ // the gate false-"empty" over a real occupant.
412
+ const versions = (group.versions ?? [])
413
+ .map((v) => v?.version)
414
+ .filter((v) => typeof v === 'string' && v.length > 0);
415
+ if (versions.length === 0) {
416
+ // A served group with no discoverable version — cannot enumerate it → RETAIN.
417
+ throw new Error(`served API group "${groupName}" reports no discoverable version; cannot prove the namespace is empty`);
418
+ }
419
+ for (const version of versions) {
420
+ try {
421
+ addFromList(`${groupName}/${version}`, await customApi.getAPIResources({ group: groupName, version }));
422
+ }
423
+ catch (error) {
424
+ // Cannot enumerate this served namespaced group-version (native OR
425
+ // aggregated) → UNCERTAINTY → fail-safe RETAIN (finding #5).
426
+ throw new Error(`cannot enumerate served API group "${groupName}/${version}" ` +
427
+ `(${ensureError(error).message}); cannot prove the namespace is empty`);
428
+ }
429
+ }
430
+ }
431
+ return [...seen.values()];
432
+ },
433
+ async listObjectNames(type, namespace) {
434
+ // FOLLOW the continuation token so an occupant beyond the first page is never
435
+ // hidden by a silent cap (finding #5b). `list` returns the body directly in
436
+ // @kubernetes/client-node 1.x; `metadata.continue` drives the next page.
437
+ const names = [];
438
+ let continueToken;
439
+ do {
440
+ const result = (await objectApi.list(type.apiVersion, type.kind, namespace, undefined, // pretty
441
+ undefined, // exact
442
+ undefined, // export
443
+ undefined, // fieldSelector
444
+ undefined, // labelSelector
445
+ 100, // limit
446
+ continueToken // continue
447
+ ));
448
+ for (const item of result.items ?? []) {
449
+ if (typeof item.metadata?.name === 'string')
450
+ names.push(item.metadata.name);
451
+ }
452
+ const next = result.metadata?.continue;
453
+ continueToken = typeof next === 'string' && next.length > 0 ? next : undefined;
454
+ } while (continueToken);
455
+ return names;
456
+ },
457
+ };
458
+ }
459
+ //# sourceMappingURL=kro-namespace-teardown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kro-namespace-teardown.js","sourceRoot":"","sources":["../../../src/core/deployment/kro-namespace-teardown.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"readiness-waiter.d.ts","sourceRoot":"","sources":["../../../src/core/deployment/readiness-waiter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,GAAG,MAAM,yBAAyB,CAAC;AAGpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,KAAK,EAAE,gBAAgB,EAAkB,MAAM,aAAa,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,eAAe,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAChF,SAAS,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;CACzE;AAED;;GAEG;AACH,qBAAa,eAAe;IAExB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,WAAW,CAAC;IACpB,OAAO,CAAC,IAAI,CAAC;gBALL,MAAM,EAAE,GAAG,CAAC,mBAAmB,EAC/B,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,EAC3B,gBAAgB,EAAE,wBAAwB,EAC1C,MAAM,EAAE,aAAa,EACrB,WAAW,CAAC,EAAE,WAAW,YAAA,EACzB,IAAI,CAAC,EAAE,mBAAmB,YAAA;IAGpC;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAI9C;;OAEG;IACG,uBAAuB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAuEnF;;;;;OAKG;IACG,oBAAoB,CACxB,gBAAgB,EAAE,gBAAgB,EAClC,OAAO,EAAE,iBAAiB,EAC1B,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,IAAI,CAAC;IAyLhB;;OAEG;IACH,OAAO,CAAC,cAAc;IAOtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACH,OAAO,CAAC,SAAS;CAKlB"}
1
+ {"version":3,"file":"readiness-waiter.d.ts","sourceRoot":"","sources":["../../../src/core/deployment/readiness-waiter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,GAAG,MAAM,yBAAyB,CAAC;AAGpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,KAAK,EAAE,gBAAgB,EAAkB,MAAM,aAAa,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,eAAe,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAChF,SAAS,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;CACzE;AAED;;GAEG;AACH,qBAAa,eAAe;IAExB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,WAAW,CAAC;IACpB,OAAO,CAAC,IAAI,CAAC;gBALL,MAAM,EAAE,GAAG,CAAC,mBAAmB,EAC/B,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,EAC3B,gBAAgB,EAAE,wBAAwB,EAC1C,MAAM,EAAE,aAAa,EACrB,WAAW,CAAC,EAAE,WAAW,YAAA,EACzB,IAAI,CAAC,EAAE,mBAAmB,YAAA;IAGpC;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAI9C;;OAEG;IACG,uBAAuB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAuEnF;;;;;OAKG;IACG,oBAAoB,CACxB,gBAAgB,EAAE,gBAAgB,EAClC,OAAO,EAAE,iBAAiB,EAC1B,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,IAAI,CAAC;IA6LhB;;OAEG;IACH,OAAO,CAAC,cAAc;IAOtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACH,OAAO,CAAC,SAAS;CAKlB"}
@@ -99,8 +99,12 @@ export class ReadinessWaiter {
99
99
  */
100
100
  async waitForResourceReady(deployedResource, options, abortSignal) {
101
101
  const resourceKey = `${deployedResource.kind}/${deployedResource.name}/${deployedResource.namespace}`;
102
- // Check if already marked as ready
103
- if (deployedResource.status === 'ready' || this.readyResources.has(resourceKey)) {
102
+ // A deployed-resource record marked ready is immutable evidence for this
103
+ // deployment attempt. The process-wide readyResources set is diagnostic
104
+ // state only: the same Kubernetes identity may have just been updated, so
105
+ // reusing an earlier readiness result would skip observedGeneration and
106
+ // other post-update convergence checks.
107
+ if (deployedResource.status === 'ready') {
104
108
  this.logger.debug('Resource already marked as ready', { resourceKey });
105
109
  return;
106
110
  }
@@ -1 +1 @@
1
- {"version":3,"file":"readiness-waiter.js","sourceRoot":"","sources":["../../../src/core/deployment/readiness-waiter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"readiness-waiter.js","sourceRoot":"","sources":["../../../src/core/deployment/readiness-waiter.ts"],"names":[],"mappings":"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"}
@@ -39,6 +39,38 @@ export declare class ResourceRollbackManager {
39
39
  * Wait for a resource to be deleted
40
40
  */
41
41
  private waitForResourceDeletion;
42
+ /**
43
+ * The ONE gating wait shared by every deletion path: poll `read` until the
44
+ * resource returns a real 404, and THROW {@link DeploymentTimeoutError} if it
45
+ * does not within `timeout`. Unlike a best-effort wait it NEVER returns
46
+ * silently on timeout — a stuck finalizer surfaces as an error so the caller
47
+ * does not proceed to a dependent step (e.g. deleting a Namespace while its
48
+ * generated CRD is still Terminating). Transient non-404 read errors are
49
+ * retried until the deadline.
50
+ */
51
+ private waitForDeletionByHeader;
52
+ /**
53
+ * Delete a single resource by header and GATE on its real 404, throwing
54
+ * {@link DeploymentTimeoutError} if it does not disappear within `timeout`.
55
+ *
56
+ * This is the engine's ONE gating deletion primitive, reused by the KRO
57
+ * teardown sequence (CR → RGD → CRD → Namespace) and the Alchemy KRO delete
58
+ * path so there is a single, real gate everywhere — replacing the hand-rolled
59
+ * "poll then silently return on timeout" waits that let a slow teardown
60
+ * proceed to the next step while the previous resource was still Terminating.
61
+ *
62
+ * A 404 on the delete itself is treated as success (already gone). Any other
63
+ * delete error propagates. On success, the read gate runs to a real 404.
64
+ */
65
+ deleteResourceAndWait(target: {
66
+ apiVersion: string;
67
+ kind: string;
68
+ name: string;
69
+ namespace?: string;
70
+ }, options?: {
71
+ timeout?: number;
72
+ gracePeriod?: number;
73
+ }): Promise<void>;
42
74
  /**
43
75
  * Extract string value from potentially complex metadata field
44
76
  */
@@ -80,7 +112,7 @@ export declare class ResourceRollbackManager {
80
112
  * should be deleted. Filtering at this level would silently drop
81
113
  * resources that the caller explicitly targeted for deletion.
82
114
  */
83
- deleteDeployedResource(resource: DeployedResource): Promise<void>;
115
+ deleteDeployedResource(resource: DeployedResource, timeout?: number): Promise<void>;
84
116
  /**
85
117
  * Emit an event if callback is provided (for RollbackConfig)
86
118
  */
@@ -1 +1 @@
1
- {"version":3,"file":"rollback-manager.d.ts","sourceRoot":"","sources":["../../../src/core/deployment/rollback-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,GAAG,MAAM,yBAAyB,CAAC;AAWpD,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,cAAc,EACf,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,QAAQ,EAAgD,MAAM,wBAAwB,CAAC;AAGrG;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAC5D;AAED;;GAEG;AACH,qBAAa,uBAAuB;IAGtB,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,MAAM,CAA0C;gBAEpC,MAAM,EAAE,GAAG,CAAC,mBAAmB;IAEnD;;OAEG;IACG,iBAAiB,CACrB,SAAS,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,EACvC,MAAM,GAAE,cAAmB,GAC1B,OAAO,CAAC,cAAc,CAAC;IAmE1B;;OAEG;YACW,sBAAsB;IA6DpC;;OAEG;YACW,mBAAmB;IA8BjC;;OAEG;YACW,uBAAuB;IA8DrC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAM7B;;;;OAIG;IACG,wBAAwB,CAC5B,iBAAiB,EAAE,gBAAgB,EAAE,EACrC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC;QAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,eAAe,EAAE,CAAA;KAAE,CAAC;IAIxE;;;;;OAKG;IACG,yBAAyB,CAC7B,iBAAiB,EAAE,gBAAgB,EAAE,EACrC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC;QAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,eAAe,EAAE,CAAA;KAAE,CAAC;IAsBxE;;;OAGG;YACW,kBAAkB;IAwChC;;;;;;;;OAQG;IACG,sBAAsB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiEvE;;OAEG;IACH,OAAO,CAAC,SAAS;IAMjB;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAK5B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,mBAAmB,GAAG,uBAAuB,CAE9F;AAED;;;GAGG;AACH,wBAAgB,mCAAmC,CACjD,UAAU,EAAE,GAAG,CAAC,UAAU,GACzB,uBAAuB,CAKzB"}
1
+ {"version":3,"file":"rollback-manager.d.ts","sourceRoot":"","sources":["../../../src/core/deployment/rollback-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,GAAG,MAAM,yBAAyB,CAAC;AAUpD,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,cAAc,EACf,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EACV,QAAQ,EAGT,MAAM,wBAAwB,CAAC;AAIhC;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAC5D;AAED;;GAEG;AACH,qBAAa,uBAAuB;IAGtB,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,MAAM,CAA0C;gBAEpC,MAAM,EAAE,GAAG,CAAC,mBAAmB;IAEnD;;OAEG;IACG,iBAAiB,CACrB,SAAS,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,EACvC,MAAM,GAAE,cAAmB,GAC1B,OAAO,CAAC,cAAc,CAAC;IAmE1B;;OAEG;YACW,sBAAsB;IA6DpC;;OAEG;YACW,mBAAmB;IA8BjC;;OAEG;YACW,uBAAuB;IA2BrC;;;;;;;;OAQG;YACW,uBAAuB;IAsCrC;;;;;;;;;;;;OAYG;IACG,qBAAqB,CACzB,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,EAC9E,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO,GACvD,OAAO,CAAC,IAAI,CAAC;IA2BhB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAM7B;;;;OAIG;IACG,wBAAwB,CAC5B,iBAAiB,EAAE,gBAAgB,EAAE,EACrC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC;QAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,eAAe,EAAE,CAAA;KAAE,CAAC;IAIxE;;;;;OAKG;IACG,yBAAyB,CAC7B,iBAAiB,EAAE,gBAAgB,EAAE,EACrC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC;QAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,eAAe,EAAE,CAAA;KAAE,CAAC;IAoBxE;;;OAGG;YACW,kBAAkB;IAwChC;;;;;;;;OAQG;IACG,sBAAsB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2EzF;;OAEG;IACH,OAAO,CAAC,SAAS;IAMjB;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAK5B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,mBAAmB,GAAG,uBAAuB,CAE9F;AAED;;;GAGG;AACH,wBAAgB,mCAAmC,CACjD,UAAU,EAAE,GAAG,CAAC,UAAU,GACzB,uBAAuB,CAKzB"}