@camunda/ccma-shared-types 1.2.0 → 3.0.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 (59) hide show
  1. package/dist/_tests/permissions/session-permissions.spec.d.ts +1 -0
  2. package/dist/approvals/policy.d.ts +94 -5
  3. package/dist/approvals/policy.js +64 -14
  4. package/dist/approvals/policy.js.map +2 -2
  5. package/dist/approvals/use-cases.const.d.ts +41 -0
  6. package/dist/approvals/use-cases.const.js +12 -0
  7. package/dist/approvals/use-cases.const.js.map +7 -0
  8. package/dist/config/camundi-permission-rules.js +7 -1
  9. package/dist/config/camundi-permission-rules.js.map +2 -2
  10. package/dist/constants/version-gates.const.d.ts +9 -2
  11. package/dist/constants/version-gates.const.js +1 -1
  12. package/dist/constants/version-gates.const.js.map +2 -2
  13. package/dist/dtos/AlertSubscription.dto.d.ts +6 -0
  14. package/dist/dtos/AlertSubscription.dto.js.map +2 -2
  15. package/dist/dtos/ApprovalJob.dto.d.ts +258 -4
  16. package/dist/dtos/ApprovalJob.dto.js +42 -1
  17. package/dist/dtos/ApprovalJob.dto.js.map +2 -2
  18. package/dist/dtos/ClusterCreationDefaults.dto.d.ts +96 -0
  19. package/dist/dtos/ClusterCreationDefaults.dto.js +93 -0
  20. package/dist/dtos/ClusterCreationDefaults.dto.js.map +7 -0
  21. package/dist/dtos/ClusterOwnerMove.dto.d.ts +81 -0
  22. package/dist/dtos/ClusterOwnerMove.dto.js +1 -0
  23. package/dist/dtos/ClusterOwnerMove.dto.js.map +7 -0
  24. package/dist/dtos/CommonCluster.dto.d.ts +1 -0
  25. package/dist/dtos/ControlV2.dto.d.ts +25 -0
  26. package/dist/dtos/FeatureFlags.dto.d.ts +3 -3
  27. package/dist/dtos/Generations.dto.d.ts +17 -0
  28. package/dist/dtos/Generations.dto.js +7 -0
  29. package/dist/dtos/Generations.dto.js.map +2 -2
  30. package/dist/dtos/Generations.dto.spec.d.ts +1 -0
  31. package/dist/dtos/Organization.dto.d.ts +9 -0
  32. package/dist/dtos/Organization.dto.js.map +2 -2
  33. package/dist/dtos/ReleaseTrainSanity.dto.d.ts +6 -0
  34. package/dist/enums/AuditEntity.enum.d.ts +2 -0
  35. package/dist/enums/AuditEntity.enum.js +2 -0
  36. package/dist/enums/AuditEntity.enum.js.map +2 -2
  37. package/dist/enums/SystemAuditEntity.enum.d.ts +1 -0
  38. package/dist/enums/SystemAuditEntity.enum.js +1 -0
  39. package/dist/enums/SystemAuditEntity.enum.js.map +2 -2
  40. package/dist/index.d.ts +12 -7
  41. package/dist/index.js +53 -3
  42. package/dist/index.js.map +2 -2
  43. package/dist/permissions/combo.d.ts +9 -0
  44. package/dist/permissions/combo.js +57 -1
  45. package/dist/permissions/combo.js.map +2 -2
  46. package/dist/permissions/combo.optionalTelemetry.spec.d.ts +1 -0
  47. package/dist/permissions/console.permissions.d.ts +2 -0
  48. package/dist/permissions/console.permissions.js +13 -1
  49. package/dist/permissions/console.permissions.js.map +2 -2
  50. package/dist/types/ClusterBulkOperation.type.d.ts +10 -2
  51. package/dist/types/ClusterPlanTypeAvailabilityClass.type.d.ts +11 -0
  52. package/dist/types/ClusterPlanTypeAvailabilityClass.type.js +4 -0
  53. package/dist/types/ClusterPlanTypeAvailabilityClass.type.js.map +2 -2
  54. package/dist/types/Roles.d.ts +1 -1
  55. package/dist/types/Roles.js.map +2 -2
  56. package/dist/utils/versionCheck.utils.d.ts +48 -0
  57. package/dist/utils/versionCheck.utils.js +50 -4
  58. package/dist/utils/versionCheck.utils.js.map +2 -2
  59. package/package.json +1 -1
@@ -0,0 +1,81 @@
1
+ /**
2
+ * What a move of a cluster to another organization did not repair. The move
3
+ * keeps going when a warning occurs. A Camundi reads the warnings and decides.
4
+ */
5
+ export interface MoveClusterWarnings {
6
+ /**
7
+ * The plan type of the cluster, when the sales plan of the target
8
+ * organization does not configure it. The cluster keeps running and stays
9
+ * manageable. That organization cannot create another cluster of this plan
10
+ * type and cannot duplicate this one, because only a POST route mounts
11
+ * `validPlanTypeValidator`. `id` supports a search of a support case.
12
+ * `name` is what the dialog shows.
13
+ */
14
+ planTypeNotConfigured?: {
15
+ id: string;
16
+ name: string;
17
+ };
18
+ /** True when the cluster holds an external IdP configuration. */
19
+ externalIdp: boolean;
20
+ /**
21
+ * The k8s objects of the cluster that carry the organization in a label:
22
+ * Backup, BackupSchedule, ExternalMonitoring, and PrivateConnectivity
23
+ * custom resources. The move patches each one's `orgId` label before it
24
+ * writes the database row for a backup. `failed` lists each object whose
25
+ * label patch failed, with its kind and name. For a failed Backup, a watch
26
+ * reconnect can write the old organization into its database row again. A
27
+ * Camundi must patch a failed label by hand.
28
+ *
29
+ * A cluster does not always have every kind of object. A cluster with no
30
+ * monitoring, or no private connectivity, counts as nothing for that kind,
31
+ * the same way a cluster with no backup counts as nothing.
32
+ */
33
+ orgLabels: {
34
+ patched: number;
35
+ failed: {
36
+ kind: string;
37
+ name: string;
38
+ error: string;
39
+ }[];
40
+ };
41
+ alertSubscriptions: {
42
+ kept: {
43
+ report: string;
44
+ target: string;
45
+ }[];
46
+ deleted: {
47
+ target: string;
48
+ }[];
49
+ failed: {
50
+ target: string;
51
+ error: string;
52
+ }[];
53
+ /**
54
+ * True when console could not read the subscriptions of the cluster. The
55
+ * three lists are then empty, and empty is not proof that the cluster holds
56
+ * no subscription. A Camundi must look at the subscriptions by hand.
57
+ */
58
+ readFailed: boolean;
59
+ /**
60
+ * True when console read the subscriptions but could not read the members
61
+ * of the target organization, thus it could not check who still belongs to
62
+ * it. Every subscription is then kept. A person outside the target
63
+ * organization can still get alerts for this cluster. A Camundi must check
64
+ * the membership by hand.
65
+ */
66
+ membershipCheckFailed: boolean;
67
+ };
68
+ }
69
+ export interface MoveClusterOwnerResult {
70
+ clusterId: string;
71
+ fromOrgId: string;
72
+ toOrgId: string;
73
+ warnings: MoveClusterWarnings;
74
+ /**
75
+ * True when the cluster already belonged to `toOrgId` before this request.
76
+ * The request repaired the k8s org labels and the `Backup.orgId` rows, and
77
+ * it moved nothing else. It ran no guard, no owner write, no audit entry,
78
+ * and no alert-subscription prune.
79
+ */
80
+ ownerUnchanged: boolean;
81
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=ClusterOwnerMove.dto.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -162,6 +162,7 @@ export interface CommonClusterDto {
162
162
  optimizeEnabled?: boolean;
163
163
  optimizeFiltering?: OptimizeFilteringConfig;
164
164
  secretsFilterMode?: SecretsFilterMode;
165
+ nonSpotNodesEnabled?: boolean;
165
166
  };
166
167
  rba?: boolean;
167
168
  identityBackendChecksEnabled?: boolean;
@@ -143,6 +143,12 @@ export interface ClusterListItemV2Dto {
143
143
  channel?: string;
144
144
  /** ISO-8601; part of the cursor key. */
145
145
  created: string;
146
+ /**
147
+ * ISO-8601 instant of the last suspend. Absent when the cluster is awake:
148
+ * `Cluster.wakeUp()` clears the column, thus this is the time since the last
149
+ * suspend and not the total time that the cluster was asleep.
150
+ */
151
+ suspendedAt?: string;
146
152
  }
147
153
  /** Detail extends the list shape; richer fields are added in Phase 3. */
148
154
  export type ClusterDetailV2Dto = ClusterListItemV2Dto;
@@ -280,6 +286,25 @@ export interface ListClustersV2Params extends CursorParams {
280
286
  * age axis. Exclusive: a cluster created at this instant does not match.
281
287
  */
282
288
  createdBefore?: string;
289
+ /**
290
+ * ISO-8601 upper bound on `suspendedAt`, thus "asleep since at least N
291
+ * days". Exclusive, as `createdBefore` is. A cluster that is awake never
292
+ * matches: `Cluster.wakeUp()` clears the column.
293
+ *
294
+ * The bound is the time since the last suspend. A cluster that woke up for
295
+ * one minute and then slept again starts from zero, thus this filter finds
296
+ * the clusters that nobody touched, not the clusters that did no work.
297
+ */
298
+ suspendedBefore?: string;
299
+ /**
300
+ * ISO-8601 lower bound on `suspendedAt`, thus "asleep for not more than N
301
+ * days". Inclusive, as `createdAfter` is. It makes the suspension-age
302
+ * range together with `suspendedBefore`.
303
+ *
304
+ * A cluster that is awake never matches, for the same reason as
305
+ * `suspendedBefore`.
306
+ */
307
+ suspendedAfter?: string;
283
308
  /**
284
309
  * Restrict to these activity buckets. The controller resolves the buckets
285
310
  * to a cluster id set from the cached HDP activity map, the same way
@@ -9,7 +9,7 @@
9
9
  * from there. `@camunda-cloud/featureflags` re-exports `Features` from here.
10
10
  * Thus the type has one definition, and every existing import path still works.
11
11
  *
12
- * A c4 host reads one flag with `useC4FeatureFlag('console.optionalTelemetry')`
12
+ * A c4 host reads one flag with `useC4FeatureFlag('console.appIntegrations')`
13
13
  * — a dot path into this object.
14
14
  */
15
15
  export interface Features {
@@ -25,7 +25,7 @@ export interface Features {
25
25
  byoidp: boolean;
26
26
  optimizeUnsetOnDisable: boolean;
27
27
  appIntegrations: boolean;
28
- optionalTelemetry: boolean;
28
+ orgClusterDefaults: boolean;
29
29
  releaseTrainSanityFix: boolean;
30
30
  hubHelpCenterLinks: boolean;
31
31
  legacyModelerApiNaming: boolean;
@@ -36,7 +36,7 @@ export interface Features {
36
36
  };
37
37
  control: {
38
38
  frontendTelemetry: boolean;
39
- sendToExpiredTrialApproval: boolean;
39
+ approvals: boolean;
40
40
  };
41
41
  accounts: {
42
42
  moveClusterOrg: boolean;
@@ -10,8 +10,25 @@ export interface GenerationDto {
10
10
  updatedBy: string;
11
11
  updated: Date;
12
12
  isUnsupportedStarting?: Date;
13
+ /**
14
+ * Archived generations stay in the database for the cluster audit history,
15
+ * but nothing offers them: pickers, filter facets, cluster creation and the
16
+ * upgrade readers all leave them out. Do not treat an archived generation
17
+ * as a normal upgrade option. The stored upgrade edges are unchanged, so an
18
+ * explicit upgrade by uuid over an existing edge still runs.
19
+ */
20
+ isArchived?: boolean;
13
21
  isBespoke?: boolean;
14
22
  }
23
+ /**
24
+ * Drop archived generations from a picker list. Uuids in `keep` stay in the
25
+ * result even when archived, so a selection made before archiving does not
26
+ * vanish from the control that shows it.
27
+ */
28
+ export declare function activeGenerations<T extends {
29
+ uuid: string;
30
+ isArchived?: boolean;
31
+ }>(generations: T[], keep?: Iterable<string>): T[];
15
32
  export interface GenerationWithClusterCountDto extends GenerationDto {
16
33
  clusterCount: number;
17
34
  }
@@ -1,5 +1,11 @@
1
1
  import semver from "semver";
2
2
  import { stripSecfixPostfix } from "../utils/versionCheck.utils.js";
3
+ function activeGenerations(generations, keep = []) {
4
+ const keepSet = new Set(keep);
5
+ return generations.filter(
6
+ (generation) => generation.isArchived !== true || keepSet.has(generation.uuid)
7
+ );
8
+ }
3
9
  const secfixRank = (version) => version === stripSecfixPostfix(version) ? 0 : 1;
4
10
  function sortGenerationBySemverOfZeebe(generationA, generationB) {
5
11
  const versionAvalid = generationA.versions?.zeebe !== void 0 && semver.valid(generationA.versions.zeebe.split(":")[1]) !== null;
@@ -57,6 +63,7 @@ const compareGenerationNamesNewestFirst = (nameA, nameB) => {
57
63
  return suffixB.localeCompare(suffixA, void 0, collation);
58
64
  };
59
65
  export {
66
+ activeGenerations,
60
67
  compareGenerationNamesNewestFirst,
61
68
  sortGenerationBySemverOfZeebe
62
69
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/dtos/Generations.dto.ts"],
4
- "sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\nimport semver from 'semver'\nimport type { ZeebeClusterVersionsDto } from '../types/C8ClusterComponentVersions.type.js'\nimport { stripSecfixPostfix } from '../utils/versionCheck.utils.js'\n\nexport interface GenerationDto {\n name: string\n uuid: string\n versions: ZeebeClusterVersionsDto\n upgradeableFrom: GenerationDto[]\n createdBy: string\n createdByName?: string\n created: Date\n updatedBy: string\n updated: Date\n isUnsupportedStarting?: Date\n isBespoke?: boolean\n}\n\nexport interface GenerationWithClusterCountDto extends GenerationDto {\n clusterCount: number\n}\n\nexport interface UpgradableGenerationsDto {\n preferred: GenerationDto | null\n options: GenerationDto[]\n}\n\nconst secfixRank = (version: string): number =>\n version === stripSecfixPostfix(version) ? 0 : 1\n\nexport function sortGenerationBySemverOfZeebe(\n generationA: { name: string; versions?: { zeebe: string } },\n generationB: { name: string; versions?: { zeebe: string } },\n) {\n // magic sorting algorithm\n // uses the generation version of zeebe for comparison\n // if version invalid: use localeCompare\n\n const versionAvalid: boolean =\n generationA.versions?.zeebe !== undefined &&\n semver.valid(generationA.versions.zeebe.split(':')[1]) !== null\n const versionBvalid: boolean =\n generationB.versions?.zeebe !== undefined &&\n semver.valid(generationB.versions.zeebe.split(':')[1]) !== null\n\n if (versionAvalid && versionBvalid) {\n const zeebeA = generationA.versions!.zeebe.split(':')[1]\n const zeebeB = generationB.versions!.zeebe.split(':')[1]\n const byVersion = semver.compare(\n stripSecfixPostfix(zeebeB),\n stripSecfixPostfix(zeebeA),\n )\n if (byVersion !== 0) {\n return byVersion\n }\n // Both builds carry the same Camunda version here, so only the postfix\n // separates them. A secfix build holds that version plus a security patch,\n // thus it is the newer of the two and takes the higher rank.\n const bySecfix = secfixRank(zeebeB) - secfixRank(zeebeA)\n if (bySecfix !== 0) {\n return bySecfix\n }\n // Same image on both (8.9+gen5 and 8.9+gen6 both run 8.9.5). The name is\n // the only order left, so a picker does not show them in input order.\n return compareGenerationNamesNewestFirst(generationA.name, generationB.name)\n } else if (versionAvalid) {\n return -1\n } else if (versionBvalid) {\n return 1\n } else {\n return compareGenerationNamesNewestFirst(generationA.name, generationB.name)\n }\n}\n\n/** The text before the first digit: \"Camunda \" for \"Camunda 8.9+gen20\". */\nconst productPrefix = (name: string): string => {\n const firstDigit = name.search(/\\d/)\n return firstDigit === -1 ? name : name.slice(0, firstDigit)\n}\n\n/**\n * Splits a name at the first dash after the version: \"Camunda 8.10.0-alpha1\"\n * gives [\"Camunda 8.10.0\", \"alpha1\"]. A name without a dash gives an empty\n * suffix.\n */\nconst splitPrerelease = (name: string): [base: string, suffix: string] => {\n const dash = name.indexOf('-', name.search(/\\d/))\n return dash === -1 ? [name, ''] : [name.slice(0, dash), name.slice(dash + 1)]\n}\n\n/**\n * Orders generation names by product, then newest first within a product, by\n * numeric collation: `8.10` comes before `8.9`, and `gen10` before `gen9`.\n * Products stay in alphabetic order, so the Camunda generations come before\n * the older Zeebe ones. A release comes before its prereleases, so\n * `8.10.0` is above `8.10.0-alpha1`. For a list that has no zeebe image to\n * compare, such as a filter facet. When the image is known, use\n * `sortGenerationBySemverOfZeebe`.\n */\nexport const compareGenerationNamesNewestFirst = (\n nameA: string,\n nameB: string,\n): number => {\n const collation = { numeric: true, sensitivity: 'base' } as const\n const byProduct = productPrefix(nameA).localeCompare(\n productPrefix(nameB),\n undefined,\n collation,\n )\n if (byProduct !== 0) {\n return byProduct\n }\n const [baseA, suffixA] = splitPrerelease(nameA)\n const [baseB, suffixB] = splitPrerelease(nameB)\n const byBase = baseB.localeCompare(baseA, undefined, collation)\n if (byBase !== 0) {\n return byBase\n }\n if (suffixA === '' || suffixB === '') {\n return suffixA === suffixB ? 0 : suffixA === '' ? -1 : 1\n }\n return suffixB.localeCompare(suffixA, undefined, collation)\n}\n"],
5
- "mappings": "AAMA,OAAO,YAAY;AAEnB,SAAS,0BAA0B;AAyBnC,MAAM,aAAa,CAAC,YAClB,YAAY,mBAAmB,OAAO,IAAI,IAAI;AAEzC,SAAS,8BACd,aACA,aACA;AAKA,QAAM,gBACJ,YAAY,UAAU,UAAU,UAChC,OAAO,MAAM,YAAY,SAAS,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,MAAM;AAC7D,QAAM,gBACJ,YAAY,UAAU,UAAU,UAChC,OAAO,MAAM,YAAY,SAAS,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,MAAM;AAE7D,MAAI,iBAAiB,eAAe;AAClC,UAAM,SAAS,YAAY,SAAU,MAAM,MAAM,GAAG,EAAE,CAAC;AACvD,UAAM,SAAS,YAAY,SAAU,MAAM,MAAM,GAAG,EAAE,CAAC;AACvD,UAAM,YAAY,OAAO;AAAA,MACvB,mBAAmB,MAAM;AAAA,MACzB,mBAAmB,MAAM;AAAA,IAC3B;AACA,QAAI,cAAc,GAAG;AACnB,aAAO;AAAA,IACT;AAIA,UAAM,WAAW,WAAW,MAAM,IAAI,WAAW,MAAM;AACvD,QAAI,aAAa,GAAG;AAClB,aAAO;AAAA,IACT;AAGA,WAAO,kCAAkC,YAAY,MAAM,YAAY,IAAI;AAAA,EAC7E,WAAW,eAAe;AACxB,WAAO;AAAA,EACT,WAAW,eAAe;AACxB,WAAO;AAAA,EACT,OAAO;AACL,WAAO,kCAAkC,YAAY,MAAM,YAAY,IAAI;AAAA,EAC7E;AACF;AAGA,MAAM,gBAAgB,CAAC,SAAyB;AAC9C,QAAM,aAAa,KAAK,OAAO,IAAI;AACnC,SAAO,eAAe,KAAK,OAAO,KAAK,MAAM,GAAG,UAAU;AAC5D;AAOA,MAAM,kBAAkB,CAAC,SAAiD;AACxE,QAAM,OAAO,KAAK,QAAQ,KAAK,KAAK,OAAO,IAAI,CAAC;AAChD,SAAO,SAAS,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,MAAM,GAAG,IAAI,GAAG,KAAK,MAAM,OAAO,CAAC,CAAC;AAC9E;AAWO,MAAM,oCAAoC,CAC/C,OACA,UACW;AACX,QAAM,YAAY,EAAE,SAAS,MAAM,aAAa,OAAO;AACvD,QAAM,YAAY,cAAc,KAAK,EAAE;AAAA,IACrC,cAAc,KAAK;AAAA,IACnB;AAAA,IACA;AAAA,EACF;AACA,MAAI,cAAc,GAAG;AACnB,WAAO;AAAA,EACT;AACA,QAAM,CAAC,OAAO,OAAO,IAAI,gBAAgB,KAAK;AAC9C,QAAM,CAAC,OAAO,OAAO,IAAI,gBAAgB,KAAK;AAC9C,QAAM,SAAS,MAAM,cAAc,OAAO,QAAW,SAAS;AAC9D,MAAI,WAAW,GAAG;AAChB,WAAO;AAAA,EACT;AACA,MAAI,YAAY,MAAM,YAAY,IAAI;AACpC,WAAO,YAAY,UAAU,IAAI,YAAY,KAAK,KAAK;AAAA,EACzD;AACA,SAAO,QAAQ,cAAc,SAAS,QAAW,SAAS;AAC5D;",
4
+ "sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\nimport semver from 'semver'\nimport type { ZeebeClusterVersionsDto } from '../types/C8ClusterComponentVersions.type.js'\nimport { stripSecfixPostfix } from '../utils/versionCheck.utils.js'\n\nexport interface GenerationDto {\n name: string\n uuid: string\n versions: ZeebeClusterVersionsDto\n upgradeableFrom: GenerationDto[]\n createdBy: string\n createdByName?: string\n created: Date\n updatedBy: string\n updated: Date\n isUnsupportedStarting?: Date\n /**\n * Archived generations stay in the database for the cluster audit history,\n * but nothing offers them: pickers, filter facets, cluster creation and the\n * upgrade readers all leave them out. Do not treat an archived generation\n * as a normal upgrade option. The stored upgrade edges are unchanged, so an\n * explicit upgrade by uuid over an existing edge still runs.\n */\n isArchived?: boolean\n isBespoke?: boolean\n}\n\n/**\n * Drop archived generations from a picker list. Uuids in `keep` stay in the\n * result even when archived, so a selection made before archiving does not\n * vanish from the control that shows it.\n */\nexport function activeGenerations<\n T extends { uuid: string; isArchived?: boolean },\n>(generations: T[], keep: Iterable<string> = []): T[] {\n const keepSet = new Set(keep)\n return generations.filter(\n (generation) =>\n generation.isArchived !== true || keepSet.has(generation.uuid),\n )\n}\n\nexport interface GenerationWithClusterCountDto extends GenerationDto {\n clusterCount: number\n}\n\nexport interface UpgradableGenerationsDto {\n preferred: GenerationDto | null\n options: GenerationDto[]\n}\n\nconst secfixRank = (version: string): number =>\n version === stripSecfixPostfix(version) ? 0 : 1\n\nexport function sortGenerationBySemverOfZeebe(\n generationA: { name: string; versions?: { zeebe: string } },\n generationB: { name: string; versions?: { zeebe: string } },\n) {\n // magic sorting algorithm\n // uses the generation version of zeebe for comparison\n // if version invalid: use localeCompare\n\n const versionAvalid: boolean =\n generationA.versions?.zeebe !== undefined &&\n semver.valid(generationA.versions.zeebe.split(':')[1]) !== null\n const versionBvalid: boolean =\n generationB.versions?.zeebe !== undefined &&\n semver.valid(generationB.versions.zeebe.split(':')[1]) !== null\n\n if (versionAvalid && versionBvalid) {\n const zeebeA = generationA.versions!.zeebe.split(':')[1]\n const zeebeB = generationB.versions!.zeebe.split(':')[1]\n const byVersion = semver.compare(\n stripSecfixPostfix(zeebeB),\n stripSecfixPostfix(zeebeA),\n )\n if (byVersion !== 0) {\n return byVersion\n }\n // Both builds carry the same Camunda version here, so only the postfix\n // separates them. A secfix build holds that version plus a security patch,\n // thus it is the newer of the two and takes the higher rank.\n const bySecfix = secfixRank(zeebeB) - secfixRank(zeebeA)\n if (bySecfix !== 0) {\n return bySecfix\n }\n // Same image on both (8.9+gen5 and 8.9+gen6 both run 8.9.5). The name is\n // the only order left, so a picker does not show them in input order.\n return compareGenerationNamesNewestFirst(generationA.name, generationB.name)\n } else if (versionAvalid) {\n return -1\n } else if (versionBvalid) {\n return 1\n } else {\n return compareGenerationNamesNewestFirst(generationA.name, generationB.name)\n }\n}\n\n/** The text before the first digit: \"Camunda \" for \"Camunda 8.9+gen20\". */\nconst productPrefix = (name: string): string => {\n const firstDigit = name.search(/\\d/)\n return firstDigit === -1 ? name : name.slice(0, firstDigit)\n}\n\n/**\n * Splits a name at the first dash after the version: \"Camunda 8.10.0-alpha1\"\n * gives [\"Camunda 8.10.0\", \"alpha1\"]. A name without a dash gives an empty\n * suffix.\n */\nconst splitPrerelease = (name: string): [base: string, suffix: string] => {\n const dash = name.indexOf('-', name.search(/\\d/))\n return dash === -1 ? [name, ''] : [name.slice(0, dash), name.slice(dash + 1)]\n}\n\n/**\n * Orders generation names by product, then newest first within a product, by\n * numeric collation: `8.10` comes before `8.9`, and `gen10` before `gen9`.\n * Products stay in alphabetic order, so the Camunda generations come before\n * the older Zeebe ones. A release comes before its prereleases, so\n * `8.10.0` is above `8.10.0-alpha1`. For a list that has no zeebe image to\n * compare, such as a filter facet. When the image is known, use\n * `sortGenerationBySemverOfZeebe`.\n */\nexport const compareGenerationNamesNewestFirst = (\n nameA: string,\n nameB: string,\n): number => {\n const collation = { numeric: true, sensitivity: 'base' } as const\n const byProduct = productPrefix(nameA).localeCompare(\n productPrefix(nameB),\n undefined,\n collation,\n )\n if (byProduct !== 0) {\n return byProduct\n }\n const [baseA, suffixA] = splitPrerelease(nameA)\n const [baseB, suffixB] = splitPrerelease(nameB)\n const byBase = baseB.localeCompare(baseA, undefined, collation)\n if (byBase !== 0) {\n return byBase\n }\n if (suffixA === '' || suffixB === '') {\n return suffixA === suffixB ? 0 : suffixA === '' ? -1 : 1\n }\n return suffixB.localeCompare(suffixA, undefined, collation)\n}\n"],
5
+ "mappings": "AAMA,OAAO,YAAY;AAEnB,SAAS,0BAA0B;AA6B5B,SAAS,kBAEd,aAAkB,OAAyB,CAAC,GAAQ;AACpD,QAAM,UAAU,IAAI,IAAI,IAAI;AAC5B,SAAO,YAAY;AAAA,IACjB,CAAC,eACC,WAAW,eAAe,QAAQ,QAAQ,IAAI,WAAW,IAAI;AAAA,EACjE;AACF;AAWA,MAAM,aAAa,CAAC,YAClB,YAAY,mBAAmB,OAAO,IAAI,IAAI;AAEzC,SAAS,8BACd,aACA,aACA;AAKA,QAAM,gBACJ,YAAY,UAAU,UAAU,UAChC,OAAO,MAAM,YAAY,SAAS,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,MAAM;AAC7D,QAAM,gBACJ,YAAY,UAAU,UAAU,UAChC,OAAO,MAAM,YAAY,SAAS,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,MAAM;AAE7D,MAAI,iBAAiB,eAAe;AAClC,UAAM,SAAS,YAAY,SAAU,MAAM,MAAM,GAAG,EAAE,CAAC;AACvD,UAAM,SAAS,YAAY,SAAU,MAAM,MAAM,GAAG,EAAE,CAAC;AACvD,UAAM,YAAY,OAAO;AAAA,MACvB,mBAAmB,MAAM;AAAA,MACzB,mBAAmB,MAAM;AAAA,IAC3B;AACA,QAAI,cAAc,GAAG;AACnB,aAAO;AAAA,IACT;AAIA,UAAM,WAAW,WAAW,MAAM,IAAI,WAAW,MAAM;AACvD,QAAI,aAAa,GAAG;AAClB,aAAO;AAAA,IACT;AAGA,WAAO,kCAAkC,YAAY,MAAM,YAAY,IAAI;AAAA,EAC7E,WAAW,eAAe;AACxB,WAAO;AAAA,EACT,WAAW,eAAe;AACxB,WAAO;AAAA,EACT,OAAO;AACL,WAAO,kCAAkC,YAAY,MAAM,YAAY,IAAI;AAAA,EAC7E;AACF;AAGA,MAAM,gBAAgB,CAAC,SAAyB;AAC9C,QAAM,aAAa,KAAK,OAAO,IAAI;AACnC,SAAO,eAAe,KAAK,OAAO,KAAK,MAAM,GAAG,UAAU;AAC5D;AAOA,MAAM,kBAAkB,CAAC,SAAiD;AACxE,QAAM,OAAO,KAAK,QAAQ,KAAK,KAAK,OAAO,IAAI,CAAC;AAChD,SAAO,SAAS,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,MAAM,GAAG,IAAI,GAAG,KAAK,MAAM,OAAO,CAAC,CAAC;AAC9E;AAWO,MAAM,oCAAoC,CAC/C,OACA,UACW;AACX,QAAM,YAAY,EAAE,SAAS,MAAM,aAAa,OAAO;AACvD,QAAM,YAAY,cAAc,KAAK,EAAE;AAAA,IACrC,cAAc,KAAK;AAAA,IACnB;AAAA,IACA;AAAA,EACF;AACA,MAAI,cAAc,GAAG;AACnB,WAAO;AAAA,EACT;AACA,QAAM,CAAC,OAAO,OAAO,IAAI,gBAAgB,KAAK;AAC9C,QAAM,CAAC,OAAO,OAAO,IAAI,gBAAgB,KAAK;AAC9C,QAAM,SAAS,MAAM,cAAc,OAAO,QAAW,SAAS;AAC9D,MAAI,WAAW,GAAG;AAChB,WAAO;AAAA,EACT;AACA,MAAI,YAAY,MAAM,YAAY,IAAI;AACpC,WAAO,YAAY,UAAU,IAAI,YAAY,KAAK,KAAK;AAAA,EACzD;AACA,SAAO,QAAQ,cAAc,SAAS,QAAW,SAAS;AAC5D;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1 @@
1
+ export {};
@@ -1,5 +1,6 @@
1
1
  import type { OrganizationPermissions } from '../types/OrganizationPermission.type.js';
2
2
  import type { SalesPlanType } from '../types/SalesPlanType.type.js';
3
+ import type { ClusterCreationDefaults } from './ClusterCreationDefaults.dto.js';
3
4
  import type { OrganizationToSalesPlanDto } from './OrganizationToSalesPlan.dto.js';
4
5
  export type LicensingModelType = 'legacy' | '2025';
5
6
  export declare const VALID_LICENSING_MODELS: readonly LicensingModelType[];
@@ -14,6 +15,14 @@ export declare const LICENSING_MODEL_DISPLAY_NAMES: Record<LicensingModelType, s
14
15
  export type LlmProviderName = 'litellm' | 'openrouter';
15
16
  export interface OrganizationMetadata {
16
17
  clickedRequestPaidPlan?: boolean;
18
+ /**
19
+ * Default values for the settings of a new cluster of this organization
20
+ * (#9732). They seed a cluster at creation and are never applied again.
21
+ *
22
+ * A field that is absent takes the value that the console backend writes.
23
+ * The whole key is absent for almost every organization.
24
+ */
25
+ clusterDefaults?: ClusterCreationDefaults;
17
26
  salesForceId?: string;
18
27
  enterpriseDevOnly?: boolean;
19
28
  awsOnly?: boolean;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/dtos/Organization.dto.ts"],
4
- "sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\nimport type { OrganizationPermissions } from '../types/OrganizationPermission.type.js'\nimport type { SalesPlanType } from '../types/SalesPlanType.type.js'\nimport type { OrganizationToSalesPlanDto } from './OrganizationToSalesPlan.dto.js'\n\nexport type LicensingModelType = 'legacy' | '2025'\n\nexport const VALID_LICENSING_MODELS: readonly LicensingModelType[] = [\n 'legacy',\n '2025',\n] as const\n\nexport const LICENSING_MODEL_DISPLAY_NAMES: Record<LicensingModelType, string> =\n {\n legacy: 'Legacy (PI, DI, TU)',\n '2025': '2025 (PI+Tenant)',\n } as const\n\n/**\n * Upstream that holds a managed LLM key.\n *\n * `@camunda-cloud/featureflags` owns the `LlmProvider` type and its rollout\n * rules. This package must not depend on that one, so the union is repeated\n * here. Keep the two in step.\n */\nexport type LlmProviderName = 'litellm' | 'openrouter'\n\nexport interface OrganizationMetadata {\n clickedRequestPaidPlan?: boolean\n salesForceId?: string\n enterpriseDevOnly?: boolean\n awsOnly?: boolean\n licensingModel?: LicensingModelType\n autoJoin?: AutoJoinAssignment\n llm?: {\n tenantKey: string\n /**\n * Team that holds the key on LiteLLM.\n *\n * Optional, and every call site already treats it as such. Old LiteLLM\n * orgs got a key without a team. OpenRouter has no teams at all.\n */\n teamId?: string\n created: number\n /** Epoch ms of the last key rotation \u2014 set when the tenant key is regenerated. */\n updated?: number\n /**\n * Upstream that holds this key. Absent means `litellm`, because every key\n * from before the OpenRouter rollout is on LiteLLM.\n *\n * This value, and not the OpenRouter feature flag, decides where the\n * read, block, top-up and delete paths look for the key. A flag change\n * must never move a live key to a provider that does not hold it.\n */\n provider?: LlmProviderName\n /**\n * Handle for the key on OpenRouter, which addresses a key by hash and not\n * by its value. Absent for a LiteLLM key.\n *\n * Without it, an OpenRouter key can be found again only by a list request\n * that matches on the name of the key.\n */\n keyHash?: string\n /**\n * The key that a provider migration replaced, kept until the delete of\n * that key is confirmed.\n *\n * The migration to OpenRouter writes the new key over `tenantKey` before\n * it deletes the old one. Without this record the old key stays alive on\n * the old upstream and nothing points at it. The migration removes this\n * field when the old upstream confirms the delete, and it uses the field\n * to find the orgs that a re-run must finish.\n *\n * Absent for every org that never moved upstream.\n */\n migratedFrom?: {\n /** Upstream that holds the replaced key. */\n provider: LlmProviderName\n /** The replaced key itself. It is a credential. Never log it. */\n tenantKey: string\n /** Team that held the replaced key on LiteLLM. */\n teamId?: string\n }\n }\n}\n\nexport interface AutoJoinAssignment {\n departments: Array<{ hibobId: string; roles: string[] }>\n divisions: Array<{ hibobId: string; roles: string[] }>\n subdivisions: Array<{ hibobId: string; roles: string[] }>\n}\nexport interface OrganizationDto {\n uuid: string\n name: string\n organizationToSalesPlan?: OrganizationToSalesPlanDto\n permissions?: OrganizationPermissions\n metadata?: OrganizationMetadata\n created: Date\n internal: boolean\n}\n\nexport interface OrgOwner {\n owner: string\n email: string\n first: string\n last: string\n}\n\nexport interface OrgWithNameAndSalesPlan {\n uuid: string\n name: string | undefined\n salesPlanName: string | undefined\n salesPlanUuid: string | undefined\n salesPlanType: SalesPlanType | undefined\n}\n"],
5
- "mappings": "AAYO,MAAM,yBAAwD;AAAA,EACnE;AAAA,EACA;AACF;AAEO,MAAM,gCACX;AAAA,EACE,QAAQ;AAAA,EACR,QAAQ;AACV;",
4
+ "sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\nimport type { OrganizationPermissions } from '../types/OrganizationPermission.type.js'\nimport type { SalesPlanType } from '../types/SalesPlanType.type.js'\nimport type { ClusterCreationDefaults } from './ClusterCreationDefaults.dto.js'\nimport type { OrganizationToSalesPlanDto } from './OrganizationToSalesPlan.dto.js'\n\nexport type LicensingModelType = 'legacy' | '2025'\n\nexport const VALID_LICENSING_MODELS: readonly LicensingModelType[] = [\n 'legacy',\n '2025',\n] as const\n\nexport const LICENSING_MODEL_DISPLAY_NAMES: Record<LicensingModelType, string> =\n {\n legacy: 'Legacy (PI, DI, TU)',\n '2025': '2025 (PI+Tenant)',\n } as const\n\n/**\n * Upstream that holds a managed LLM key.\n *\n * `@camunda-cloud/featureflags` owns the `LlmProvider` type and its rollout\n * rules. This package must not depend on that one, so the union is repeated\n * here. Keep the two in step.\n */\nexport type LlmProviderName = 'litellm' | 'openrouter'\n\nexport interface OrganizationMetadata {\n clickedRequestPaidPlan?: boolean\n /**\n * Default values for the settings of a new cluster of this organization\n * (#9732). They seed a cluster at creation and are never applied again.\n *\n * A field that is absent takes the value that the console backend writes.\n * The whole key is absent for almost every organization.\n */\n clusterDefaults?: ClusterCreationDefaults\n salesForceId?: string\n enterpriseDevOnly?: boolean\n awsOnly?: boolean\n licensingModel?: LicensingModelType\n autoJoin?: AutoJoinAssignment\n llm?: {\n tenantKey: string\n /**\n * Team that holds the key on LiteLLM.\n *\n * Optional, and every call site already treats it as such. Old LiteLLM\n * orgs got a key without a team. OpenRouter has no teams at all.\n */\n teamId?: string\n created: number\n /** Epoch ms of the last key rotation \u2014 set when the tenant key is regenerated. */\n updated?: number\n /**\n * Upstream that holds this key. Absent means `litellm`, because every key\n * from before the OpenRouter rollout is on LiteLLM.\n *\n * This value, and not the OpenRouter feature flag, decides where the\n * read, block, top-up and delete paths look for the key. A flag change\n * must never move a live key to a provider that does not hold it.\n */\n provider?: LlmProviderName\n /**\n * Handle for the key on OpenRouter, which addresses a key by hash and not\n * by its value. Absent for a LiteLLM key.\n *\n * Without it, an OpenRouter key can be found again only by a list request\n * that matches on the name of the key.\n */\n keyHash?: string\n /**\n * The key that a provider migration replaced, kept until the delete of\n * that key is confirmed.\n *\n * The migration to OpenRouter writes the new key over `tenantKey` before\n * it deletes the old one. Without this record the old key stays alive on\n * the old upstream and nothing points at it. The migration removes this\n * field when the old upstream confirms the delete, and it uses the field\n * to find the orgs that a re-run must finish.\n *\n * Absent for every org that never moved upstream.\n */\n migratedFrom?: {\n /** Upstream that holds the replaced key. */\n provider: LlmProviderName\n /** The replaced key itself. It is a credential. Never log it. */\n tenantKey: string\n /** Team that held the replaced key on LiteLLM. */\n teamId?: string\n }\n }\n}\n\nexport interface AutoJoinAssignment {\n departments: Array<{ hibobId: string; roles: string[] }>\n divisions: Array<{ hibobId: string; roles: string[] }>\n subdivisions: Array<{ hibobId: string; roles: string[] }>\n}\nexport interface OrganizationDto {\n uuid: string\n name: string\n organizationToSalesPlan?: OrganizationToSalesPlanDto\n permissions?: OrganizationPermissions\n metadata?: OrganizationMetadata\n created: Date\n internal: boolean\n}\n\nexport interface OrgOwner {\n owner: string\n email: string\n first: string\n last: string\n}\n\nexport interface OrgWithNameAndSalesPlan {\n uuid: string\n name: string | undefined\n salesPlanName: string | undefined\n salesPlanUuid: string | undefined\n salesPlanType: SalesPlanType | undefined\n}\n"],
5
+ "mappings": "AAaO,MAAM,yBAAwD;AAAA,EACnE;AAAA,EACA;AACF;AAEO,MAAM,gCACX;AAAA,EACE,QAAQ;AAAA,EACR,QAAQ;AACV;",
6
6
  "names": []
7
7
  }
@@ -22,6 +22,12 @@ export type SanityFix = {
22
22
  generationName: string;
23
23
  /** When set, the delete must not be offered as selectable (e.g. clusters still run it). */
24
24
  blockedReason?: string;
25
+ } | {
26
+ type: 'archive-generation';
27
+ generationUuid: string;
28
+ generationName: string;
29
+ /** When set, the archive must not be offered as selectable (e.g. it is still an upgrade target). */
30
+ blockedReason?: string;
25
31
  };
26
32
  export interface SanityViolation {
27
33
  ruleId: string;
@@ -31,6 +31,7 @@ export declare enum AuditEntityAttribute {
31
31
  CLUSTER_SECRETS_FILTER_MODE = "Secrets Filter Mode",
32
32
  CLUSTER_BUSINESS_ID_UNIQUENESS = "Business ID Uniqueness",
33
33
  CLUSTER_OPTIONAL_TELEMETRY = "Optional telemetry",
34
+ CLUSTER_NON_SPOT_NODES = "Non-spot nodes",
34
35
  CLUSTER_MULTI_TENANCY = "Multi-tenancy",
35
36
  CLUSTER_SESSION_MAX_INACTIVE_INTERVAL = "Session idle timeout",
36
37
  CLUSTER_SESSION_HEARTBEAT = "Session heartbeat",
@@ -53,6 +54,7 @@ export declare enum AuditEntityAttribute {
53
54
  LLM_BUDGET = "LLM Budget",
54
55
  LLM_KEY_BLOCKED = "LLM Key Blocked",
55
56
  ORGANIZATION_LIMIT = "Limit",
57
+ ORGANIZATION_CLUSTER_DEFAULT = "Cluster creation default",
56
58
  CLUSTER_MODIFICATION = "Modification",
57
59
  ORGANIZATION_TRIAL_EXPIRES_AT = "Trial Expiration Date"
58
60
  }
@@ -32,6 +32,7 @@ var AuditEntityAttribute = /* @__PURE__ */ ((AuditEntityAttribute2) => {
32
32
  AuditEntityAttribute2["CLUSTER_SECRETS_FILTER_MODE"] = "Secrets Filter Mode";
33
33
  AuditEntityAttribute2["CLUSTER_BUSINESS_ID_UNIQUENESS"] = "Business ID Uniqueness";
34
34
  AuditEntityAttribute2["CLUSTER_OPTIONAL_TELEMETRY"] = "Optional telemetry";
35
+ AuditEntityAttribute2["CLUSTER_NON_SPOT_NODES"] = "Non-spot nodes";
35
36
  AuditEntityAttribute2["CLUSTER_MULTI_TENANCY"] = "Multi-tenancy";
36
37
  AuditEntityAttribute2["CLUSTER_SESSION_MAX_INACTIVE_INTERVAL"] = "Session idle timeout";
37
38
  AuditEntityAttribute2["CLUSTER_SESSION_HEARTBEAT"] = "Session heartbeat";
@@ -54,6 +55,7 @@ var AuditEntityAttribute = /* @__PURE__ */ ((AuditEntityAttribute2) => {
54
55
  AuditEntityAttribute2["LLM_BUDGET"] = "LLM Budget";
55
56
  AuditEntityAttribute2["LLM_KEY_BLOCKED"] = "LLM Key Blocked";
56
57
  AuditEntityAttribute2["ORGANIZATION_LIMIT"] = "Limit";
58
+ AuditEntityAttribute2["ORGANIZATION_CLUSTER_DEFAULT"] = "Cluster creation default";
57
59
  AuditEntityAttribute2["CLUSTER_MODIFICATION"] = "Modification";
58
60
  AuditEntityAttribute2["ORGANIZATION_TRIAL_EXPIRES_AT"] = "Trial Expiration Date";
59
61
  return AuditEntityAttribute2;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/enums/AuditEntity.enum.ts"],
4
- "sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\n/* eslint-disable no-shadow */\nexport enum AuditEntity {\n CLUSTER = 'Cluster',\n CLIENT = 'Client',\n ALERT_SUBSCRIPTION = 'Alert Subscription',\n API_CLIENT = 'API Client',\n SECURE_CONNECTIVITY_CRD = 'Private networking',\n BYOM_CLIENT = 'External Monitoring Client',\n BYOM_CRD = 'External Monitoring',\n INVITATION = 'Invitation',\n MEMBER = 'Member',\n ORGANIZATION = 'Organization',\n SALES_PLAN = 'SalesPlan',\n CLUSTER_PLAN = 'ClusterPlan',\n GENERATION = 'Generation',\n BILLING = 'Billing',\n USAGE_ALERT = 'Usage Alert',\n ACCEPT_BETA_TERMS = 'Accept Alpha terms',\n TOGGLE_BETA_FEATURE = 'Toggle Alpha feature',\n CONNECTOR_SECRET = 'Connector Secret',\n CLUSTER_MODIFICATION = 'Cluster Modification',\n}\n\nexport enum AuditEntityAttribute {\n CLUSTER_CLUSTER_PLAN = 'ClusterPlan',\n CLUSTER_GENERATION = 'Generation',\n CLUSTER_NAME = 'Name',\n CLUSTER_RBA = 'Resource Based Authorizations',\n CLUSTER_ENFORCE_GROUPS = 'Enforce Group Management',\n CLUSTER_PLAYMODE = 'Cluster Play Mode',\n CLUSTER_MCP_ENABLED = 'MCP Support',\n CLUSTER_SWAGGER = 'Cluster Swagger',\n CLUSTER_SECRETS_FILTER_MODE = 'Secrets Filter Mode',\n CLUSTER_BUSINESS_ID_UNIQUENESS = 'Business ID Uniqueness',\n CLUSTER_OPTIONAL_TELEMETRY = 'Optional telemetry',\n CLUSTER_MULTI_TENANCY = 'Multi-tenancy',\n CLUSTER_SESSION_MAX_INACTIVE_INTERVAL = 'Session idle timeout',\n CLUSTER_SESSION_HEARTBEAT = 'Session heartbeat',\n CLUSTER_EXTERNAL_IDP = 'External identity provider',\n CLUSTER_ENABLE_LOW_LATENCY = 'Enable low latency',\n CLUSTER_AUTOUPDATE = 'Auto Update',\n CLUSTER_OWNER = 'Owner',\n CLUSTER_STATUS = 'Status',\n CLUSTER_TASKLIST_V2_ENABLED = 'Taklist V2 Enabled',\n CLUSTER_AUDIT_LOG = 'Audit Log',\n INVITATION_ROLE = 'Role',\n ORGANIZATION_NAME = 'Name',\n SALES_PLAN = 'Plan',\n BILLING_RESERVATION = 'Reservation',\n BILLING_GENERAL_USERS = 'GeneralUsers', // paid cc legaly - only kept for audit logs compatibility\n MEMBER_ROLE = 'Role',\n USAGE_ALERT_THRESHOLD = 'Threshold',\n USAGE_ALERT_STATUS = 'Status',\n CLUSTER_AUDIT_LOGS = 'Audit Logging',\n LLM_BUDGET = 'LLM Budget',\n LLM_KEY_BLOCKED = 'LLM Key Blocked',\n ORGANIZATION_LIMIT = 'Limit',\n CLUSTER_MODIFICATION = 'Modification',\n ORGANIZATION_TRIAL_EXPIRES_AT = 'Trial Expiration Date',\n}\n"],
5
- "mappings": "AAOO,IAAK,cAAL,kBAAKA,iBAAL;AACL,EAAAA,aAAA,aAAU;AACV,EAAAA,aAAA,YAAS;AACT,EAAAA,aAAA,wBAAqB;AACrB,EAAAA,aAAA,gBAAa;AACb,EAAAA,aAAA,6BAA0B;AAC1B,EAAAA,aAAA,iBAAc;AACd,EAAAA,aAAA,cAAW;AACX,EAAAA,aAAA,gBAAa;AACb,EAAAA,aAAA,YAAS;AACT,EAAAA,aAAA,kBAAe;AACf,EAAAA,aAAA,gBAAa;AACb,EAAAA,aAAA,kBAAe;AACf,EAAAA,aAAA,gBAAa;AACb,EAAAA,aAAA,aAAU;AACV,EAAAA,aAAA,iBAAc;AACd,EAAAA,aAAA,uBAAoB;AACpB,EAAAA,aAAA,yBAAsB;AACtB,EAAAA,aAAA,sBAAmB;AACnB,EAAAA,aAAA,0BAAuB;AAnBb,SAAAA;AAAA,GAAA;AAsBL,IAAK,uBAAL,kBAAKC,0BAAL;AACL,EAAAA,sBAAA,0BAAuB;AACvB,EAAAA,sBAAA,wBAAqB;AACrB,EAAAA,sBAAA,kBAAe;AACf,EAAAA,sBAAA,iBAAc;AACd,EAAAA,sBAAA,4BAAyB;AACzB,EAAAA,sBAAA,sBAAmB;AACnB,EAAAA,sBAAA,yBAAsB;AACtB,EAAAA,sBAAA,qBAAkB;AAClB,EAAAA,sBAAA,iCAA8B;AAC9B,EAAAA,sBAAA,oCAAiC;AACjC,EAAAA,sBAAA,gCAA6B;AAC7B,EAAAA,sBAAA,2BAAwB;AACxB,EAAAA,sBAAA,2CAAwC;AACxC,EAAAA,sBAAA,+BAA4B;AAC5B,EAAAA,sBAAA,0BAAuB;AACvB,EAAAA,sBAAA,gCAA6B;AAC7B,EAAAA,sBAAA,wBAAqB;AACrB,EAAAA,sBAAA,mBAAgB;AAChB,EAAAA,sBAAA,oBAAiB;AACjB,EAAAA,sBAAA,iCAA8B;AAC9B,EAAAA,sBAAA,uBAAoB;AACpB,EAAAA,sBAAA,qBAAkB;AAClB,EAAAA,sBAAA,uBAAoB;AACpB,EAAAA,sBAAA,gBAAa;AACb,EAAAA,sBAAA,yBAAsB;AACtB,EAAAA,sBAAA,2BAAwB;AACxB,EAAAA,sBAAA,iBAAc;AACd,EAAAA,sBAAA,2BAAwB;AACxB,EAAAA,sBAAA,wBAAqB;AACrB,EAAAA,sBAAA,wBAAqB;AACrB,EAAAA,sBAAA,gBAAa;AACb,EAAAA,sBAAA,qBAAkB;AAClB,EAAAA,sBAAA,wBAAqB;AACrB,EAAAA,sBAAA,0BAAuB;AACvB,EAAAA,sBAAA,mCAAgC;AAnCtB,SAAAA;AAAA,GAAA;",
4
+ "sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\n/* eslint-disable no-shadow */\nexport enum AuditEntity {\n CLUSTER = 'Cluster',\n CLIENT = 'Client',\n ALERT_SUBSCRIPTION = 'Alert Subscription',\n API_CLIENT = 'API Client',\n SECURE_CONNECTIVITY_CRD = 'Private networking',\n BYOM_CLIENT = 'External Monitoring Client',\n BYOM_CRD = 'External Monitoring',\n INVITATION = 'Invitation',\n MEMBER = 'Member',\n ORGANIZATION = 'Organization',\n SALES_PLAN = 'SalesPlan',\n CLUSTER_PLAN = 'ClusterPlan',\n GENERATION = 'Generation',\n BILLING = 'Billing',\n USAGE_ALERT = 'Usage Alert',\n ACCEPT_BETA_TERMS = 'Accept Alpha terms',\n TOGGLE_BETA_FEATURE = 'Toggle Alpha feature',\n CONNECTOR_SECRET = 'Connector Secret',\n CLUSTER_MODIFICATION = 'Cluster Modification',\n}\n\nexport enum AuditEntityAttribute {\n CLUSTER_CLUSTER_PLAN = 'ClusterPlan',\n CLUSTER_GENERATION = 'Generation',\n CLUSTER_NAME = 'Name',\n CLUSTER_RBA = 'Resource Based Authorizations',\n CLUSTER_ENFORCE_GROUPS = 'Enforce Group Management',\n CLUSTER_PLAYMODE = 'Cluster Play Mode',\n CLUSTER_MCP_ENABLED = 'MCP Support',\n CLUSTER_SWAGGER = 'Cluster Swagger',\n CLUSTER_SECRETS_FILTER_MODE = 'Secrets Filter Mode',\n CLUSTER_BUSINESS_ID_UNIQUENESS = 'Business ID Uniqueness',\n CLUSTER_OPTIONAL_TELEMETRY = 'Optional telemetry',\n CLUSTER_NON_SPOT_NODES = 'Non-spot nodes',\n CLUSTER_MULTI_TENANCY = 'Multi-tenancy',\n CLUSTER_SESSION_MAX_INACTIVE_INTERVAL = 'Session idle timeout',\n CLUSTER_SESSION_HEARTBEAT = 'Session heartbeat',\n CLUSTER_EXTERNAL_IDP = 'External identity provider',\n CLUSTER_ENABLE_LOW_LATENCY = 'Enable low latency',\n CLUSTER_AUTOUPDATE = 'Auto Update',\n CLUSTER_OWNER = 'Owner',\n CLUSTER_STATUS = 'Status',\n CLUSTER_TASKLIST_V2_ENABLED = 'Taklist V2 Enabled',\n CLUSTER_AUDIT_LOG = 'Audit Log',\n INVITATION_ROLE = 'Role',\n ORGANIZATION_NAME = 'Name',\n SALES_PLAN = 'Plan',\n BILLING_RESERVATION = 'Reservation',\n BILLING_GENERAL_USERS = 'GeneralUsers', // paid cc legaly - only kept for audit logs compatibility\n MEMBER_ROLE = 'Role',\n USAGE_ALERT_THRESHOLD = 'Threshold',\n USAGE_ALERT_STATUS = 'Status',\n CLUSTER_AUDIT_LOGS = 'Audit Logging',\n LLM_BUDGET = 'LLM Budget',\n LLM_KEY_BLOCKED = 'LLM Key Blocked',\n ORGANIZATION_LIMIT = 'Limit',\n ORGANIZATION_CLUSTER_DEFAULT = 'Cluster creation default',\n CLUSTER_MODIFICATION = 'Modification',\n ORGANIZATION_TRIAL_EXPIRES_AT = 'Trial Expiration Date',\n}\n"],
5
+ "mappings": "AAOO,IAAK,cAAL,kBAAKA,iBAAL;AACL,EAAAA,aAAA,aAAU;AACV,EAAAA,aAAA,YAAS;AACT,EAAAA,aAAA,wBAAqB;AACrB,EAAAA,aAAA,gBAAa;AACb,EAAAA,aAAA,6BAA0B;AAC1B,EAAAA,aAAA,iBAAc;AACd,EAAAA,aAAA,cAAW;AACX,EAAAA,aAAA,gBAAa;AACb,EAAAA,aAAA,YAAS;AACT,EAAAA,aAAA,kBAAe;AACf,EAAAA,aAAA,gBAAa;AACb,EAAAA,aAAA,kBAAe;AACf,EAAAA,aAAA,gBAAa;AACb,EAAAA,aAAA,aAAU;AACV,EAAAA,aAAA,iBAAc;AACd,EAAAA,aAAA,uBAAoB;AACpB,EAAAA,aAAA,yBAAsB;AACtB,EAAAA,aAAA,sBAAmB;AACnB,EAAAA,aAAA,0BAAuB;AAnBb,SAAAA;AAAA,GAAA;AAsBL,IAAK,uBAAL,kBAAKC,0BAAL;AACL,EAAAA,sBAAA,0BAAuB;AACvB,EAAAA,sBAAA,wBAAqB;AACrB,EAAAA,sBAAA,kBAAe;AACf,EAAAA,sBAAA,iBAAc;AACd,EAAAA,sBAAA,4BAAyB;AACzB,EAAAA,sBAAA,sBAAmB;AACnB,EAAAA,sBAAA,yBAAsB;AACtB,EAAAA,sBAAA,qBAAkB;AAClB,EAAAA,sBAAA,iCAA8B;AAC9B,EAAAA,sBAAA,oCAAiC;AACjC,EAAAA,sBAAA,gCAA6B;AAC7B,EAAAA,sBAAA,4BAAyB;AACzB,EAAAA,sBAAA,2BAAwB;AACxB,EAAAA,sBAAA,2CAAwC;AACxC,EAAAA,sBAAA,+BAA4B;AAC5B,EAAAA,sBAAA,0BAAuB;AACvB,EAAAA,sBAAA,gCAA6B;AAC7B,EAAAA,sBAAA,wBAAqB;AACrB,EAAAA,sBAAA,mBAAgB;AAChB,EAAAA,sBAAA,oBAAiB;AACjB,EAAAA,sBAAA,iCAA8B;AAC9B,EAAAA,sBAAA,uBAAoB;AACpB,EAAAA,sBAAA,qBAAkB;AAClB,EAAAA,sBAAA,uBAAoB;AACpB,EAAAA,sBAAA,gBAAa;AACb,EAAAA,sBAAA,yBAAsB;AACtB,EAAAA,sBAAA,2BAAwB;AACxB,EAAAA,sBAAA,iBAAc;AACd,EAAAA,sBAAA,2BAAwB;AACxB,EAAAA,sBAAA,wBAAqB;AACrB,EAAAA,sBAAA,wBAAqB;AACrB,EAAAA,sBAAA,gBAAa;AACb,EAAAA,sBAAA,qBAAkB;AAClB,EAAAA,sBAAA,wBAAqB;AACrB,EAAAA,sBAAA,kCAA+B;AAC/B,EAAAA,sBAAA,0BAAuB;AACvB,EAAAA,sBAAA,mCAAgC;AArCtB,SAAAA;AAAA,GAAA;",
6
6
  "names": ["AuditEntity", "AuditEntityAttribute"]
7
7
  }
@@ -27,6 +27,7 @@ export declare enum SystemAuditEntityAttribute {
27
27
  GENERATION_UPGRADEABLE_TO = "Upgradeable To",
28
28
  GENERATION_SUPPORTED_UNTIL = "Supported Until",
29
29
  GENERATION_BESPOKE = "Bespoke",
30
+ GENERATION_ARCHIVED = "Archived",
30
31
  CHANNEL_NAME = "Name",
31
32
  CHANNEL_DESCRIPTION = "Description",
32
33
  CHANNEL_DEFAULT_GENERATION = "Default Generation",
@@ -21,6 +21,7 @@ var SystemAuditEntityAttribute = /* @__PURE__ */ ((SystemAuditEntityAttribute2)
21
21
  SystemAuditEntityAttribute2["GENERATION_UPGRADEABLE_TO"] = "Upgradeable To";
22
22
  SystemAuditEntityAttribute2["GENERATION_SUPPORTED_UNTIL"] = "Supported Until";
23
23
  SystemAuditEntityAttribute2["GENERATION_BESPOKE"] = "Bespoke";
24
+ SystemAuditEntityAttribute2["GENERATION_ARCHIVED"] = "Archived";
24
25
  SystemAuditEntityAttribute2["CHANNEL_NAME"] = "Name";
25
26
  SystemAuditEntityAttribute2["CHANNEL_DESCRIPTION"] = "Description";
26
27
  SystemAuditEntityAttribute2["CHANNEL_DEFAULT_GENERATION"] = "Default Generation";
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/enums/SystemAuditEntity.enum.ts"],
4
- "sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\n/* eslint-disable no-shadow */\nexport enum SystemAuditEntity {\n GENERATION = 'Generation',\n CHANNEL = 'Channel',\n CLUSTER_PLAN = 'Cluster Plan',\n CLUSTER_PLAN_TYPE = 'Cluster Plan Type',\n ALPHA_FEATURE = 'Alpha Feature',\n SALES_PLAN = 'Sales Plan',\n CLUSTER_PLAN_MODIFICATION = 'Cluster Plan Modification',\n CLUSTER_BULK_OPERATION = 'Cluster Bulk Operation',\n CLUSTER_MODIFICATION = 'Cluster Modification',\n CONNECTION = 'Connection',\n RELEASE_TRAIN = 'Release Train',\n CLUSTER = 'Cluster',\n APPROVAL_JOB = 'Approval Request',\n}\n\n/**\n * Display strings for audited attributes. The `entity` + `entityAttribute` pair\n * is always the key, so duplicate display values across entities (e.g. several\n * `*_NAME = 'Name'`) are intentional and safe. `*_STATUS = 'Status'` is the\n * lifecycle attribute for the modification/operation entities; its from/to carry\n * the raw lifecycle state.\n */\nexport enum SystemAuditEntityAttribute {\n // Generation\n GENERATION_NAME = 'Name',\n GENERATION_VERSIONS = 'Versions',\n GENERATION_UPGRADEABLE_FROM = 'Upgradeable From',\n GENERATION_UPGRADEABLE_TO = 'Upgradeable To',\n GENERATION_SUPPORTED_UNTIL = 'Supported Until',\n GENERATION_BESPOKE = 'Bespoke',\n // Channel\n CHANNEL_NAME = 'Name',\n CHANNEL_DESCRIPTION = 'Description',\n CHANNEL_DEFAULT_GENERATION = 'Default Generation',\n CHANNEL_ALLOWED_GENERATIONS = 'Allowed Generations',\n CHANNEL_IS_DEFAULT = 'Is Default',\n // ClusterPlan\n CLUSTER_PLAN_MIGRATABLE_FROM = 'Migratable From',\n CLUSTER_PLAN_PERFORMANCE_EXPECTATIONS = 'Performance Expectations',\n // ClusterPlanType\n CLUSTER_PLAN_TYPE_NAME = 'Name',\n CLUSTER_PLAN_TYPE_DESCRIPTION = 'Description',\n CLUSTER_PLAN_TYPE_DEVELOPMENT = 'Development',\n CLUSTER_PLAN_TYPE_CATEGORY = 'Category',\n CLUSTER_PLAN_TYPE_AVAILABILITY_CLASS = 'Availability Class',\n CLUSTER_PLAN_TYPE_ACTIVE_PLAN = 'Active Plan',\n CLUSTER_PLAN_TYPE_LIMITS = 'Limits',\n // AlphaFeature (EarlyAccessFeature)\n ALPHA_FEATURE_NAME = 'Name',\n ALPHA_FEATURE_AVAILABLE_IN = 'Available In',\n ALPHA_FEATURE_DOCUMENTATION_LINK = 'Documentation Link',\n ALPHA_FEATURE_DESCRIPTION = 'Description',\n ALPHA_FEATURE_ACTION_LABEL = 'Action Label',\n ALPHA_FEATURE_ACTION_URL = 'Action Url',\n ALPHA_FEATURE_CLICKWRAP = 'Clickwrap',\n ALPHA_FEATURE_SALES_PLAN_TYPE_VISIBILITIES = 'Sales Plan Type Visibilities',\n // SalesPlan\n SALES_PLAN_NAME = 'Name',\n SALES_PLAN_METADATA = 'Metadata',\n SALES_PLAN_CLUSTER_PLAN_CONFIGURATION = 'Cluster Plan Configuration',\n SALES_PLAN_VERSION = 'Version',\n // ClusterPlanModification\n CLUSTER_PLAN_MODIFICATION_NAME = 'Name',\n CLUSTER_PLAN_MODIFICATION_DESCRIPTION = 'Description',\n CLUSTER_PLAN_MODIFICATION_CONFIG = 'Config',\n CLUSTER_PLAN_MODIFICATION_CLUSTER_PLANS = 'Cluster Plans',\n CLUSTER_PLAN_MODIFICATION_URL = 'Url',\n CLUSTER_PLAN_MODIFICATION_STATUS = 'Status',\n // ClusterBulkOperation\n CLUSTER_BULK_OPERATION_CLUSTERS = 'Clusters',\n CLUSTER_BULK_OPERATION_STATUS = 'Status',\n // ClusterModification (parent + config)\n CLUSTER_MODIFICATION_DESCRIPTION = 'Description',\n CLUSTER_MODIFICATION_URL = 'Url',\n CLUSTER_MODIFICATION_PLAN_MODIFICATIONS = 'Plan Modifications',\n CLUSTER_MODIFICATION_EXPIRES_AT = 'Expires At',\n CLUSTER_MODIFICATION_STATUS = 'Status',\n // Connection\n CONNECTION_NAME = 'Name',\n CONNECTION_STRATEGY = 'Strategy',\n CONNECTION_CONFIGURATION = 'Configuration',\n // Cluster (internal-only lifecycle actions with no customer-facing audit)\n CLUSTER_IP_ALLOWLIST = 'IP Allowlist',\n CLUSTER_ENV_VAR_OVERRIDE = 'Environment Variable Override',\n // A cluster plan modification that was applied to (and updated) this cluster.\n CLUSTER_APPLIED_PLAN_MODIFICATION = 'Plan Modification',\n // ApprovalJob. Every change of state of a four-eyes request is audited, not\n // only the run: the value of the trail is the answer to \"who decided what,\n // and when\", and a record of the outcome alone cannot give it.\n APPROVAL_JOB_STATUS = 'Status',\n APPROVAL_JOB_ACKS = 'Approvals',\n APPROVAL_JOB_CLOSED_REASON = 'Closure Reason',\n}\n"],
5
- "mappings": "AAOO,IAAK,oBAAL,kBAAKA,uBAAL;AACL,EAAAA,mBAAA,gBAAa;AACb,EAAAA,mBAAA,aAAU;AACV,EAAAA,mBAAA,kBAAe;AACf,EAAAA,mBAAA,uBAAoB;AACpB,EAAAA,mBAAA,mBAAgB;AAChB,EAAAA,mBAAA,gBAAa;AACb,EAAAA,mBAAA,+BAA4B;AAC5B,EAAAA,mBAAA,4BAAyB;AACzB,EAAAA,mBAAA,0BAAuB;AACvB,EAAAA,mBAAA,gBAAa;AACb,EAAAA,mBAAA,mBAAgB;AAChB,EAAAA,mBAAA,aAAU;AACV,EAAAA,mBAAA,kBAAe;AAbL,SAAAA;AAAA,GAAA;AAuBL,IAAK,6BAAL,kBAAKC,gCAAL;AAEL,EAAAA,4BAAA,qBAAkB;AAClB,EAAAA,4BAAA,yBAAsB;AACtB,EAAAA,4BAAA,iCAA8B;AAC9B,EAAAA,4BAAA,+BAA4B;AAC5B,EAAAA,4BAAA,gCAA6B;AAC7B,EAAAA,4BAAA,wBAAqB;AAErB,EAAAA,4BAAA,kBAAe;AACf,EAAAA,4BAAA,yBAAsB;AACtB,EAAAA,4BAAA,gCAA6B;AAC7B,EAAAA,4BAAA,iCAA8B;AAC9B,EAAAA,4BAAA,wBAAqB;AAErB,EAAAA,4BAAA,kCAA+B;AAC/B,EAAAA,4BAAA,2CAAwC;AAExC,EAAAA,4BAAA,4BAAyB;AACzB,EAAAA,4BAAA,mCAAgC;AAChC,EAAAA,4BAAA,mCAAgC;AAChC,EAAAA,4BAAA,gCAA6B;AAC7B,EAAAA,4BAAA,0CAAuC;AACvC,EAAAA,4BAAA,mCAAgC;AAChC,EAAAA,4BAAA,8BAA2B;AAE3B,EAAAA,4BAAA,wBAAqB;AACrB,EAAAA,4BAAA,gCAA6B;AAC7B,EAAAA,4BAAA,sCAAmC;AACnC,EAAAA,4BAAA,+BAA4B;AAC5B,EAAAA,4BAAA,gCAA6B;AAC7B,EAAAA,4BAAA,8BAA2B;AAC3B,EAAAA,4BAAA,6BAA0B;AAC1B,EAAAA,4BAAA,gDAA6C;AAE7C,EAAAA,4BAAA,qBAAkB;AAClB,EAAAA,4BAAA,yBAAsB;AACtB,EAAAA,4BAAA,2CAAwC;AACxC,EAAAA,4BAAA,wBAAqB;AAErB,EAAAA,4BAAA,oCAAiC;AACjC,EAAAA,4BAAA,2CAAwC;AACxC,EAAAA,4BAAA,sCAAmC;AACnC,EAAAA,4BAAA,6CAA0C;AAC1C,EAAAA,4BAAA,mCAAgC;AAChC,EAAAA,4BAAA,sCAAmC;AAEnC,EAAAA,4BAAA,qCAAkC;AAClC,EAAAA,4BAAA,mCAAgC;AAEhC,EAAAA,4BAAA,sCAAmC;AACnC,EAAAA,4BAAA,8BAA2B;AAC3B,EAAAA,4BAAA,6CAA0C;AAC1C,EAAAA,4BAAA,qCAAkC;AAClC,EAAAA,4BAAA,iCAA8B;AAE9B,EAAAA,4BAAA,qBAAkB;AAClB,EAAAA,4BAAA,yBAAsB;AACtB,EAAAA,4BAAA,8BAA2B;AAE3B,EAAAA,4BAAA,0BAAuB;AACvB,EAAAA,4BAAA,8BAA2B;AAE3B,EAAAA,4BAAA,uCAAoC;AAIpC,EAAAA,4BAAA,yBAAsB;AACtB,EAAAA,4BAAA,uBAAoB;AACpB,EAAAA,4BAAA,gCAA6B;AArEnB,SAAAA;AAAA,GAAA;",
4
+ "sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\n/* eslint-disable no-shadow */\nexport enum SystemAuditEntity {\n GENERATION = 'Generation',\n CHANNEL = 'Channel',\n CLUSTER_PLAN = 'Cluster Plan',\n CLUSTER_PLAN_TYPE = 'Cluster Plan Type',\n ALPHA_FEATURE = 'Alpha Feature',\n SALES_PLAN = 'Sales Plan',\n CLUSTER_PLAN_MODIFICATION = 'Cluster Plan Modification',\n CLUSTER_BULK_OPERATION = 'Cluster Bulk Operation',\n CLUSTER_MODIFICATION = 'Cluster Modification',\n CONNECTION = 'Connection',\n RELEASE_TRAIN = 'Release Train',\n CLUSTER = 'Cluster',\n APPROVAL_JOB = 'Approval Request',\n}\n\n/**\n * Display strings for audited attributes. The `entity` + `entityAttribute` pair\n * is always the key, so duplicate display values across entities (e.g. several\n * `*_NAME = 'Name'`) are intentional and safe. `*_STATUS = 'Status'` is the\n * lifecycle attribute for the modification/operation entities; its from/to carry\n * the raw lifecycle state.\n */\nexport enum SystemAuditEntityAttribute {\n // Generation\n GENERATION_NAME = 'Name',\n GENERATION_VERSIONS = 'Versions',\n GENERATION_UPGRADEABLE_FROM = 'Upgradeable From',\n GENERATION_UPGRADEABLE_TO = 'Upgradeable To',\n GENERATION_SUPPORTED_UNTIL = 'Supported Until',\n GENERATION_BESPOKE = 'Bespoke',\n GENERATION_ARCHIVED = 'Archived',\n // Channel\n CHANNEL_NAME = 'Name',\n CHANNEL_DESCRIPTION = 'Description',\n CHANNEL_DEFAULT_GENERATION = 'Default Generation',\n CHANNEL_ALLOWED_GENERATIONS = 'Allowed Generations',\n CHANNEL_IS_DEFAULT = 'Is Default',\n // ClusterPlan\n CLUSTER_PLAN_MIGRATABLE_FROM = 'Migratable From',\n CLUSTER_PLAN_PERFORMANCE_EXPECTATIONS = 'Performance Expectations',\n // ClusterPlanType\n CLUSTER_PLAN_TYPE_NAME = 'Name',\n CLUSTER_PLAN_TYPE_DESCRIPTION = 'Description',\n CLUSTER_PLAN_TYPE_DEVELOPMENT = 'Development',\n CLUSTER_PLAN_TYPE_CATEGORY = 'Category',\n CLUSTER_PLAN_TYPE_AVAILABILITY_CLASS = 'Availability Class',\n CLUSTER_PLAN_TYPE_ACTIVE_PLAN = 'Active Plan',\n CLUSTER_PLAN_TYPE_LIMITS = 'Limits',\n // AlphaFeature (EarlyAccessFeature)\n ALPHA_FEATURE_NAME = 'Name',\n ALPHA_FEATURE_AVAILABLE_IN = 'Available In',\n ALPHA_FEATURE_DOCUMENTATION_LINK = 'Documentation Link',\n ALPHA_FEATURE_DESCRIPTION = 'Description',\n ALPHA_FEATURE_ACTION_LABEL = 'Action Label',\n ALPHA_FEATURE_ACTION_URL = 'Action Url',\n ALPHA_FEATURE_CLICKWRAP = 'Clickwrap',\n ALPHA_FEATURE_SALES_PLAN_TYPE_VISIBILITIES = 'Sales Plan Type Visibilities',\n // SalesPlan\n SALES_PLAN_NAME = 'Name',\n SALES_PLAN_METADATA = 'Metadata',\n SALES_PLAN_CLUSTER_PLAN_CONFIGURATION = 'Cluster Plan Configuration',\n SALES_PLAN_VERSION = 'Version',\n // ClusterPlanModification\n CLUSTER_PLAN_MODIFICATION_NAME = 'Name',\n CLUSTER_PLAN_MODIFICATION_DESCRIPTION = 'Description',\n CLUSTER_PLAN_MODIFICATION_CONFIG = 'Config',\n CLUSTER_PLAN_MODIFICATION_CLUSTER_PLANS = 'Cluster Plans',\n CLUSTER_PLAN_MODIFICATION_URL = 'Url',\n CLUSTER_PLAN_MODIFICATION_STATUS = 'Status',\n // ClusterBulkOperation\n CLUSTER_BULK_OPERATION_CLUSTERS = 'Clusters',\n CLUSTER_BULK_OPERATION_STATUS = 'Status',\n // ClusterModification (parent + config)\n CLUSTER_MODIFICATION_DESCRIPTION = 'Description',\n CLUSTER_MODIFICATION_URL = 'Url',\n CLUSTER_MODIFICATION_PLAN_MODIFICATIONS = 'Plan Modifications',\n CLUSTER_MODIFICATION_EXPIRES_AT = 'Expires At',\n CLUSTER_MODIFICATION_STATUS = 'Status',\n // Connection\n CONNECTION_NAME = 'Name',\n CONNECTION_STRATEGY = 'Strategy',\n CONNECTION_CONFIGURATION = 'Configuration',\n // Cluster (internal-only lifecycle actions with no customer-facing audit)\n CLUSTER_IP_ALLOWLIST = 'IP Allowlist',\n CLUSTER_ENV_VAR_OVERRIDE = 'Environment Variable Override',\n // A cluster plan modification that was applied to (and updated) this cluster.\n CLUSTER_APPLIED_PLAN_MODIFICATION = 'Plan Modification',\n // ApprovalJob. Every change of state of a four-eyes request is audited, not\n // only the run: the value of the trail is the answer to \"who decided what,\n // and when\", and a record of the outcome alone cannot give it.\n APPROVAL_JOB_STATUS = 'Status',\n APPROVAL_JOB_ACKS = 'Approvals',\n APPROVAL_JOB_CLOSED_REASON = 'Closure Reason',\n}\n"],
5
+ "mappings": "AAOO,IAAK,oBAAL,kBAAKA,uBAAL;AACL,EAAAA,mBAAA,gBAAa;AACb,EAAAA,mBAAA,aAAU;AACV,EAAAA,mBAAA,kBAAe;AACf,EAAAA,mBAAA,uBAAoB;AACpB,EAAAA,mBAAA,mBAAgB;AAChB,EAAAA,mBAAA,gBAAa;AACb,EAAAA,mBAAA,+BAA4B;AAC5B,EAAAA,mBAAA,4BAAyB;AACzB,EAAAA,mBAAA,0BAAuB;AACvB,EAAAA,mBAAA,gBAAa;AACb,EAAAA,mBAAA,mBAAgB;AAChB,EAAAA,mBAAA,aAAU;AACV,EAAAA,mBAAA,kBAAe;AAbL,SAAAA;AAAA,GAAA;AAuBL,IAAK,6BAAL,kBAAKC,gCAAL;AAEL,EAAAA,4BAAA,qBAAkB;AAClB,EAAAA,4BAAA,yBAAsB;AACtB,EAAAA,4BAAA,iCAA8B;AAC9B,EAAAA,4BAAA,+BAA4B;AAC5B,EAAAA,4BAAA,gCAA6B;AAC7B,EAAAA,4BAAA,wBAAqB;AACrB,EAAAA,4BAAA,yBAAsB;AAEtB,EAAAA,4BAAA,kBAAe;AACf,EAAAA,4BAAA,yBAAsB;AACtB,EAAAA,4BAAA,gCAA6B;AAC7B,EAAAA,4BAAA,iCAA8B;AAC9B,EAAAA,4BAAA,wBAAqB;AAErB,EAAAA,4BAAA,kCAA+B;AAC/B,EAAAA,4BAAA,2CAAwC;AAExC,EAAAA,4BAAA,4BAAyB;AACzB,EAAAA,4BAAA,mCAAgC;AAChC,EAAAA,4BAAA,mCAAgC;AAChC,EAAAA,4BAAA,gCAA6B;AAC7B,EAAAA,4BAAA,0CAAuC;AACvC,EAAAA,4BAAA,mCAAgC;AAChC,EAAAA,4BAAA,8BAA2B;AAE3B,EAAAA,4BAAA,wBAAqB;AACrB,EAAAA,4BAAA,gCAA6B;AAC7B,EAAAA,4BAAA,sCAAmC;AACnC,EAAAA,4BAAA,+BAA4B;AAC5B,EAAAA,4BAAA,gCAA6B;AAC7B,EAAAA,4BAAA,8BAA2B;AAC3B,EAAAA,4BAAA,6BAA0B;AAC1B,EAAAA,4BAAA,gDAA6C;AAE7C,EAAAA,4BAAA,qBAAkB;AAClB,EAAAA,4BAAA,yBAAsB;AACtB,EAAAA,4BAAA,2CAAwC;AACxC,EAAAA,4BAAA,wBAAqB;AAErB,EAAAA,4BAAA,oCAAiC;AACjC,EAAAA,4BAAA,2CAAwC;AACxC,EAAAA,4BAAA,sCAAmC;AACnC,EAAAA,4BAAA,6CAA0C;AAC1C,EAAAA,4BAAA,mCAAgC;AAChC,EAAAA,4BAAA,sCAAmC;AAEnC,EAAAA,4BAAA,qCAAkC;AAClC,EAAAA,4BAAA,mCAAgC;AAEhC,EAAAA,4BAAA,sCAAmC;AACnC,EAAAA,4BAAA,8BAA2B;AAC3B,EAAAA,4BAAA,6CAA0C;AAC1C,EAAAA,4BAAA,qCAAkC;AAClC,EAAAA,4BAAA,iCAA8B;AAE9B,EAAAA,4BAAA,qBAAkB;AAClB,EAAAA,4BAAA,yBAAsB;AACtB,EAAAA,4BAAA,8BAA2B;AAE3B,EAAAA,4BAAA,0BAAuB;AACvB,EAAAA,4BAAA,8BAA2B;AAE3B,EAAAA,4BAAA,uCAAoC;AAIpC,EAAAA,4BAAA,yBAAsB;AACtB,EAAAA,4BAAA,uBAAoB;AACpB,EAAAA,4BAAA,gCAA6B;AAtEnB,SAAAA;AAAA,GAAA;",
6
6
  "names": ["SystemAuditEntity", "SystemAuditEntityAttribute"]
7
7
  }
package/dist/index.d.ts CHANGED
@@ -10,18 +10,23 @@ export { TRIAL_EXTENSION_SURVEY_QUESTIONS } from './constants/trialExtensionSurv
10
10
  export { V2_BODY_IDS_MAX, V2_FILTER_IDS_MAX, V2_MAX_PAGE_LIMIT, } from './constants/v2-list.const.js';
11
11
  export { ADMIN_APP_RENAME_MIN_VERSION, APP_INTEGRATIONS_89_STREAM_CONNECTOR_BRIDGE_MIN_VERSION, APP_INTEGRATIONS_89_STREAM_MINOR, APP_INTEGRATIONS_89_STREAM_ZEEBE_MIN_VERSION, APP_INTEGRATIONS_MIN_VERSION, AUDIT_LOG_TAB_MIN_VERSION, AUTHORIZATION_TOGGLE_MIN_VERSION, AWS_ONLY_GENERATION_MIN_VERSION, BUSINESS_ID_UNIQUENESS_MIN_VERSION, BYOIDP_MIN_VERSION, CLUSTER_SECRETS_LABEL_MIN_VERSION, CLUSTER_STATISTICS_CONFIG_MIN_VERSION, CONNECTOR_MANAGEMENT_METRICS_MIN_VERSION, CONNECTOR_SECRET_SYNC_MIN_VERSION, CONNECTORS_MANAGEMENT_LINK_MIN_VERSION, ENFORCE_GROUPS_TASKLIST_V2_HIDDEN_MIN_VERSION, ENFORCE_GROUPS_TOGGLE_MIN_VERSION, GATEWAY_SPEC_8_9_MIN_VERSION, HOT_BACKUP_MIN_VERSION, IDENTITY_AUTHORIZATION_MIN_VERSION, IDENTITY_AUTHORIZATION_NOTICE_MAX_VERSION, IDENTITY_MANAGEMENT_MIN_VERSION, INTERNAL_CONNECTORS_MANAGEMENT_MIN_VERSION, JOB_DASHBOARD_MIN_VERSION, LINE_8_9_MIN_VERSION, LINE_8_10_MIN_VERSION, MCP_MIN_VERSION, MULTI_TENANCY_TOGGLE_MIN_VERSION, NEW_CLUSTER_ROLES_MIN_VERSION, OPTIMIZE_DEFAULT_ON_MIN_VERSION, OPTIMIZE_FILTERING_MIN_VERSION, OPTIONAL_TELEMETRY_MIN_VERSION, RESOURCE_BASED_AUTHORIZATIONS_MIN_VERSION, REST_API_URL_TRANSFORM_MIN_VERSION, REST_API_V2_MIN_VERSION, RESUME_ALPHA_MIN_VERSION, SECRET_SOURCE_MIN_VERSION, SECRETS_FILTER_MODE_8_6_MIN_VERSION, SECRETS_FILTER_MODE_8_7_MIN_VERSION, SECRETS_FILTER_MODE_8_8_MIN_VERSION, SECRETS_FILTER_MODE_8_9_MIN_VERSION, SECRETS_FILTER_MODE_8_10_MIN_VERSION, SESSION_CONFIG_MIN_VERSION, SWAGGER_MIN_VERSION, SWAGGER_URL_8_9_MIN_VERSION, TASKLIST_MODE_TOGGLE_MIN_VERSION, TASKLIST_UPGRADE_BANNER_MIN_VERSION, TASKLIST_V2_AUTO_ENABLE_FROM_MINOR, TASKLIST_V2_AUTO_ENABLE_TO_MINOR, TASKLIST_V2_DEFAULT_ON_MIN_VERSION, TASKLIST_V2_SETTING_MAX_VERSION, TASKLIST_V2_UPGRADE_MIN_VERSION, TASKLIST_V2_UPGRADE_TARGET_MIN_VERSION, ZEEBE_REST_URL_MIN_VERSION, } from './constants/version-gates.const.js';
12
12
  export type { ApprovalActorView, ApprovalDecision, ApprovalDenialCode, } from './approvals/policy.js';
13
- export { canAcknowledge, canCreate, canExecute, canReject, canWithdraw, effectiveStatus, isExpired, isSameActorEmail, remainingAcks, } from './approvals/policy.js';
13
+ export { canAcknowledge, canCreate, canExecute, canReject, canView, canWithdraw, effectiveStatus, hasActorEmail, hasEveryPermission, isExpired, isSameActorEmail, remainingAcks, requiredPermissionsOf, resolveRequiredAcks, } from './approvals/policy.js';
14
+ export type { ApprovalUseCaseType } from './approvals/use-cases.const.js';
15
+ export { APPROVAL_USE_CASE_TYPES, EXTEND_TRIAL_MAX_DAYS, EXTEND_TRIAL_MIN_DAYS, } from './approvals/use-cases.const.js';
14
16
  export type { ALERT_SUBSCRIPTION_REPORT_TYPES, ALERT_SUBSCRIPTION_TYPES, AlertSubscriptionDto, AlertSubscriptionEntryDto, AlertSubscriptionWebhookAuth, CheckFailedReason, } from './dtos/AlertSubscription.dto.js';
15
17
  export { FORBIDDEN_HOSTNAMES_FOR_WEBHOOK_ALERTS, HMAC_HEADER_POSITION, HMAC_SUPPORTED_ALGORITHM, } from './dtos/AlertSubscription.dto.js';
16
- export type { ApprovalAck, ApprovalActor, ApprovalExecutionMode, ApprovalJobDto, ApprovalJobStatus, ApprovalUseCaseDto, } from './dtos/ApprovalJob.dto.js';
17
- export { APPROVAL_JOB_STATUSES } from './dtos/ApprovalJob.dto.js';
18
+ export type { ApprovalAck, ApprovalActionMode, ApprovalActor, ApprovalExecutionMode, ApprovalJobDto, ApprovalJobStatus, ApprovalProgress, ApprovalSummaryField, ApprovalSummaryFieldKind, ApprovalSummaryValue, ApprovalUseCaseDto, } from './dtos/ApprovalJob.dto.js';
19
+ export { APPROVAL_JOB_STATUSES, APPROVAL_LIVE_STATUSES, APPROVAL_PAGE_SIZE_DEFAULT, APPROVAL_PAGE_SIZE_MAX, APPROVAL_RUN_STALE_MS, APPROVAL_SUMMARY_FIELD_KINDS, isRunStalled, progressFraction, } from './dtos/ApprovalJob.dto.js';
18
20
  export type { AuditDto } from './dtos/Audit.dto.js';
19
21
  export type { Auth0ResourceServerDto } from './dtos/Auth0ResourceServer.dto.js';
20
22
  export type { BackupDto } from './dtos/Backup.dto.js';
21
23
  export type { BackupScheduleDto } from './dtos/BackupSchedule.dto.js';
22
24
  export type { ByomClientDto, ByomStatus } from './dtos/ByomClient.dto.js';
25
+ export type { ClusterCreationDefaultField, ClusterCreationDefaultKey, ClusterCreationDefaults, } from './dtos/ClusterCreationDefaults.dto.js';
26
+ export { CLUSTER_CREATION_DEFAULT_FIELDS } from './dtos/ClusterCreationDefaults.dto.js';
23
27
  export type { ClusterDeferredSpecChange, DeferredSpecChangeType, } from './dtos/ClusterDeferredSpecChange.dto.js';
24
28
  export type { ClusterIpWhitelistDto } from './dtos/ClusterIpWhitelist.dto.js';
29
+ export type { MoveClusterOwnerResult, MoveClusterWarnings, } from './dtos/ClusterOwnerMove.dto.js';
25
30
  export type { ClusterPlanDto } from './dtos/ClusterPlan.dto.js';
26
31
  export type { ClusterPlanTypeDto } from './dtos/ClusterPlanType.dto.js';
27
32
  export type { ClusterSpecChange, ClusterSpecChangeActor, ClusterSpecHistory, } from './dtos/ClusterSpecHistory.dto.js';
@@ -31,7 +36,7 @@ export type { ClusterActivityBucket, ClusterActivityTile, ClusterActivityV2Dto,
31
36
  export type { EarlyAccessFeatureDto } from './dtos/EarlyAccessFeature.dto.js';
32
37
  export type { CamundaWebApp, CamundaWebAppWithZeebe, ExternalClusterDto, ExternalOrganizationDto, } from './dtos/ExternalWebapp.dto.js';
33
38
  export type { Features } from './dtos/FeatureFlags.dto.js';
34
- export { compareGenerationNamesNewestFirst, type GenerationDto, type GenerationWithClusterCountDto, sortGenerationBySemverOfZeebe, type UpgradableGenerationsDto, } from './dtos/Generations.dto.js';
39
+ export { activeGenerations, compareGenerationNamesNewestFirst, type GenerationDto, type GenerationWithClusterCountDto, sortGenerationBySemverOfZeebe, type UpgradableGenerationsDto, } from './dtos/Generations.dto.js';
35
40
  export type { Hdp } from './dtos/Hdp.dto.js';
36
41
  export type { K8sConfig, K8sConfigLegacyFormat, K8sContext, K8sContextDto, } from './dtos/K8sContext.dto.js';
37
42
  export type { MetaDto } from './dtos/Meta.dto.js';
@@ -68,7 +73,7 @@ export { SystemAuditEntity, SystemAuditEntityAttribute, } from './enums/SystemAu
68
73
  export { AccountsPermissions } from './permissions/accounts.permissions.js';
69
74
  export { AlertDistributorPermissions } from './permissions/alert-distributor.permissions.js';
70
75
  export { AuditLoggerPermissions } from './permissions/auditlogger.permissions.js';
71
- export { accountsUserFeaturesFromPermissions, consoleUserFeaturesFromPermissions, } from './permissions/combo.js';
76
+ export { accountsUserFeaturesFromPermissions, consoleUserFeaturesFromPermissions, sessionHasPermission, sessionPermissionKeysFor, } from './permissions/combo.js';
72
77
  export { ConsolePermissions } from './permissions/console.permissions.js';
73
78
  export { NotificationPermissions } from './permissions/notification.permissions.js';
74
79
  export type { OnboardConfig } from './permissions/profile.permissions.js';
@@ -90,7 +95,7 @@ export type { ClusterBulkOperationAck, ClusterBulkOperationClusterDto, ClusterBu
90
95
  export type { ClusterModificationConfigDto, ClusterModificationDto, } from './types/ClusterModification.type.js';
91
96
  export { CLUSTER_PLAN_FIELDS, type ClusterPlanFieldSpec, type ClusterPlanFieldTree, isClusterPlanFieldSpec, } from './types/ClusterPlanFields.type.js';
92
97
  export type { ClusterPlanModificationAck, ClusterPlanModificationConfig, ClusterPlanModificationDto, } from './types/ClusterPlanModification.type.js';
93
- export { ClusterPlanTypeAvailabilityClass, sortByAvailabilityClasses, } from './types/ClusterPlanTypeAvailabilityClass.type.js';
98
+ export { ClusterPlanTypeAvailabilityClass, hasNoAvailabilityClass, sortByAvailabilityClasses, } from './types/ClusterPlanTypeAvailabilityClass.type.js';
94
99
  export { ClusterPlanTypeCategory, hasAvailabilityClass, sortByClusterPlanTypeCategory, } from './types/ClusterPlanTypeCategory.type.js';
95
100
  export type { ClusterPlanTypesToConfig } from './types/ClusterPlanTypesToConfig.type.js';
96
101
  export type { ClusterPlanTypesToReserved } from './types/ClusterPlanTypesToReserved.type.js';
@@ -147,7 +152,7 @@ export { deriveSecondaryStorageStatus, type SecondaryStorageStatus, } from './ut
147
152
  export { allSettledResultsCounts, getFulfilledPromises, getRejectedPromises, getSettledSummary, } from './utils/settledPromises.util.js';
148
153
  export { isValidAwsArn, isValidCIDR, isValidCIDRList, isValidClientName, isValidHostname, isValidPrivateLinkRegion, normalizeCIDRList, } from './utils/string-validation.utils.js';
149
154
  export { extractCamundaUserEmail, guessName, isCamundaUserId, } from './utils/user.utils.js';
150
- export { checkVersion, isAppIntegrationsVersionSupported, isGenerationResumable, isSecretsFilterModeConfigurable, stripSecfixPostfix, VersionCheckOperator, } from './utils/versionCheck.utils.js';
155
+ export { checkVersion, generationImageErrorMessage, isAppIntegrationsVersionSupported, isGenerationResumable, isSecretsFilterModeConfigurable, isValidGenerationImage, normalizeGenerationVersion, stripSecfixPostfix, VersionCheckOperator, } from './utils/versionCheck.utils.js';
151
156
  export { default as CAMUNDI_PERMISSION_RULES } from './config/camundi-permission-rules.js';
152
157
  export type { CamundiPermissionRules } from './config/camundi-permission-rules.types.js';
153
158
  export { augmentCamundiPermissions, getApplicableRolesForEmployee, HIBOB_CACHE_KEY, HIBOB_CACHE_NAMESPACE, isManager, } from './utils/camundiPermissionAugmenter.utils.js';