@camunda/ccma-shared-types 3.0.0 → 5.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 (58) hide show
  1. package/dist/_tests/approvals/cluster-bulk-operation.spec.d.ts +1 -0
  2. package/dist/_tests/types/PreprodClusterTtl.type.spec.d.ts +1 -0
  3. package/dist/annotations/policy.d.ts +98 -0
  4. package/dist/annotations/policy.js +61 -0
  5. package/dist/annotations/policy.js.map +7 -0
  6. package/dist/approvals/cluster-bulk-operation.d.ts +196 -0
  7. package/dist/approvals/cluster-bulk-operation.js +127 -0
  8. package/dist/approvals/cluster-bulk-operation.js.map +7 -0
  9. package/dist/approvals/policy.d.ts +45 -5
  10. package/dist/approvals/policy.js +38 -11
  11. package/dist/approvals/policy.js.map +2 -2
  12. package/dist/approvals/use-cases.const.d.ts +7 -0
  13. package/dist/approvals/use-cases.const.js +11 -1
  14. package/dist/approvals/use-cases.const.js.map +2 -2
  15. package/dist/config/camundi-permission-rules.js +24 -3
  16. package/dist/config/camundi-permission-rules.js.map +2 -2
  17. package/dist/constants/misc.const.d.ts +2 -0
  18. package/dist/constants/misc.const.js +4 -0
  19. package/dist/constants/misc.const.js.map +2 -2
  20. package/dist/dtos/Annotation.dto.d.ts +240 -0
  21. package/dist/dtos/Annotation.dto.js +47 -0
  22. package/dist/dtos/Annotation.dto.js.map +7 -0
  23. package/dist/dtos/ApprovalJob.dto.d.ts +152 -2
  24. package/dist/dtos/ApprovalJob.dto.js +22 -0
  25. package/dist/dtos/ApprovalJob.dto.js.map +2 -2
  26. package/dist/dtos/CommonCluster.dto.d.ts +6 -0
  27. package/dist/dtos/ControlV2.dto.d.ts +65 -3
  28. package/dist/dtos/ExternalWebapp.dto.d.ts +12 -0
  29. package/dist/dtos/FeatureFlags.dto.d.ts +6 -0
  30. package/dist/dtos/Hdp.dto.d.ts +153 -0
  31. package/dist/dtos/K8sContext.dto.d.ts +13 -4
  32. package/dist/dtos/SalesPlan.dto.d.ts +25 -1
  33. package/dist/dtos/SalesPlan.dto.js +19 -6
  34. package/dist/dtos/SalesPlan.dto.js.map +2 -2
  35. package/dist/index.d.ts +16 -10
  36. package/dist/index.js +103 -7
  37. package/dist/index.js.map +2 -2
  38. package/dist/permissions/accounts.permissions.d.ts +2 -0
  39. package/dist/permissions/accounts.permissions.js +2 -1
  40. package/dist/permissions/accounts.permissions.js.map +2 -2
  41. package/dist/permissions/combo.js +4 -2
  42. package/dist/permissions/combo.js.map +2 -2
  43. package/dist/permissions/console.permissions.d.ts +32 -0
  44. package/dist/permissions/console.permissions.js +24 -2
  45. package/dist/permissions/console.permissions.js.map +2 -2
  46. package/dist/types/PreprodClusterTtl.type.d.ts +33 -0
  47. package/dist/types/PreprodClusterTtl.type.js +37 -0
  48. package/dist/types/PreprodClusterTtl.type.js.map +7 -0
  49. package/dist/types/Roles.d.ts +1 -1
  50. package/dist/types/Roles.js.map +2 -2
  51. package/dist/types/hdp.types.d.ts +6 -0
  52. package/dist/types/hdp.types.js +3 -1
  53. package/dist/types/hdp.types.js.map +2 -2
  54. package/package.json +1 -1
  55. package/dist/constants/failoverRegionPairs.const.d.ts +0 -36
  56. package/dist/constants/failoverRegionPairs.const.js +0 -34
  57. package/dist/constants/failoverRegionPairs.const.js.map +0 -7
  58. /package/dist/_tests/{constants/failoverRegionPairs.const.spec.d.ts → annotations/policy.spec.d.ts} +0 -0
@@ -51,4 +51,157 @@ export declare namespace Hdp {
51
51
  /** The time of the query, as an ISO instant. */
52
52
  fetchedAt: string;
53
53
  }
54
+ /**
55
+ * A cluster's hosting cost over a trailing window.
56
+ *
57
+ * Both windows end at the anchor day: the latest day that HDP has loaded
58
+ * in the whole cost table, searched over the last `windowDays` days. The
59
+ * cost table loads with a delay, so the anchor is often yesterday, not
60
+ * today. It is today when the table is current. The anchor is table-wide
61
+ * on purpose: it measures the load lag only, and is the same for every
62
+ * cluster. A cluster that stopped costing money does not move its own
63
+ * windows, so its cost shows as a drop. Counting the anchor as day 0,
64
+ * the current window is days `0` through `windowDays - 1` back, and the
65
+ * prior window is days `windowDays` through `2 * windowDays - 1` back.
66
+ * Each window holds exactly `windowDays` days, with no gap and no overlap.
67
+ *
68
+ * `hostingCostUsd` is the loaded cost: the cluster's direct spend plus its
69
+ * share of shared infrastructure. It is what the cluster actually cost, not
70
+ * `raw_cost`, the pre-allocation figure that only reconciles to the cloud
71
+ * bill.
72
+ */
73
+ interface ClusterHostingCost {
74
+ clusterId: string;
75
+ /** The window `hostingCostUsd` covers, in days, ending at the anchor day. */
76
+ windowDays: number;
77
+ hostingCostUsd: number;
78
+ /**
79
+ * The loaded cost of the `windowDays`-day window immediately before this
80
+ * one — days `windowDays` through `2 * windowDays - 1` back from the
81
+ * anchor day (day 0), with no gap and no overlap against the current
82
+ * window. Absent when
83
+ * HDP has no rows there, which is normal for a cluster younger than
84
+ * `windowDays` days: it was not billed yet during the whole prior
85
+ * window. A cluster older than that already has at least a partial
86
+ * prior window, so this field is present (even if small) for any
87
+ * cluster older than `windowDays` days.
88
+ */
89
+ priorHostingCostUsd?: number;
90
+ /**
91
+ * How the current window compares to the prior one: `up`/`down` when the
92
+ * change exceeds a ±5% threshold, `flat` when it is within it. Absent
93
+ * whenever `priorHostingCostUsd` is — a percent change needs a real,
94
+ * non-zero base to compare against, so a cluster with no prior-window
95
+ * data gets no trend rather than a misleading "up" or "down".
96
+ */
97
+ trend?: 'up' | 'down' | 'flat';
98
+ /**
99
+ * The cost-type split (COGS vs R&D) of `hostingCostUsd` over the same
100
+ * window, from the `cost_type` column of the same HDP table. Present
101
+ * only when `control.clusterHostingCostBreakdown` is on for the caller
102
+ * — see `HdpDataHostingCostController.getHostingCost`. Absent rather
103
+ * than computed-then-hidden when the flag is off.
104
+ */
105
+ costTypeBreakdown?: ClusterHostingCostByType;
106
+ /**
107
+ * The allocation-pool split of `hostingCostUsd` over the same window,
108
+ * from the nine `allocated_*` columns of the same HDP table — see
109
+ * {@link ClusterHostingCostAllocation}. Gated by the same flag as
110
+ * `costTypeBreakdown`, and absent for the same reason when it is off.
111
+ */
112
+ allocationBreakdown?: ClusterHostingCostAllocation;
113
+ }
114
+ /**
115
+ * The cost-type split of a `ClusterHostingCost` window. `cost_type`
116
+ * classification is point-in-time against the FinOps mapping sheet, so
117
+ * re-running this query later can classify the same historic day's spend
118
+ * differently.
119
+ *
120
+ * `cogsUsd + rdUsd + otherUsd` reconciles to the window's
121
+ * `hostingCostUsd` to within half a cent. `otherUsd` is not read from
122
+ * the table with its own `cost_type` filter: it is `hostingCostUsd` minus
123
+ * the other two, rounded to the cent. Only `otherUsd` is rounded;
124
+ * `hostingCostUsd`, `cogsUsd` and `rdUsd` keep the full precision of the
125
+ * table, so a sum can differ from the total by that rounding. A `cost_type` value
126
+ * this split does not know about (a third category, or none at all)
127
+ * still lands somewhere visible instead of vanishing from the total. A
128
+ * negative `otherUsd` is possible in principle (`cogsUsd + rdUsd`
129
+ * exceeding `hostingCostUsd`) and is left visible rather than clamped to
130
+ * 0, because it would mean the two named sums are wrong, not that the
131
+ * remainder is — clamping would hide exactly the bug a Camundi most
132
+ * needs to see.
133
+ */
134
+ interface ClusterHostingCostByType {
135
+ /** Cost of Goods Sold: the loaded cost classified as `cost_type = 'COGS'`. */
136
+ cogsUsd: number;
137
+ /** Research & Development: the loaded cost classified as `cost_type = 'R&D'`. */
138
+ rdUsd: number;
139
+ /** The window's cost that `cogsUsd` and `rdUsd` do not account for. */
140
+ otherUsd: number;
141
+ }
142
+ /**
143
+ * The allocation-pool split of a `ClusterHostingCost` window: up to nine
144
+ * `allocated_*` columns of the same HDP table, each summed over the
145
+ * window the same way `hostingCostUsd` is. On a `direct`/`nonprod_direct`
146
+ * row, each pool is the dollar share of `loaded_cost` that one allocation
147
+ * reason contributes.
148
+ *
149
+ * Every field is optional and present only when nonzero for the window:
150
+ * a cluster rarely has all nine populated (most report a nonzero value in
151
+ * only one or two), and a $0 line for the rest would be noise rather than
152
+ * signal. `HdpDataHostingCostController.getHostingCost` filters the zero
153
+ * ones out before returning, and leaves `allocationBreakdown` itself
154
+ * absent when none of the nine are nonzero.
155
+ *
156
+ * These fields do NOT have to sum to `hostingCostUsd`, or to
157
+ * `hostingCostUsd` minus `costTypeBreakdown`'s fields: `toolingLicenseUsd`
158
+ * adds a cost (SaaS vendor tooling) rather than reallocating an existing
159
+ * one, so the pools present can sum past the window's total. Read each
160
+ * field as its own dollar amount, not as a share of a reconciling whole.
161
+ */
162
+ interface ClusterHostingCostAllocation {
163
+ /** Share of shared infra namespaces inside the same client project. */
164
+ infraNamespaceUsd?: number;
165
+ /** Share of idle purchased GKE capacity. */
166
+ gkeUnallocatedUsd?: number;
167
+ /** Share of GKE system overhead (kubelet, kube-proxy, containerd). */
168
+ gkeSystemOverheadUsd?: number;
169
+ /** Share of spend-based CUDs that GKE cannot attribute to a namespace. */
170
+ gkeUnsupportedSkuUsd?: number;
171
+ /** Share of SKUs that GKE has not yet processed. */
172
+ gkeUnknownUsd?: number;
173
+ /** Share of `saas_prod` support projects. Paid clusters only. */
174
+ saasProdSupportUsd?: number;
175
+ /** Share of the account that serves both cloud estates. Paid clusters only. */
176
+ awsGcpSharedUsd?: number;
177
+ /** Share of SaaS vendor tooling (Tsuga, Cloudflare, DoiT, Terraform). Adds cost; does not reallocate it. */
178
+ toolingLicenseUsd?: number;
179
+ /** Share of shared cost inside the same `saas_non_prod` project. */
180
+ nonprodSharedUsd?: number;
181
+ }
182
+ /** The loaded cost of one cluster over the fleet cost window. */
183
+ interface FleetHostingCostRow {
184
+ clusterId: string;
185
+ hostingCostUsd: number;
186
+ }
187
+ /**
188
+ * The loaded hosting cost of every cluster that HDP holds inside the
189
+ * window, for the whole fleet. Each row is the same number as
190
+ * `ClusterHostingCost.hostingCostUsd` gives for that cluster: same table,
191
+ * same `loaded_cost` column, same window that ends at the table-wide anchor
192
+ * day.
193
+ *
194
+ * HDP keeps the rows of clusters that no longer exist, thus the reader
195
+ * matches these rows against its own cluster list. A cluster with no row
196
+ * has no cost data in the window. That is not a cost of 0.
197
+ */
198
+ interface FleetHostingCost {
199
+ rows: FleetHostingCostRow[];
200
+ /** The window that `rows` covers, in days, ending at `anchorDay`. */
201
+ windowDays: number;
202
+ /** The last day of the window, as `YYYY-MM-DD`. Absent when the table has no recent row. */
203
+ anchorDay?: string;
204
+ /** The time of the read, as an ISO instant. */
205
+ fetchedAt: string;
206
+ }
54
207
  }
@@ -26,10 +26,19 @@ export interface K8sBackupConfig {
26
26
  */
27
27
  hidden?: boolean;
28
28
  /**
29
- * Set by SREs in console-admin.yaml.
30
- * True when the operator supports failover for this pairing.
31
- * For example, some GCP pairings do not get `cloneRoleId`, so a failover request fails.
32
- * This flag is informational. It does not affect `isSupportedFailoverRegionPair`.
29
+ * Set by SREs in console-admin.yaml. True when the operator supports
30
+ * failover for this pairing. For example, some GCP pairings do not get
31
+ * `cloneRoleId`, so a failover request fails.
32
+ *
33
+ * This flag is the only source for which pairings can fail over. The
34
+ * console-backend guard, the secret-replication helper, and the c4 failover
35
+ * action all read it. Each stage mounts its own console-admin.yaml, so the
36
+ * flag needs no stage branch.
37
+ *
38
+ * The flag is directional. SREs must set it on BOTH contexts of a pairing.
39
+ * The failover cluster takes the reverse pairing, thus the controller
40
+ * refuses a request when that pairing does not have the flag. If it did
41
+ * not, the new cluster could never fail back.
33
42
  */
34
43
  failover?: boolean;
35
44
  }
@@ -64,6 +64,16 @@ export interface Limits extends ClusterLimits {
64
64
  * Users who also hold Member, Admin, Owner, or Operations Engineer are unaffected.
65
65
  */
66
66
  developerNoClusterCreate?: boolean;
67
+ /**
68
+ * On dev and int only: the nightly delete cron deletes every cluster of the
69
+ * org that is older than this number of hours. It asks nobody. Because the
70
+ * cron runs once a day, a cluster can live up to 24 hours longer. We set it
71
+ * on our own test orgs, because a paused cluster keeps its disks and costs
72
+ * money. A sales plan can hold it too: an org copies the limits of its plan
73
+ * when it gets the plan, thus every later org of that plan gets it. An
74
+ * editor on prod does not offer it.
75
+ */
76
+ preprodClusterTtlHours?: number;
67
77
  }
68
78
  export declare const RETENTION_LIMIT_MINIMUM: {
69
79
  operate: number;
@@ -105,6 +115,8 @@ export declare function allSalesPlanLimits(): {
105
115
  description: string;
106
116
  isClusterBasedLimit: boolean;
107
117
  validate?: (input: number) => boolean;
118
+ /** An editor on prod does not offer the limit, because only dev and int act on it. */
119
+ preprodOnly?: boolean;
108
120
  }[];
109
121
  export declare function unusedClusterBasedLimits(limits: ClusterLimits): {
110
122
  key: string;
@@ -112,7 +124,19 @@ export declare function unusedClusterBasedLimits(limits: ClusterLimits): {
112
124
  description: string;
113
125
  isClusterBasedLimit: boolean;
114
126
  }[];
115
- export declare function unusedSalesPlanLimits(limits: Limits): {
127
+ /**
128
+ * Returns whether an editor on the stage offers the limit. A `preprodOnly`
129
+ * limit is offered only on dev and int. Every other limit is offered on
130
+ * every stage.
131
+ */
132
+ export declare function isLimitOfferedOnStage(limit: {
133
+ preprodOnly?: boolean;
134
+ }, stage: string): boolean;
135
+ /**
136
+ * Returns the limits that `limits` does not set yet. With a `stage`, it also
137
+ * leaves out the limits that the stage does not offer.
138
+ */
139
+ export declare function unusedSalesPlanLimits(limits: Limits, stage?: string): {
116
140
  key: string;
117
141
  type: 'number' | 'boolean' | 'string';
118
142
  description: string;
@@ -1,3 +1,4 @@
1
+ import { isPreprodClusterTtlStage } from "../types/PreprodClusterTtl.type.js";
1
2
  const RETENTION_LIMIT_MINIMUM = {
2
3
  operate: 5,
3
4
  tasklist: 5,
@@ -31,28 +32,28 @@ function allClusterBasedLimits() {
31
32
  type: "number",
32
33
  isClusterBasedLimit: true,
33
34
  description: `Data retention in days for Operate. default = ${RETENTION_LIMIT_DEFAULT.operate}days. Min = ${RETENTION_LIMIT_MINIMUM.operate}days, Max = ${RETENTION_LIMIT_MAXIMUM.operate}days.`,
34
- validate: (input) => input >= RETENTION_LIMIT_MINIMUM.operate && input <= RETENTION_LIMIT_MAXIMUM.operate
35
+ validate: (input) => Number.isInteger(input) && input >= RETENTION_LIMIT_MINIMUM.operate && input <= RETENTION_LIMIT_MAXIMUM.operate
35
36
  },
36
37
  {
37
38
  key: "dataRetentionTasklist",
38
39
  type: "number",
39
40
  isClusterBasedLimit: true,
40
41
  description: `Data retention in days for Tasklist. default = ${RETENTION_LIMIT_DEFAULT.tasklist}days. Min = ${RETENTION_LIMIT_MINIMUM.tasklist}days, Max = ${RETENTION_LIMIT_MAXIMUM.tasklist}days.`,
41
- validate: (input) => input >= RETENTION_LIMIT_MINIMUM.tasklist && input <= RETENTION_LIMIT_MAXIMUM.tasklist
42
+ validate: (input) => Number.isInteger(input) && input >= RETENTION_LIMIT_MINIMUM.tasklist && input <= RETENTION_LIMIT_MAXIMUM.tasklist
42
43
  },
43
44
  {
44
45
  key: "dataRetentionOptimize",
45
46
  type: "number",
46
47
  isClusterBasedLimit: true,
47
48
  description: `Data retention in days for Optimize. default = ${RETENTION_LIMIT_DEFAULT.optimize}days. Min = ${RETENTION_LIMIT_MINIMUM.optimize}days, Max = ${RETENTION_LIMIT_MAXIMUM.optimize}days.`,
48
- validate: (input) => input >= RETENTION_LIMIT_MINIMUM.optimize && input <= RETENTION_LIMIT_MAXIMUM.optimize
49
+ validate: (input) => Number.isInteger(input) && input >= RETENTION_LIMIT_MINIMUM.optimize && input <= RETENTION_LIMIT_MAXIMUM.optimize
49
50
  },
50
51
  {
51
52
  key: "unifiedDataRetention",
52
53
  type: "number",
53
54
  isClusterBasedLimit: true,
54
55
  description: `Unified data retention in days for Zeebe broker. default = ${RETENTION_LIMIT_DEFAULT.unified}days. Min = ${RETENTION_LIMIT_MINIMUM.unified}days, Max = ${RETENTION_LIMIT_MAXIMUM.unified}days.`,
55
- validate: (input) => input >= RETENTION_LIMIT_MINIMUM.unified && input <= RETENTION_LIMIT_MAXIMUM.unified
56
+ validate: (input) => Number.isInteger(input) && input >= RETENTION_LIMIT_MINIMUM.unified && input <= RETENTION_LIMIT_MAXIMUM.unified
56
57
  }
57
58
  ];
58
59
  }
@@ -152,6 +153,14 @@ function allSalesPlanLimits() {
152
153
  description: "when enabled, users with only the Developer role cannot create clusters in this org. Admins, Owners, Members, and Operations Engineers are unaffected.",
153
154
  isClusterBasedLimit: false
154
155
  },
156
+ {
157
+ key: "preprodClusterTtlHours",
158
+ type: "number",
159
+ description: "dev and int only: the nightly delete cron deletes every cluster of this org that is older than N hours, with no confirmation. On a sales plan, every org that gets the plan later gets the limit too. For our own test orgs. default = not active",
160
+ isClusterBasedLimit: false,
161
+ validate: (input) => Number.isInteger(input) && input >= 1,
162
+ preprodOnly: true
163
+ },
155
164
  ...allClusterBasedLimits()
156
165
  ];
157
166
  }
@@ -160,9 +169,12 @@ function unusedClusterBasedLimits(limits) {
160
169
  (current) => !(Object.keys(limits).includes(current.key) && limits[current.key] !== null)
161
170
  );
162
171
  }
163
- function unusedSalesPlanLimits(limits) {
172
+ function isLimitOfferedOnStage(limit, stage) {
173
+ return !limit.preprodOnly || isPreprodClusterTtlStage(stage);
174
+ }
175
+ function unusedSalesPlanLimits(limits, stage) {
164
176
  return allSalesPlanLimits().filter(
165
- (current) => !(Object.keys(limits).includes(current.key) && limits[current.key] !== null)
177
+ (current) => !(Object.keys(limits).includes(current.key) && limits[current.key] !== null) && (stage === void 0 || isLimitOfferedOnStage(current, stage))
166
178
  );
167
179
  }
168
180
  export {
@@ -174,6 +186,7 @@ export {
174
186
  allClusterBasedLimits,
175
187
  allSalesPlanLimits,
176
188
  deprecatedLimit,
189
+ isLimitOfferedOnStage,
177
190
  unusedClusterBasedLimits,
178
191
  unusedSalesPlanLimits
179
192
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/dtos/SalesPlan.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 { ClusterPlanTypesToConfig } from '../types/ClusterPlanTypesToConfig.type.js'\n\nexport interface SalesPlanDto {\n uuid?: string\n name: string\n salesPlanType?: string\n internal?: boolean\n clusterPlanTypesToConfig: ClusterPlanTypesToConfig\n metadata?: SalesPlanMetadata\n version: number\n orgs?: number\n}\n\nexport interface ConsumptionDataItem {\n type: string\n data: string\n itemPriceId: string\n}\n\nexport interface SalesPlanMetadata {\n description: string\n limits?: Limits\n}\n\nexport interface ClusterLimits {\n dataRetentionOperate?: number\n dataRetentionTasklist?: number\n dataRetentionOptimize?: number\n unifiedDataRetention?: number\n}\n\nexport interface Limits extends ClusterLimits {\n maxMembers?: number\n hotBackup?: boolean\n /**\n * Overrides the operator's default retained count (3) for manual (on-demand)\n * hot backups (ZeebeCluster spec.backup.retainedCount).\n */\n hotBackupManualRetainedCount?: number\n /**\n * Overrides the operator's default retained count (3) for scheduled hot\n * backups (BackupSchedule spec.successfulBackupsHistoryLimit /\n * failedBackupsHistoryLimit).\n */\n hotBackupScheduledRetainedCount?: number\n ipWhiteList?: boolean\n secureConnectivity?: boolean\n failover?: boolean\n allowedHostnamesForInvites?: string\n regionWhiteList?: string\n suppressDropDisks?: boolean\n legacyStreams?: boolean\n ignoreGracePeriod?: boolean\n /**\n * Maximum number of clients allowed per cluster.\n * Overrides the stage-based default (MAX_CLUSTER_CLIENTS_DEV on dev,\n * MAX_CLUSTER_CLIENTS_DEFAULT on int/prod).\n */\n maxClusterClients?: number\n /**\n * Comma-separated list of generation UUIDs that are unlocked for this org.\n * These generations will be available for cluster creation even if they\n * are not part of a channel's allowed generations. They are attached to\n * the Stable channel with classification 'orgUnlocked'.\n */\n generationWhiteList?: string\n /**\n * When true, users with only the Developer role cannot create clusters in this org.\n * Users who also hold Member, Admin, Owner, or Operations Engineer are unaffected.\n */\n developerNoClusterCreate?: boolean\n}\n\nexport const RETENTION_LIMIT_MINIMUM = {\n operate: 5,\n tasklist: 5,\n optimize: 5,\n unified: 5,\n}\nexport const RETENTION_LIMIT_MAXIMUM = {\n operate: 365,\n tasklist: 90,\n optimize: 720,\n unified: 365,\n}\nexport const RETENTION_LIMIT_DEFAULT = {\n operate: 30,\n tasklist: 30,\n optimize: 180,\n unified: 30,\n}\n\n/**\n * Default maximum number of clients per cluster on development stage.\n */\nexport const MAX_CLUSTER_CLIENTS_DEV = 10\n\n/**\n * Default maximum number of clients per cluster on integration and production stages.\n */\nexport const MAX_CLUSTER_CLIENTS_DEFAULT = 200\n\nexport function deprecatedLimit(key: string): string | undefined {\n if (['dataRetentionOperate', 'dataRetentionTasklist'].includes(key)) {\n return 'unifiedDataRetention'\n }\n return undefined\n}\n\nexport function allClusterBasedLimits(): {\n key: string\n type: 'number' | 'boolean' | 'string'\n description: string\n isClusterBasedLimit: boolean\n validate?: (input: number) => boolean\n}[] {\n return [\n {\n key: 'dataRetentionOperate',\n type: 'number',\n isClusterBasedLimit: true,\n description: `Data retention in days for Operate. default = ${RETENTION_LIMIT_DEFAULT.operate}days. Min = ${RETENTION_LIMIT_MINIMUM.operate}days, Max = ${RETENTION_LIMIT_MAXIMUM.operate}days.`,\n validate: (input) =>\n input >= RETENTION_LIMIT_MINIMUM.operate &&\n input <= RETENTION_LIMIT_MAXIMUM.operate,\n },\n {\n key: 'dataRetentionTasklist',\n type: 'number',\n isClusterBasedLimit: true,\n description: `Data retention in days for Tasklist. default = ${RETENTION_LIMIT_DEFAULT.tasklist}days. Min = ${RETENTION_LIMIT_MINIMUM.tasklist}days, Max = ${RETENTION_LIMIT_MAXIMUM.tasklist}days.`,\n validate: (input) =>\n input >= RETENTION_LIMIT_MINIMUM.tasklist &&\n input <= RETENTION_LIMIT_MAXIMUM.tasklist,\n },\n {\n key: 'dataRetentionOptimize',\n type: 'number',\n isClusterBasedLimit: true,\n description: `Data retention in days for Optimize. default = ${RETENTION_LIMIT_DEFAULT.optimize}days. Min = ${RETENTION_LIMIT_MINIMUM.optimize}days, Max = ${RETENTION_LIMIT_MAXIMUM.optimize}days.`,\n validate: (input) =>\n input >= RETENTION_LIMIT_MINIMUM.optimize &&\n input <= RETENTION_LIMIT_MAXIMUM.optimize,\n },\n {\n key: 'unifiedDataRetention',\n type: 'number',\n isClusterBasedLimit: true,\n description: `Unified data retention in days for Zeebe broker. default = ${RETENTION_LIMIT_DEFAULT.unified}days. Min = ${RETENTION_LIMIT_MINIMUM.unified}days, Max = ${RETENTION_LIMIT_MAXIMUM.unified}days.`,\n validate: (input) =>\n input >= RETENTION_LIMIT_MINIMUM.unified &&\n input <= RETENTION_LIMIT_MAXIMUM.unified,\n },\n ]\n}\n\nexport function allSalesPlanLimits(): {\n key: string\n type: 'number' | 'boolean' | 'string'\n description: string\n isClusterBasedLimit: boolean\n validate?: (input: number) => boolean\n}[] {\n return [\n {\n key: 'maxMembers',\n type: 'number',\n description:\n 'used to limit the amount of collaborators within one organization. default = no limit',\n isClusterBasedLimit: false,\n validate: (input) => Number.isInteger(input) && input >= 0,\n },\n {\n key: 'hotBackup',\n type: 'boolean',\n description:\n 'used to activate the hot backup functionality in organizations. default = not active',\n isClusterBasedLimit: false,\n },\n {\n key: 'hotBackupManualRetainedCount',\n type: 'number',\n description:\n 'overrides how many manual (on-demand) hot backups the operator retains before deleting the oldest. default = 3',\n isClusterBasedLimit: false,\n validate: (input) => Number.isInteger(input) && input >= 1,\n },\n {\n key: 'hotBackupScheduledRetainedCount',\n type: 'number',\n description:\n 'overrides how many scheduled hot backups the operator retains before deleting the oldest. default = 3',\n isClusterBasedLimit: false,\n validate: (input) => Number.isInteger(input) && input >= 1,\n },\n {\n key: 'ipWhiteList',\n type: 'boolean',\n description:\n 'used to activate the ipWhitelist feature in console. default = not active',\n isClusterBasedLimit: false,\n },\n {\n key: 'secureConnectivity',\n type: 'boolean',\n description:\n 'used to activate the secure connectivity feature in console. default = not active',\n isClusterBasedLimit: false,\n },\n {\n key: 'failover',\n type: 'boolean',\n description:\n 'used to activate the failover functionality for multi-region clusters. default = not active',\n isClusterBasedLimit: false,\n },\n {\n key: 'allowedHostnamesForInvites',\n type: 'string',\n description:\n 'allowed hostnames for invites - comma separated, default: every hostname is allowed',\n isClusterBasedLimit: false,\n },\n {\n key: 'regionWhiteList',\n type: 'string',\n description:\n 'allowed regions - comma separated, default: every region is allowed',\n isClusterBasedLimit: false,\n },\n {\n key: 'suppressDropDisks',\n type: 'boolean',\n description:\n 'used to not drop disks of sleeping clusters. default = not suppressed',\n isClusterBasedLimit: false,\n },\n {\n key: 'legacyStreams',\n type: 'boolean',\n description:\n 'used to allow organizations to use legacy minor streams (e.g. 8.5, 8.6) for cluster creation. default = not allowed',\n isClusterBasedLimit: false,\n },\n {\n key: 'ignoreGracePeriod',\n type: 'boolean',\n description:\n 'used to bypass the 24h grace period on cluster upgrades after a minor version bump. default = not active (grace period enforced)',\n isClusterBasedLimit: false,\n },\n {\n key: 'maxClusterClients',\n type: 'number',\n description: `maximum number of clients per cluster. default = ${MAX_CLUSTER_CLIENTS_DEFAULT} (${MAX_CLUSTER_CLIENTS_DEV} on dev). Can be overridden per org for special customers (e.g. OEM).`,\n isClusterBasedLimit: false,\n validate: (input) => Number.isInteger(input) && input >= 1,\n },\n {\n key: 'generationWhiteList',\n type: 'string',\n description:\n 'unlocked generation UUIDs - comma separated. These generations will be available for cluster creation regardless of channel membership. Attached to the Stable channel.',\n isClusterBasedLimit: false,\n },\n {\n key: 'developerNoClusterCreate',\n type: 'boolean',\n description:\n 'when enabled, users with only the Developer role cannot create clusters in this org. Admins, Owners, Members, and Operations Engineers are unaffected.',\n isClusterBasedLimit: false,\n },\n ...allClusterBasedLimits(),\n ]\n}\n\nexport function unusedClusterBasedLimits(limits: ClusterLimits): {\n key: string\n type: 'number' | 'boolean' | 'string'\n description: string\n isClusterBasedLimit: boolean\n}[] {\n return allClusterBasedLimits().filter(\n (current) =>\n !(\n Object.keys(limits).includes(current.key) &&\n (limits as Record<string, unknown>)[current.key] !== null\n ),\n )\n}\n\nexport function unusedSalesPlanLimits(limits: Limits): {\n key: string\n type: 'number' | 'boolean' | 'string'\n description: string\n isClusterBasedLimit: boolean\n}[] {\n return allSalesPlanLimits().filter(\n (current) =>\n !(\n Object.keys(limits).includes(current.key) &&\n (limits as Record<string, unknown>)[current.key] !== null\n ),\n )\n}\n"],
5
- "mappings": "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",
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 { ClusterPlanTypesToConfig } from '../types/ClusterPlanTypesToConfig.type.js'\nimport { isPreprodClusterTtlStage } from '../types/PreprodClusterTtl.type.js'\n\nexport interface SalesPlanDto {\n uuid?: string\n name: string\n salesPlanType?: string\n internal?: boolean\n clusterPlanTypesToConfig: ClusterPlanTypesToConfig\n metadata?: SalesPlanMetadata\n version: number\n orgs?: number\n}\n\nexport interface ConsumptionDataItem {\n type: string\n data: string\n itemPriceId: string\n}\n\nexport interface SalesPlanMetadata {\n description: string\n limits?: Limits\n}\n\nexport interface ClusterLimits {\n dataRetentionOperate?: number\n dataRetentionTasklist?: number\n dataRetentionOptimize?: number\n unifiedDataRetention?: number\n}\n\nexport interface Limits extends ClusterLimits {\n maxMembers?: number\n hotBackup?: boolean\n /**\n * Overrides the operator's default retained count (3) for manual (on-demand)\n * hot backups (ZeebeCluster spec.backup.retainedCount).\n */\n hotBackupManualRetainedCount?: number\n /**\n * Overrides the operator's default retained count (3) for scheduled hot\n * backups (BackupSchedule spec.successfulBackupsHistoryLimit /\n * failedBackupsHistoryLimit).\n */\n hotBackupScheduledRetainedCount?: number\n ipWhiteList?: boolean\n secureConnectivity?: boolean\n failover?: boolean\n allowedHostnamesForInvites?: string\n regionWhiteList?: string\n suppressDropDisks?: boolean\n legacyStreams?: boolean\n ignoreGracePeriod?: boolean\n /**\n * Maximum number of clients allowed per cluster.\n * Overrides the stage-based default (MAX_CLUSTER_CLIENTS_DEV on dev,\n * MAX_CLUSTER_CLIENTS_DEFAULT on int/prod).\n */\n maxClusterClients?: number\n /**\n * Comma-separated list of generation UUIDs that are unlocked for this org.\n * These generations will be available for cluster creation even if they\n * are not part of a channel's allowed generations. They are attached to\n * the Stable channel with classification 'orgUnlocked'.\n */\n generationWhiteList?: string\n /**\n * When true, users with only the Developer role cannot create clusters in this org.\n * Users who also hold Member, Admin, Owner, or Operations Engineer are unaffected.\n */\n developerNoClusterCreate?: boolean\n /**\n * On dev and int only: the nightly delete cron deletes every cluster of the\n * org that is older than this number of hours. It asks nobody. Because the\n * cron runs once a day, a cluster can live up to 24 hours longer. We set it\n * on our own test orgs, because a paused cluster keeps its disks and costs\n * money. A sales plan can hold it too: an org copies the limits of its plan\n * when it gets the plan, thus every later org of that plan gets it. An\n * editor on prod does not offer it.\n */\n preprodClusterTtlHours?: number\n}\n\nexport const RETENTION_LIMIT_MINIMUM = {\n operate: 5,\n tasklist: 5,\n optimize: 5,\n unified: 5,\n}\nexport const RETENTION_LIMIT_MAXIMUM = {\n operate: 365,\n tasklist: 90,\n optimize: 720,\n unified: 365,\n}\nexport const RETENTION_LIMIT_DEFAULT = {\n operate: 30,\n tasklist: 30,\n optimize: 180,\n unified: 30,\n}\n\n/**\n * Default maximum number of clients per cluster on development stage.\n */\nexport const MAX_CLUSTER_CLIENTS_DEV = 10\n\n/**\n * Default maximum number of clients per cluster on integration and production stages.\n */\nexport const MAX_CLUSTER_CLIENTS_DEFAULT = 200\n\nexport function deprecatedLimit(key: string): string | undefined {\n if (['dataRetentionOperate', 'dataRetentionTasklist'].includes(key)) {\n return 'unifiedDataRetention'\n }\n return undefined\n}\n\nexport function allClusterBasedLimits(): {\n key: string\n type: 'number' | 'boolean' | 'string'\n description: string\n isClusterBasedLimit: boolean\n validate?: (input: number) => boolean\n}[] {\n return [\n {\n key: 'dataRetentionOperate',\n type: 'number',\n isClusterBasedLimit: true,\n description: `Data retention in days for Operate. default = ${RETENTION_LIMIT_DEFAULT.operate}days. Min = ${RETENTION_LIMIT_MINIMUM.operate}days, Max = ${RETENTION_LIMIT_MAXIMUM.operate}days.`,\n validate: (input) =>\n Number.isInteger(input) &&\n input >= RETENTION_LIMIT_MINIMUM.operate &&\n input <= RETENTION_LIMIT_MAXIMUM.operate,\n },\n {\n key: 'dataRetentionTasklist',\n type: 'number',\n isClusterBasedLimit: true,\n description: `Data retention in days for Tasklist. default = ${RETENTION_LIMIT_DEFAULT.tasklist}days. Min = ${RETENTION_LIMIT_MINIMUM.tasklist}days, Max = ${RETENTION_LIMIT_MAXIMUM.tasklist}days.`,\n validate: (input) =>\n Number.isInteger(input) &&\n input >= RETENTION_LIMIT_MINIMUM.tasklist &&\n input <= RETENTION_LIMIT_MAXIMUM.tasklist,\n },\n {\n key: 'dataRetentionOptimize',\n type: 'number',\n isClusterBasedLimit: true,\n description: `Data retention in days for Optimize. default = ${RETENTION_LIMIT_DEFAULT.optimize}days. Min = ${RETENTION_LIMIT_MINIMUM.optimize}days, Max = ${RETENTION_LIMIT_MAXIMUM.optimize}days.`,\n validate: (input) =>\n Number.isInteger(input) &&\n input >= RETENTION_LIMIT_MINIMUM.optimize &&\n input <= RETENTION_LIMIT_MAXIMUM.optimize,\n },\n {\n key: 'unifiedDataRetention',\n type: 'number',\n isClusterBasedLimit: true,\n description: `Unified data retention in days for Zeebe broker. default = ${RETENTION_LIMIT_DEFAULT.unified}days. Min = ${RETENTION_LIMIT_MINIMUM.unified}days, Max = ${RETENTION_LIMIT_MAXIMUM.unified}days.`,\n validate: (input) =>\n Number.isInteger(input) &&\n input >= RETENTION_LIMIT_MINIMUM.unified &&\n input <= RETENTION_LIMIT_MAXIMUM.unified,\n },\n ]\n}\n\nexport function allSalesPlanLimits(): {\n key: string\n type: 'number' | 'boolean' | 'string'\n description: string\n isClusterBasedLimit: boolean\n validate?: (input: number) => boolean\n /** An editor on prod does not offer the limit, because only dev and int act on it. */\n preprodOnly?: boolean\n}[] {\n return [\n {\n key: 'maxMembers',\n type: 'number',\n description:\n 'used to limit the amount of collaborators within one organization. default = no limit',\n isClusterBasedLimit: false,\n validate: (input) => Number.isInteger(input) && input >= 0,\n },\n {\n key: 'hotBackup',\n type: 'boolean',\n description:\n 'used to activate the hot backup functionality in organizations. default = not active',\n isClusterBasedLimit: false,\n },\n {\n key: 'hotBackupManualRetainedCount',\n type: 'number',\n description:\n 'overrides how many manual (on-demand) hot backups the operator retains before deleting the oldest. default = 3',\n isClusterBasedLimit: false,\n validate: (input) => Number.isInteger(input) && input >= 1,\n },\n {\n key: 'hotBackupScheduledRetainedCount',\n type: 'number',\n description:\n 'overrides how many scheduled hot backups the operator retains before deleting the oldest. default = 3',\n isClusterBasedLimit: false,\n validate: (input) => Number.isInteger(input) && input >= 1,\n },\n {\n key: 'ipWhiteList',\n type: 'boolean',\n description:\n 'used to activate the ipWhitelist feature in console. default = not active',\n isClusterBasedLimit: false,\n },\n {\n key: 'secureConnectivity',\n type: 'boolean',\n description:\n 'used to activate the secure connectivity feature in console. default = not active',\n isClusterBasedLimit: false,\n },\n {\n key: 'failover',\n type: 'boolean',\n description:\n 'used to activate the failover functionality for multi-region clusters. default = not active',\n isClusterBasedLimit: false,\n },\n {\n key: 'allowedHostnamesForInvites',\n type: 'string',\n description:\n 'allowed hostnames for invites - comma separated, default: every hostname is allowed',\n isClusterBasedLimit: false,\n },\n {\n key: 'regionWhiteList',\n type: 'string',\n description:\n 'allowed regions - comma separated, default: every region is allowed',\n isClusterBasedLimit: false,\n },\n {\n key: 'suppressDropDisks',\n type: 'boolean',\n description:\n 'used to not drop disks of sleeping clusters. default = not suppressed',\n isClusterBasedLimit: false,\n },\n {\n key: 'legacyStreams',\n type: 'boolean',\n description:\n 'used to allow organizations to use legacy minor streams (e.g. 8.5, 8.6) for cluster creation. default = not allowed',\n isClusterBasedLimit: false,\n },\n {\n key: 'ignoreGracePeriod',\n type: 'boolean',\n description:\n 'used to bypass the 24h grace period on cluster upgrades after a minor version bump. default = not active (grace period enforced)',\n isClusterBasedLimit: false,\n },\n {\n key: 'maxClusterClients',\n type: 'number',\n description: `maximum number of clients per cluster. default = ${MAX_CLUSTER_CLIENTS_DEFAULT} (${MAX_CLUSTER_CLIENTS_DEV} on dev). Can be overridden per org for special customers (e.g. OEM).`,\n isClusterBasedLimit: false,\n validate: (input) => Number.isInteger(input) && input >= 1,\n },\n {\n key: 'generationWhiteList',\n type: 'string',\n description:\n 'unlocked generation UUIDs - comma separated. These generations will be available for cluster creation regardless of channel membership. Attached to the Stable channel.',\n isClusterBasedLimit: false,\n },\n {\n key: 'developerNoClusterCreate',\n type: 'boolean',\n description:\n 'when enabled, users with only the Developer role cannot create clusters in this org. Admins, Owners, Members, and Operations Engineers are unaffected.',\n isClusterBasedLimit: false,\n },\n {\n key: 'preprodClusterTtlHours',\n type: 'number',\n description:\n 'dev and int only: the nightly delete cron deletes every cluster of this org that is older than N hours, with no confirmation. On a sales plan, every org that gets the plan later gets the limit too. For our own test orgs. default = not active',\n isClusterBasedLimit: false,\n validate: (input) => Number.isInteger(input) && input >= 1,\n preprodOnly: true,\n },\n ...allClusterBasedLimits(),\n ]\n}\n\nexport function unusedClusterBasedLimits(limits: ClusterLimits): {\n key: string\n type: 'number' | 'boolean' | 'string'\n description: string\n isClusterBasedLimit: boolean\n}[] {\n return allClusterBasedLimits().filter(\n (current) =>\n !(\n Object.keys(limits).includes(current.key) &&\n (limits as Record<string, unknown>)[current.key] !== null\n ),\n )\n}\n\n/**\n * Returns whether an editor on the stage offers the limit. A `preprodOnly`\n * limit is offered only on dev and int. Every other limit is offered on\n * every stage.\n */\nexport function isLimitOfferedOnStage(\n limit: { preprodOnly?: boolean },\n stage: string,\n): boolean {\n return !limit.preprodOnly || isPreprodClusterTtlStage(stage)\n}\n\n/**\n * Returns the limits that `limits` does not set yet. With a `stage`, it also\n * leaves out the limits that the stage does not offer.\n */\nexport function unusedSalesPlanLimits(\n limits: Limits,\n stage?: string,\n): {\n key: string\n type: 'number' | 'boolean' | 'string'\n description: string\n isClusterBasedLimit: boolean\n}[] {\n return allSalesPlanLimits().filter(\n (current) =>\n !(\n Object.keys(limits).includes(current.key) &&\n (limits as Record<string, unknown>)[current.key] !== null\n ) &&\n (stage === undefined || isLimitOfferedOnStage(current, stage)),\n )\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
package/dist/index.d.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  export { DAY, HOUR, MINUTE, SECOND, WEEK } from './constants/duration.const.js';
2
- export { isSupportedFailoverRegionPair, SUPPORTED_FAILOVER_REGION_PAIRS, } from './constants/failoverRegionPairs.const.js';
3
2
  export type { Stage } from './constants/misc.const.js';
4
3
  export { CAMUNDA_CLAIMS_NAMESPACE, CONSOLE_API_USER_ID, FIRSTNAME_LASTNAME_MAX_LENGTH, HOTBACKUP_MIN_CREATE_PERIOD, MAX_HARDWARE_PACKAGE_COUNT, MAX_LENGTH_CLUSTER_NAME, MINIMUM_EYEPAIRS, NAMES_OF_ENTERPRISE_SALESPLANS_WITH_SLEEPING_CLUSTERS, SECRETS_MAX_LENGTH, STARTING_PRICE_PER_MONTH_IN_EURO, TEMPORARY_CLUSTER_NAME, UNKNOWN_ACTOR_EMAIL, } from './constants/misc.const.js';
5
4
  export { getGatewayPropertyHint, getGatewayPropertyPath, isAffectedByStreamlinedDeployment, isPre89AffectedPath, PRE89_AFFECTED_PATHS, PRE89_AFFECTED_PROPERTY_PREFIXES, PRE89_GATEWAY_PROPERTY_PATHS, PRE89_GATEWAY_RESOURCE_PREFIXES, } from './constants/pre89EnvVarMapping.const.js';
@@ -9,14 +8,20 @@ export type { TrialExtensionSurveyAnswer, TrialExtensionSurveyQuestion, } from '
9
8
  export { TRIAL_EXTENSION_SURVEY_QUESTIONS } from './constants/trialExtensionSurvey.const.js';
10
9
  export { V2_BODY_IDS_MAX, V2_FILTER_IDS_MAX, V2_MAX_PAGE_LIMIT, } from './constants/v2-list.const.js';
11
10
  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';
11
+ export type { AnnotationActorView, AnnotationDecision, AnnotationDenialCode, } from './annotations/policy.js';
12
+ export { ANNOTATION_DENIAL_MESSAGES, canEditNote, canRemove, checkNoteBody, checkTagName, isAuthor, } from './annotations/policy.js';
13
+ export type { ClusterBulkClusterResultDto, ClusterBulkFinalStatus, ClusterBulkGenerationUpdateSettings, ClusterBulkOperationPayloadDto, ClusterBulkOperationRule, ClusterBulkPlanTypeUpdateSettings, ClusterBulkPlanUpdateSettings, ClusterBulkSettingsByType, ClusterBulkSleepWakeupSettings, ClusterBulkStepRequestDto, ClusterBulkStepResultDto, ClusterBulkTargetDto, } from './approvals/cluster-bulk-operation.js';
14
+ export { CLUSTER_BULK_OPERATION_CLUSTER_NAME_MAX_LENGTH, CLUSTER_BULK_OPERATION_MAX_CLUSTERS, CLUSTER_BULK_OPERATION_MIN_ACKS, CLUSTER_BULK_OPERATION_NAME_MAX_LENGTH, CLUSTER_BULK_OPERATION_RULES, CLUSTER_BULK_OPERATION_TEST_STAGE_MIN_ACKS, CLUSTER_BULK_OPERATION_TYPES, CLUSTER_BULK_SLEEPING_CLUSTER_DELAY_MS, clusterBulkOperationTypeOf, clusterBulkParameterOf, clusterBulkRequiredPermissions, clusterBulkResultOf, isClusterBulkYolo, } from './approvals/cluster-bulk-operation.js';
12
15
  export type { ApprovalActorView, ApprovalDecision, ApprovalDenialCode, } from './approvals/policy.js';
13
- export { canAcknowledge, canCreate, canExecute, canReject, canView, canWithdraw, effectiveStatus, hasActorEmail, hasEveryPermission, isExpired, isSameActorEmail, remainingAcks, requiredPermissionsOf, resolveRequiredAcks, } from './approvals/policy.js';
16
+ export { approvalPermissionCheck, canAcknowledge, canCreate, canExecute, canReject, canView, canWithdraw, effectiveStatus, hasActorEmail, hasEveryPermission, isExpired, isSameActor, isSameActorEmail, remainingAcks, requiredPermissionsOf, resolveRequiredAcks, } from './approvals/policy.js';
14
17
  export type { ApprovalUseCaseType } from './approvals/use-cases.const.js';
15
18
  export { APPROVAL_USE_CASE_TYPES, EXTEND_TRIAL_MAX_DAYS, EXTEND_TRIAL_MIN_DAYS, } from './approvals/use-cases.const.js';
16
19
  export type { ALERT_SUBSCRIPTION_REPORT_TYPES, ALERT_SUBSCRIPTION_TYPES, AlertSubscriptionDto, AlertSubscriptionEntryDto, AlertSubscriptionWebhookAuth, CheckFailedReason, } from './dtos/AlertSubscription.dto.js';
17
20
  export { FORBIDDEN_HOSTNAMES_FOR_WEBHOOK_ALERTS, HMAC_HEADER_POSITION, HMAC_SUPPORTED_ALGORITHM, } from './dtos/AlertSubscription.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';
21
+ export type { AnnotationActor, AnnotationDto, AnnotationEntityKind, AnnotationKind, AnnotationLookupDto, AnnotationLookupEntryDto, AnnotationTagDto, EntityAnnotationsDto, } from './dtos/Annotation.dto.js';
22
+ export { ANNOTATION_BODY_MAX, ANNOTATION_ENTITY_KIND_LABELS, ANNOTATION_ENTITY_KINDS, ANNOTATION_ENTITY_MAX, ANNOTATION_KINDS, ANNOTATION_LOOKUP_MAX_ENTITIES, ANNOTATION_LOOKUP_TAGS_MAX, ANNOTATION_PAGE_SIZE_DEFAULT, ANNOTATION_PAGE_SIZE_MAX, ANNOTATION_SEARCH_MAX_LENGTH, ANNOTATION_TAG_NAME_MAX, normalizeTagName, } from './dtos/Annotation.dto.js';
23
+ export type { ApprovalAck, ApprovalActionMode, ApprovalActor, ApprovalEntityRef, ApprovalEntityType, ApprovalExecutionMode, ApprovalJobDto, ApprovalJobStatus, ApprovalM2mActor, ApprovalProgress, ApprovalSortField, ApprovalSortOrder, ApprovalStatusCountsDto, ApprovalSummaryField, ApprovalSummaryFieldKind, ApprovalSummaryValue, ApprovalUseCaseDto, } from './dtos/ApprovalJob.dto.js';
24
+ export { APPROVAL_ACKS_MAX, APPROVAL_ENTITY_TYPES, APPROVAL_JOB_STATUSES, APPROVAL_LIST_SUMMARY_VALUES_MAX, APPROVAL_LIVE_STATUSES, APPROVAL_PAGE_SIZE_DEFAULT, APPROVAL_PAGE_SIZE_MAX, APPROVAL_PAYLOAD_ORG_FIELD, APPROVAL_REASON_MAX_LENGTH, APPROVAL_RUN_STALE_MS, APPROVAL_SEARCH_MAX_LENGTH, APPROVAL_SORT_DEFAULT, APPROVAL_SORT_FIELDS, APPROVAL_SUMMARY_FIELD_KINDS, isRunStalled, progressFraction, } from './dtos/ApprovalJob.dto.js';
20
25
  export type { AuditDto } from './dtos/Audit.dto.js';
21
26
  export type { Auth0ResourceServerDto } from './dtos/Auth0ResourceServer.dto.js';
22
27
  export type { BackupDto } from './dtos/Backup.dto.js';
@@ -32,13 +37,13 @@ export type { ClusterPlanTypeDto } from './dtos/ClusterPlanType.dto.js';
32
37
  export type { ClusterSpecChange, ClusterSpecChangeActor, ClusterSpecHistory, } from './dtos/ClusterSpecHistory.dto.js';
33
38
  export type { CommonClusterDto, ExternalIdpConfig, OptimizeFilteringConfig, OptimizeFilteringIncludeExclude, OptimizeFilteringPatch, SecretsFilterMode, } from './dtos/CommonCluster.dto.js';
34
39
  export type { ConsoleClusterDto } from './dtos/ConsoleCluster.dto.js';
35
- export type { ClusterActivityBucket, ClusterActivityTile, ClusterActivityV2Dto, ClusterActivityV2Response, ClusterByClientV2Dto, ClusterDatacenterOptionV2Dto, ClusterDetailV2Dto, ClusterFacetsV2Dto, ClusterListItemV2Dto, ClusterParameterOptionV2Dto, ClusterParametersV2Dto, ControlResolvedPermissions, ControlSessionDto, ControlSessionUser, CursorPage, CursorParams, ListClustersV2Params, ListOrganizationsV2Params, ListOrgMembersV2Params, OrgDetailV2Dto, OrgListItemV2Dto, OrgMemberV2Dto, OrgSummaryV2Dto, } from './dtos/ControlV2.dto.js';
40
+ export type { ClusterActivityBucket, ClusterActivityTile, ClusterActivityV2Dto, ClusterActivityV2Response, ClusterByClientV2Dto, ClusterDatacenterOptionV2Dto, ClusterDetailV2Dto, ClusterFacetsV2Dto, ClusterListItemV2Dto, ClusterLiveStateV2Dto, ClusterLiveStateV2Entry, ClusterParameterOptionV2Dto, ClusterParametersV2Dto, ControlResolvedPermissions, ControlSessionDto, ControlSessionUser, CursorPage, CursorParams, ListClustersV2Params, ListOrganizationsV2Params, ListOrgMembersV2Params, OrgDetailV2Dto, OrgListItemV2Dto, OrgMemberV2Dto, OrgSummaryV2Dto, } from './dtos/ControlV2.dto.js';
36
41
  export type { EarlyAccessFeatureDto } from './dtos/EarlyAccessFeature.dto.js';
37
- export type { CamundaWebApp, CamundaWebAppWithZeebe, ExternalClusterDto, ExternalOrganizationDto, } from './dtos/ExternalWebapp.dto.js';
42
+ export type { CamundaWebApp, CamundaWebAppWithZeebe, ExternalClickwrapConfigDto, ExternalClusterDto, ExternalOrganizationDto, } from './dtos/ExternalWebapp.dto.js';
38
43
  export type { Features } from './dtos/FeatureFlags.dto.js';
39
44
  export { activeGenerations, compareGenerationNamesNewestFirst, type GenerationDto, type GenerationWithClusterCountDto, sortGenerationBySemverOfZeebe, type UpgradableGenerationsDto, } from './dtos/Generations.dto.js';
40
45
  export type { Hdp } from './dtos/Hdp.dto.js';
41
- export type { K8sConfig, K8sConfigLegacyFormat, K8sContext, K8sContextDto, } from './dtos/K8sContext.dto.js';
46
+ export type { K8sBackupConfig, K8sConfig, K8sConfigLegacyFormat, K8sContext, K8sContextDto, } from './dtos/K8sContext.dto.js';
42
47
  export type { MetaDto } from './dtos/Meta.dto.js';
43
48
  export type { AutoJoinAssignment, LicensingModelType, LlmProviderName, OrganizationDto, OrganizationMetadata, OrgOwner, OrgWithNameAndSalesPlan, } from './dtos/Organization.dto.js';
44
49
  export { LICENSING_MODEL_DISPLAY_NAMES, VALID_LICENSING_MODELS, } from './dtos/Organization.dto.js';
@@ -47,7 +52,7 @@ export type { OrganizationToSalesPlanDto } from './dtos/OrganizationToSalesPlan.
47
52
  export type { ReleaseTrainSanityReport, SanityFix, SanityRuleInfo, SanitySeverity, SanityViolation, } from './dtos/ReleaseTrainSanity.dto.js';
48
53
  export type { RestoreDto, RestoreState } from './dtos/Restore.dto.js';
49
54
  export type { ClusterLimits, ConsumptionDataItem, Limits, SalesPlanDto, SalesPlanMetadata, } from './dtos/SalesPlan.dto.js';
50
- export { allClusterBasedLimits, allSalesPlanLimits, deprecatedLimit, MAX_CLUSTER_CLIENTS_DEFAULT, MAX_CLUSTER_CLIENTS_DEV, RETENTION_LIMIT_DEFAULT, RETENTION_LIMIT_MAXIMUM, RETENTION_LIMIT_MINIMUM, unusedClusterBasedLimits, unusedSalesPlanLimits, } from './dtos/SalesPlan.dto.js';
55
+ export { allClusterBasedLimits, allSalesPlanLimits, deprecatedLimit, isLimitOfferedOnStage, MAX_CLUSTER_CLIENTS_DEFAULT, MAX_CLUSTER_CLIENTS_DEV, RETENTION_LIMIT_DEFAULT, RETENTION_LIMIT_MAXIMUM, RETENTION_LIMIT_MINIMUM, unusedClusterBasedLimits, unusedSalesPlanLimits, } from './dtos/SalesPlan.dto.js';
51
56
  export type { SecureConnectivityDto } from './dtos/SecureConnectivity.dto.js';
52
57
  export type { SignupDto } from './dtos/Signup.dto.js';
53
58
  export type { StorybookConfig, StorybookConfigBackup, StorybookConfigChannel, StorybookConfigDatacenter, StorybookConfigGeneration, } from './dtos/StorybookConfig.dto.js';
@@ -105,12 +110,13 @@ export type { ConsoleSMAdminApi } from './types/ConsoleSelfManagedAdminApi.type.
105
110
  export type { DashboardConfig, DashboardMappingItem, DashboardMappingTarget, DashboardResultPrimitive, DashboardResultRow, EngineeringOperationsDashboardResponse, } from './types/Dashboard.types.js';
106
111
  export type { EnterpriseIncludingValueMetrics } from './types/EnterpriseIncludingValueMetrics.type.js';
107
112
  export type { HdpTenantUsageBreakdown, HdpTenantUsagePerClusterPoint, HdpTenantUsagePoint, } from './types/HdpTenantUsage.type.js';
108
- export type { AlertSubscription as HdpAlertSubscription, Audit as HdpAudit, ByomClient as HdpByomClient, Channel as HdpChannel, Cluster as HdpCluster, ClusterBackup as HdpClusterBackup, ClusterBackupSchedule as HdpClusterBackupSchedule, ClusterBulkOperation as HdpClusterBulkOperation, ClusterClient as HdpClusterClient, ClusterModification as HdpClusterModification, ClusterPlan as HdpClusterPlan, ClusterPlanType as HdpClusterPlanType, ConnectorSecret as HdpConnectorSecret, ConsoleApiClient as HdpConsoleApiClient, Datacenter as HdpDatacenter, Generation as HdpGeneration, HdpBackendChangeEvent, HdpClusterModificationConfig, HdpEntity, HdpPrometheusDataCapacityDataPoint, Invite as HdpInvite, LlmSpend as HdpLlmSpend, Organization as HdpOrganization, SecureConnectivity as HdpSecureConnectivity, SystemAudit as HdpSystemAudit, TelemetryData as HdpTelemetryData, UsageAlert as HdpUsageAlert, User as HdpUser, UserLogin as HdpUserLogin, } from './types/hdp.types.js';
109
- export { AlertSubscriptionReportType as HdpAlertSubscriptionReportType, AlertSubscriptionType as HdpAlertSubscriptionType, } from './types/hdp.types.js';
113
+ export type { AlertSubscription as HdpAlertSubscription, Audit as HdpAudit, ByomClient as HdpByomClient, Channel as HdpChannel, Cluster as HdpCluster, ClusterBackup as HdpClusterBackup, ClusterBackupSchedule as HdpClusterBackupSchedule, ClusterBulkOperation as HdpClusterBulkOperation, ClusterClient as HdpClusterClient, ClusterModification as HdpClusterModification, ClusterPlan as HdpClusterPlan, ClusterPlanType as HdpClusterPlanType, ConnectorSecret as HdpConnectorSecret, ConsoleApiClient as HdpConsoleApiClient, Datacenter as HdpDatacenter, Generation as HdpGeneration, HdpBackendChangeEvent, HdpClusterModificationConfig, HdpDisk, HdpEntity, HdpPrometheusDataCapacityDataPoint, Invite as HdpInvite, LlmSpend as HdpLlmSpend, Organization as HdpOrganization, SecureConnectivity as HdpSecureConnectivity, SystemAudit as HdpSystemAudit, TelemetryData as HdpTelemetryData, UsageAlert as HdpUsageAlert, User as HdpUser, UserLogin as HdpUserLogin, } from './types/hdp.types.js';
114
+ export { AlertSubscriptionReportType as HdpAlertSubscriptionReportType, AlertSubscriptionType as HdpAlertSubscriptionType, HDP_DISKS, } from './types/hdp.types.js';
110
115
  export type { GlobalNotification, NotificationDto, NotificationMeta, NotificationOptions, NotificationPermission, NotificationSource, NotificationState, NotificationType, OrgNotification, UserNotification, UserOrgNotification, } from './types/notification.type.js';
111
116
  export { NotificationPermissionValues, NotificationSourceEnum, NotificationStateEnum, NotificationTypeEnum, } from './types/notification.type.js';
112
117
  export type { CreateReadUpdateDelete, OrganizationPermissions, } from './types/OrganizationPermission.type.js';
113
118
  export { OrganizationPermissionsDescriptions, PermissionsForOrganizationRole, } from './types/OrganizationPermission.type.js';
119
+ export { getPreprodClusterTtlHours, isPastPreprodClusterTtl, isPreprodClusterTtlStage, parseNumericLimit, } from './types/PreprodClusterTtl.type.js';
114
120
  export type { AccountRoles, ConsoleRoles, ModelerRoles, Roles, } from './types/Roles.js';
115
121
  export { SAFE_ROLES } from './types/Roles.js';
116
122
  export type { DisplayedSalesPlan, RevisitedSalesPlanName, } from './types/SalesPlanType.type.js';