@camunda/ccma-shared-types 5.0.0 → 7.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 (100) hide show
  1. package/dist/_tests/approvals/dns-subdomain.spec.d.ts +1 -0
  2. package/dist/_tests/approvals/expected-value.spec.d.ts +1 -0
  3. package/dist/_tests/charts/chart-query.spec.d.ts +1 -0
  4. package/dist/_tests/constants/customer-hardware-sizing.const.spec.d.ts +1 -0
  5. package/dist/_tests/dashboards/definition.spec.d.ts +1 -0
  6. package/dist/_tests/dtos/ClusterPlanWhiteList.spec.d.ts +1 -0
  7. package/dist/_tests/utils/elasticsearchPlanPath.utils.spec.d.ts +1 -0
  8. package/dist/_tests/utils/upgradeGateReason.utils.spec.d.ts +1 -0
  9. package/dist/approvals/dns-subdomain.d.ts +12 -0
  10. package/dist/approvals/dns-subdomain.js +16 -0
  11. package/dist/approvals/dns-subdomain.js.map +7 -0
  12. package/dist/approvals/expected-value.d.ts +33 -0
  13. package/dist/approvals/expected-value.js +26 -0
  14. package/dist/approvals/expected-value.js.map +7 -0
  15. package/dist/approvals/policy.js +1 -1
  16. package/dist/approvals/policy.js.map +2 -2
  17. package/dist/approvals/use-cases.const.d.ts +96 -0
  18. package/dist/approvals/use-cases.const.js +59 -2
  19. package/dist/approvals/use-cases.const.js.map +2 -2
  20. package/dist/charts/chart-metrics.d.ts +35 -0
  21. package/dist/charts/chart-metrics.js +188 -0
  22. package/dist/charts/chart-metrics.js.map +7 -0
  23. package/dist/charts/chart-query.d.ts +55 -0
  24. package/dist/charts/chart-query.js +376 -0
  25. package/dist/charts/chart-query.js.map +7 -0
  26. package/dist/charts/chart-spec.d.ts +103 -0
  27. package/dist/charts/chart-spec.js +79 -0
  28. package/dist/charts/chart-spec.js.map +7 -0
  29. package/dist/charts/index.d.ts +3 -0
  30. package/dist/charts/index.js +59 -0
  31. package/dist/charts/index.js.map +7 -0
  32. package/dist/constants/customer-hardware-sizing.const.d.ts +124 -0
  33. package/dist/constants/customer-hardware-sizing.const.js +266 -0
  34. package/dist/constants/customer-hardware-sizing.const.js.map +7 -0
  35. package/dist/constants/version-gates.const.d.ts +12 -0
  36. package/dist/constants/version-gates.const.js +2 -0
  37. package/dist/constants/version-gates.const.js.map +2 -2
  38. package/dist/dashboards/definition.d.ts +86 -0
  39. package/dist/dashboards/definition.js +137 -0
  40. package/dist/dashboards/definition.js.map +7 -0
  41. package/dist/dtos/Annotation.dto.d.ts +1 -1
  42. package/dist/dtos/Annotation.dto.js +10 -2
  43. package/dist/dtos/Annotation.dto.js.map +2 -2
  44. package/dist/dtos/ApprovalJob.dto.d.ts +33 -3
  45. package/dist/dtos/ApprovalJob.dto.js.map +2 -2
  46. package/dist/dtos/ClusterPlanTypeChange.dto.d.ts +23 -0
  47. package/dist/dtos/ClusterPlanTypeChange.dto.js +1 -0
  48. package/dist/dtos/ClusterPlanTypeChange.dto.js.map +7 -0
  49. package/dist/dtos/CommonCluster.dto.d.ts +5 -0
  50. package/dist/dtos/ControlV2.dto.d.ts +17 -0
  51. package/dist/dtos/Dashboard.dto.d.ts +336 -0
  52. package/dist/dtos/Dashboard.dto.js +70 -0
  53. package/dist/dtos/Dashboard.dto.js.map +7 -0
  54. package/dist/dtos/EarlyAccessFeature.dto.d.ts +1 -0
  55. package/dist/dtos/FeatureFlags.dto.d.ts +96 -54
  56. package/dist/dtos/Hdp.dto.d.ts +5 -88
  57. package/dist/dtos/Organization.dto.d.ts +21 -0
  58. package/dist/dtos/Organization.dto.js.map +1 -1
  59. package/dist/dtos/SalesPlan.dto.d.ts +18 -0
  60. package/dist/dtos/SalesPlan.dto.js +18 -0
  61. package/dist/dtos/SalesPlan.dto.js.map +2 -2
  62. package/dist/dtos/UpgradeReadiness.dto.d.ts +32 -0
  63. package/dist/dtos/UpgradeReadiness.dto.js +1 -0
  64. package/dist/dtos/UpgradeReadiness.dto.js.map +7 -0
  65. package/dist/enums/SystemAuditEntity.enum.d.ts +5 -2
  66. package/dist/enums/SystemAuditEntity.enum.js +3 -0
  67. package/dist/enums/SystemAuditEntity.enum.js.map +2 -2
  68. package/dist/index.d.ts +18 -5
  69. package/dist/index.js +192 -1
  70. package/dist/index.js.map +2 -2
  71. package/dist/permissions/accounts.permissions.d.ts +12 -0
  72. package/dist/permissions/accounts.permissions.js +11 -0
  73. package/dist/permissions/accounts.permissions.js.map +2 -2
  74. package/dist/permissions/combo.js +5 -0
  75. package/dist/permissions/combo.js.map +2 -2
  76. package/dist/search/compiler.d.ts +20 -0
  77. package/dist/search/compiler.js +48 -11
  78. package/dist/search/compiler.js.map +2 -2
  79. package/dist/search/index.d.ts +1 -1
  80. package/dist/search/index.js.map +2 -2
  81. package/dist/search/organization-search-fields.d.ts +5 -2
  82. package/dist/search/organization-search-fields.js +9 -1
  83. package/dist/search/organization-search-fields.js.map +2 -2
  84. package/dist/search/parser.d.ts +3 -0
  85. package/dist/search/parser.js +3 -1
  86. package/dist/search/parser.js.map +2 -2
  87. package/dist/types/ClusterBulkOperation.type.d.ts +14 -0
  88. package/dist/types/ClusterPlanFields.type.js +74 -74
  89. package/dist/types/ClusterPlanFields.type.js.map +2 -2
  90. package/dist/utils/elasticsearchPlanPath.utils.d.ts +20 -0
  91. package/dist/utils/elasticsearchPlanPath.utils.js +32 -0
  92. package/dist/utils/elasticsearchPlanPath.utils.js.map +7 -0
  93. package/dist/utils/qa-user.utils.d.ts +14 -0
  94. package/dist/utils/qa-user.utils.js +14 -0
  95. package/dist/utils/qa-user.utils.js.map +7 -0
  96. package/dist/utils/qa-user.utils.spec.d.ts +1 -0
  97. package/dist/utils/upgradeGateReason.utils.d.ts +8 -0
  98. package/dist/utils/upgradeGateReason.utils.js +23 -0
  99. package/dist/utils/upgradeGateReason.utils.js.map +7 -0
  100. package/package.json +1 -1
@@ -88,96 +88,13 @@ export declare namespace Hdp {
88
88
  */
89
89
  priorHostingCostUsd?: number;
90
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".
91
+ * How the current window compares to the prior one. The value is `up` or
92
+ * `down` when the change is more than 5%, and `flat` when it is within 5%.
93
+ * The field is absent when `priorHostingCostUsd` is absent, zero, or
94
+ * negative. A percent change needs a positive base, and a negative prior
95
+ * is a credit.
96
96
  */
97
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
98
  }
182
99
  /** The loaded cost of one cluster over the fleet cost window. */
183
100
  interface FleetHostingCostRow {
@@ -57,6 +57,27 @@ export interface OrganizationMetadata {
57
57
  * that matches on the name of the key.
58
58
  */
59
59
  keyHash?: string;
60
+ /**
61
+ * UUID of the OpenRouter workspace that holds this key. Absent for a
62
+ * LiteLLM key, and for an OpenRouter key that lives in the default
63
+ * workspace.
64
+ *
65
+ * A key stays in its workspace for its whole life, and a list request
66
+ * covers one workspace. So the lost-hash recovery by name needs this value
67
+ * to look in the right workspace after the configured one changed.
68
+ */
69
+ workspaceId?: string;
70
+ /**
71
+ * True while the enterprise org has the `camunda-provided-llm` early access
72
+ * feature off, or a revoke of its key is not finished. Console then writes
73
+ * no connector secrets for this key, and a sweep removes the ones that
74
+ * exist.
75
+ *
76
+ * It does not prove that the upstream blocked the key. A block can still be
77
+ * pending in the operation queue (`litellm.blockKey`). Absent means not
78
+ * suspended.
79
+ */
80
+ suspended?: boolean;
60
81
  /**
61
82
  * The key that a provider migration replaced, kept until the delete of
62
83
  * that key is confirmed.
@@ -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 { 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"],
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 * UUID of the OpenRouter workspace that holds this key. Absent for a\n * LiteLLM key, and for an OpenRouter key that lives in the default\n * workspace.\n *\n * A key stays in its workspace for its whole life, and a list request\n * covers one workspace. So the lost-hash recovery by name needs this value\n * to look in the right workspace after the configured one changed.\n */\n workspaceId?: string\n /**\n * True while the enterprise org has the `camunda-provided-llm` early access\n * feature off, or a revoke of its key is not finished. Console then writes\n * no connector secrets for this key, and a sweep removes the ones that\n * exist.\n *\n * It does not prove that the upstream blocked the key. A block can still be\n * pending in the operation queue (`litellm.blockKey`). Absent means not\n * suspended.\n */\n suspended?: boolean\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
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
  }
@@ -59,6 +59,13 @@ export interface Limits extends ClusterLimits {
59
59
  * the Stable channel with classification 'orgUnlocked'.
60
60
  */
61
61
  generationWhiteList?: string;
62
+ /**
63
+ * Comma-separated list of cluster plan UUIDs that are unlocked for this org.
64
+ * On create, the caller can name one of them in `clusterPlanId`. The cluster
65
+ * then gets that plan instead of the active plan of its plan type. Read
66
+ * only when the flag `shared.unlockedClusterPlans` is on.
67
+ */
68
+ clusterPlanWhiteList?: string;
62
69
  /**
63
70
  * When true, users with only the Developer role cannot create clusters in this org.
64
71
  * Users who also hold Member, Admin, Owner, or Operations Engineer are unaffected.
@@ -142,3 +149,14 @@ export declare function unusedSalesPlanLimits(limits: Limits, stage?: string): {
142
149
  description: string;
143
150
  isClusterBasedLimit: boolean;
144
151
  }[];
152
+ /**
153
+ * Returns the cluster plan uuids of the `clusterPlanWhiteList` limit. A value
154
+ * that is not a string gives no ids, because an old write path did not check
155
+ * the type.
156
+ */
157
+ export declare function clusterPlanWhiteListIds(limits: Limits | undefined): string[];
158
+ /**
159
+ * Says if the feature flag state offers the limit key. The flag
160
+ * `shared.unlockedClusterPlans` hides `clusterPlanWhiteList`.
161
+ */
162
+ export declare function isLimitKeyEnabled(limitKey: string, unlockedClusterPlans: boolean): boolean;
@@ -147,6 +147,12 @@ function allSalesPlanLimits() {
147
147
  description: "unlocked generation UUIDs - comma separated. These generations will be available for cluster creation regardless of channel membership. Attached to the Stable channel.",
148
148
  isClusterBasedLimit: false
149
149
  },
150
+ {
151
+ key: "clusterPlanWhiteList",
152
+ type: "string",
153
+ description: "unlocked cluster plan UUIDs - comma separated. On create, a cluster can use one of these plans instead of the active plan of its plan type. The reservation still counts against the plan type. The limit has an effect only when the flag shared.unlockedClusterPlans is on.",
154
+ isClusterBasedLimit: false
155
+ },
150
156
  {
151
157
  key: "developerNoClusterCreate",
152
158
  type: "boolean",
@@ -177,6 +183,16 @@ function unusedSalesPlanLimits(limits, stage) {
177
183
  (current) => !(Object.keys(limits).includes(current.key) && limits[current.key] !== null) && (stage === void 0 || isLimitOfferedOnStage(current, stage))
178
184
  );
179
185
  }
186
+ function clusterPlanWhiteListIds(limits) {
187
+ const value = limits?.clusterPlanWhiteList;
188
+ if (typeof value !== "string") {
189
+ return [];
190
+ }
191
+ return value.split(",").map((id) => id.trim()).filter((id) => id.length > 0);
192
+ }
193
+ function isLimitKeyEnabled(limitKey, unlockedClusterPlans) {
194
+ return limitKey !== "clusterPlanWhiteList" || unlockedClusterPlans;
195
+ }
180
196
  export {
181
197
  MAX_CLUSTER_CLIENTS_DEFAULT,
182
198
  MAX_CLUSTER_CLIENTS_DEV,
@@ -185,7 +201,9 @@ export {
185
201
  RETENTION_LIMIT_MINIMUM,
186
202
  allClusterBasedLimits,
187
203
  allSalesPlanLimits,
204
+ clusterPlanWhiteListIds,
188
205
  deprecatedLimit,
206
+ isLimitKeyEnabled,
189
207
  isLimitOfferedOnStage,
190
208
  unusedClusterBasedLimits,
191
209
  unusedSalesPlanLimits
@@ -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'\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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",
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 * Comma-separated list of cluster plan UUIDs that are unlocked for this org.\n * On create, the caller can name one of them in `clusterPlanId`. The cluster\n * then gets that plan instead of the active plan of its plan type. Read\n * only when the flag `shared.unlockedClusterPlans` is on.\n */\n clusterPlanWhiteList?: 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: 'clusterPlanWhiteList',\n type: 'string',\n description:\n 'unlocked cluster plan UUIDs - comma separated. On create, a cluster can use one of these plans instead of the active plan of its plan type. The reservation still counts against the plan type. The limit has an effect only when the flag shared.unlockedClusterPlans is on.',\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\n/**\n * Returns the cluster plan uuids of the `clusterPlanWhiteList` limit. A value\n * that is not a string gives no ids, because an old write path did not check\n * the type.\n */\nexport function clusterPlanWhiteListIds(limits: Limits | undefined): string[] {\n const value: unknown = limits?.clusterPlanWhiteList\n if (typeof value !== 'string') {\n return []\n }\n return value\n .split(',')\n .map((id) => id.trim())\n .filter((id) => id.length > 0)\n}\n\n/**\n * Says if the feature flag state offers the limit key. The flag\n * `shared.unlockedClusterPlans` hides `clusterPlanWhiteList`.\n */\nexport function isLimitKeyEnabled(\n limitKey: string,\n unlockedClusterPlans: boolean,\n): boolean {\n return limitKey !== 'clusterPlanWhiteList' || unlockedClusterPlans\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Where a readiness verdict comes from. Each source leads to a different next
3
+ * step for the reader:
4
+ * - `cluster`: the cluster answered. `cache`: a stored answer of the cluster.
5
+ * - `timeout`, `error`: the cluster did not answer in a usable way.
6
+ * - `unsupported`: Console knows no readiness URL for the cluster.
7
+ * - `suspended`: the cluster sleeps and cannot answer. Resume it first.
8
+ * - `updating`: the cluster still rolls out its last upgrade.
9
+ */
10
+ export type UpgradeReadinessSource = 'cluster' | 'cache' | 'timeout' | 'error' | 'unsupported' | 'suspended' | 'updating';
11
+ export interface UpgradeReadinessState {
12
+ verdict: 'ready' | 'notReady' | 'unknown';
13
+ checkedAtIso: string;
14
+ source: UpgradeReadinessSource;
15
+ }
16
+ /** The upgrade gate of a cluster, and the answer of that gate (PDP-3067). */
17
+ export interface UpgradeReadinessDto {
18
+ /**
19
+ * - `readiness`: the cluster decides, from `UPGRADE_READINESS_MIN_VERSION`.
20
+ * - `gracePeriod`: the 24-hour rule decides, under that floor.
21
+ * - `none`: the org limit `ignoreGracePeriod` lifts the grace period.
22
+ */
23
+ gate: 'none' | 'gracePeriod' | 'readiness';
24
+ canUpgrade: boolean;
25
+ /** Set when the grace period blocks the upgrade. */
26
+ gracePeriod?: {
27
+ waitUntilIso: string;
28
+ hoursRemaining: number;
29
+ };
30
+ /** Set when the gate is `readiness`. */
31
+ readiness?: UpgradeReadinessState;
32
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=UpgradeReadiness.dto.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -11,7 +11,8 @@ export declare enum SystemAuditEntity {
11
11
  CONNECTION = "Connection",
12
12
  RELEASE_TRAIN = "Release Train",
13
13
  CLUSTER = "Cluster",
14
- APPROVAL_JOB = "Approval Request"
14
+ APPROVAL_JOB = "Approval Request",
15
+ FEATURE_FLAG = "Feature Flag"
15
16
  }
16
17
  /**
17
18
  * Display strings for audited attributes. The `entity` + `entityAttribute` pair
@@ -49,6 +50,7 @@ export declare enum SystemAuditEntityAttribute {
49
50
  ALPHA_FEATURE_ACTION_LABEL = "Action Label",
50
51
  ALPHA_FEATURE_ACTION_URL = "Action Url",
51
52
  ALPHA_FEATURE_CLICKWRAP = "Clickwrap",
53
+ ALPHA_FEATURE_FEATURE_FLAG_KEY = "Feature Flag Key",
52
54
  ALPHA_FEATURE_SALES_PLAN_TYPE_VISIBILITIES = "Sales Plan Type Visibilities",
53
55
  SALES_PLAN_NAME = "Name",
54
56
  SALES_PLAN_METADATA = "Metadata",
@@ -75,5 +77,6 @@ export declare enum SystemAuditEntityAttribute {
75
77
  CLUSTER_APPLIED_PLAN_MODIFICATION = "Plan Modification",
76
78
  APPROVAL_JOB_STATUS = "Status",
77
79
  APPROVAL_JOB_ACKS = "Approvals",
78
- APPROVAL_JOB_CLOSED_REASON = "Closure Reason"
80
+ APPROVAL_JOB_CLOSED_REASON = "Closure Reason",
81
+ FEATURE_FLAG_ROW = "Row"
79
82
  }
@@ -12,6 +12,7 @@ var SystemAuditEntity = /* @__PURE__ */ ((SystemAuditEntity2) => {
12
12
  SystemAuditEntity2["RELEASE_TRAIN"] = "Release Train";
13
13
  SystemAuditEntity2["CLUSTER"] = "Cluster";
14
14
  SystemAuditEntity2["APPROVAL_JOB"] = "Approval Request";
15
+ SystemAuditEntity2["FEATURE_FLAG"] = "Feature Flag";
15
16
  return SystemAuditEntity2;
16
17
  })(SystemAuditEntity || {});
17
18
  var SystemAuditEntityAttribute = /* @__PURE__ */ ((SystemAuditEntityAttribute2) => {
@@ -43,6 +44,7 @@ var SystemAuditEntityAttribute = /* @__PURE__ */ ((SystemAuditEntityAttribute2)
43
44
  SystemAuditEntityAttribute2["ALPHA_FEATURE_ACTION_LABEL"] = "Action Label";
44
45
  SystemAuditEntityAttribute2["ALPHA_FEATURE_ACTION_URL"] = "Action Url";
45
46
  SystemAuditEntityAttribute2["ALPHA_FEATURE_CLICKWRAP"] = "Clickwrap";
47
+ SystemAuditEntityAttribute2["ALPHA_FEATURE_FEATURE_FLAG_KEY"] = "Feature Flag Key";
46
48
  SystemAuditEntityAttribute2["ALPHA_FEATURE_SALES_PLAN_TYPE_VISIBILITIES"] = "Sales Plan Type Visibilities";
47
49
  SystemAuditEntityAttribute2["SALES_PLAN_NAME"] = "Name";
48
50
  SystemAuditEntityAttribute2["SALES_PLAN_METADATA"] = "Metadata";
@@ -70,6 +72,7 @@ var SystemAuditEntityAttribute = /* @__PURE__ */ ((SystemAuditEntityAttribute2)
70
72
  SystemAuditEntityAttribute2["APPROVAL_JOB_STATUS"] = "Status";
71
73
  SystemAuditEntityAttribute2["APPROVAL_JOB_ACKS"] = "Approvals";
72
74
  SystemAuditEntityAttribute2["APPROVAL_JOB_CLOSED_REASON"] = "Closure Reason";
75
+ SystemAuditEntityAttribute2["FEATURE_FLAG_ROW"] = "Row";
73
76
  return SystemAuditEntityAttribute2;
74
77
  })(SystemAuditEntityAttribute || {});
75
78
  export {
@@ -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 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;",
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 FEATURE_FLAG = 'Feature Flag',\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_FEATURE_FLAG_KEY = 'Feature Flag Key',\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 // FeatureFlag. One attribute for the whole row: the trail keeps the row\n // before and after, and the diff of the two shows what changed.\n FEATURE_FLAG_ROW = 'Row',\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;AACf,EAAAA,mBAAA,kBAAe;AAdL,SAAAA;AAAA,GAAA;AAwBL,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,oCAAiC;AACjC,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;AAG7B,EAAAA,4BAAA,sBAAmB;AA1ET,SAAAA;AAAA,GAAA;",
6
6
  "names": ["SystemAuditEntity", "SystemAuditEntityAttribute"]
7
7
  }
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ export { CUSTOMER_HARDWARE_SIZING_BROKER_TOTAL_CAPS, CUSTOMER_HARDWARE_SIZING_COUNT_CAPS, CUSTOMER_HARDWARE_SIZING_ELASTICSEARCH_TOTAL_CAPS, CUSTOMER_HARDWARE_SIZING_MAX_AUTO_RESIZE_INCREASE_GI, CUSTOMER_HARDWARE_SIZING_MAX_PLAN_JSON_LENGTH, CUSTOMER_HARDWARE_SIZING_MAX_PLANS_PER_REQUESTER, CUSTOMER_HARDWARE_SIZING_NAME_MAX_LENGTH, CUSTOMER_HARDWARE_SIZING_NAME_MIN_LENGTH, CUSTOMER_HARDWARE_SIZING_REPLICA_SET_TOTAL_CAPS, CUSTOMER_HARDWARE_SIZING_RESOURCE_CAPS, checkCustomerHardwareSizing, isCustomerHardwareSizingStage, parseKubernetesQuantity, } from './constants/customer-hardware-sizing.const.js';
1
2
  export { DAY, HOUR, MINUTE, SECOND, WEEK } from './constants/duration.const.js';
2
3
  export type { Stage } from './constants/misc.const.js';
3
4
  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';
@@ -7,15 +8,20 @@ export { SECURE_CONNECTIVITY_ALLOWED_ENTRIES_LIMIT } from './constants/secureCon
7
8
  export type { TrialExtensionSurveyAnswer, TrialExtensionSurveyQuestion, } from './constants/trialExtensionSurvey.const.js';
8
9
  export { TRIAL_EXTENSION_SURVEY_QUESTIONS } from './constants/trialExtensionSurvey.const.js';
9
10
  export { V2_BODY_IDS_MAX, V2_FILTER_IDS_MAX, V2_MAX_PAGE_LIMIT, } from './constants/v2-list.const.js';
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 { 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, UPGRADE_READINESS_MIN_VERSION, ZEEBE_REST_URL_MIN_VERSION, } from './constants/version-gates.const.js';
11
12
  export type { AnnotationActorView, AnnotationDecision, AnnotationDenialCode, } from './annotations/policy.js';
12
13
  export { ANNOTATION_DENIAL_MESSAGES, canEditNote, canRemove, checkNoteBody, checkTagName, isAuthor, } from './annotations/policy.js';
13
14
  export type { ClusterBulkClusterResultDto, ClusterBulkFinalStatus, ClusterBulkGenerationUpdateSettings, ClusterBulkOperationPayloadDto, ClusterBulkOperationRule, ClusterBulkPlanTypeUpdateSettings, ClusterBulkPlanUpdateSettings, ClusterBulkSettingsByType, ClusterBulkSleepWakeupSettings, ClusterBulkStepRequestDto, ClusterBulkStepResultDto, ClusterBulkTargetDto, } from './approvals/cluster-bulk-operation.js';
14
15
  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';
16
+ export { DNS_SUBDOMAIN_MAX_LENGTH, isDnsSubdomain, } from './approvals/dns-subdomain.js';
17
+ export type { ApprovalExpectedChange } from './approvals/expected-value.js';
18
+ export { isSameApprovalValue, staleApprovalKeys, } from './approvals/expected-value.js';
15
19
  export type { ApprovalActorView, ApprovalDecision, ApprovalDenialCode, } from './approvals/policy.js';
16
20
  export { approvalPermissionCheck, canAcknowledge, canCreate, canExecute, canReject, canView, canWithdraw, effectiveStatus, hasActorEmail, hasEveryPermission, isExpired, isSameActor, isSameActorEmail, remainingAcks, requiredPermissionsOf, resolveRequiredAcks, } from './approvals/policy.js';
17
21
  export type { ApprovalUseCaseType } from './approvals/use-cases.const.js';
18
- export { APPROVAL_USE_CASE_TYPES, EXTEND_TRIAL_MAX_DAYS, EXTEND_TRIAL_MIN_DAYS, } from './approvals/use-cases.const.js';
22
+ export { APPROVAL_EMAIL_MAX_LENGTH, APPROVAL_EMAIL_PATTERN, APPROVAL_USE_CASE_TYPES, EXTEND_TRIAL_MAX_DAYS, EXTEND_TRIAL_MIN_DAYS, FEATURE_FLAG_MIN_ACKS_PROD, ORG_LIMIT_TEXT_MAX_LENGTH, PERSONAL_ORGANIZATION_MAX_PER_REQUESTER, PERSONAL_ORGANIZATION_NAME_MAX_LENGTH, PERSONAL_ORGANIZATION_NAME_MIN_LENGTH, PLATFORM_ROLE_CHANGE_MAX_ROLES, PURGE_USERS_MAX_USERS, PURGE_USERS_REQUIRED_PERMISSIONS, USER_METADATA_EXPECTED_MAX_LENGTH, USER_METADATA_MAX_LENGTH, } from './approvals/use-cases.const.js';
23
+ export { CHART_DAY_GRAIN_MAX_DAYS, CHART_FILTER_MAX_LENGTH, CHART_GRAIN_DEFAULT, CHART_GRAINS, CHART_ID_MAX_LENGTH, CHART_METRICS, CHART_OTHER_SERIES_KEY, CHART_QUERY_MAX_LENGTH, CHART_TOP_DEFAULT, CHART_TOP_MAX, CHART_UNKNOWN_SERIES_KEY, CHART_WINDOW_AMOUNT_MAX, CHART_WINDOW_DEFAULT, CHART_WINDOW_UNITS, type ChartDimensionSpec, type ChartGrain, type ChartMetricSpec, type ChartPoint, type ChartQueryCheck, ChartQueryError, type ChartQueryErrorKind, type ChartQueryOptions, type ChartResult, type ChartSeries, type ChartSpec, type ChartUnit, type ChartWindow, type ChartWindowUnit, chartBucketStart, chartToday, chartWindowRange, findChartDimension, findChartMetric, formatChartSpec, isChartQueryError, parseChartQuery, readChartSpec, validateChartSpec, } from './charts/index.js';
24
+ export { DASHBOARD_TILE_DEFAULT_SIZE, dashboardDefinitionBytes, dashboardDefinitionFits, dashboardTileDefaultSize, emptyDashboardDefinition, isSafeDashboardLink, placeNewTile, placeNewTiles, tilesOverlap, toStoredDashboardDefinition, upgradeDashboardDefinition, } from './dashboards/definition.js';
19
25
  export type { ALERT_SUBSCRIPTION_REPORT_TYPES, ALERT_SUBSCRIPTION_TYPES, AlertSubscriptionDto, AlertSubscriptionEntryDto, AlertSubscriptionWebhookAuth, CheckFailedReason, } from './dtos/AlertSubscription.dto.js';
20
26
  export { FORBIDDEN_HOSTNAMES_FOR_WEBHOOK_ALERTS, HMAC_HEADER_POSITION, HMAC_SUPPORTED_ALGORITHM, } from './dtos/AlertSubscription.dto.js';
21
27
  export type { AnnotationActor, AnnotationDto, AnnotationEntityKind, AnnotationKind, AnnotationLookupDto, AnnotationLookupEntryDto, AnnotationTagDto, EntityAnnotationsDto, } from './dtos/Annotation.dto.js';
@@ -34,13 +40,16 @@ export type { ClusterIpWhitelistDto } from './dtos/ClusterIpWhitelist.dto.js';
34
40
  export type { MoveClusterOwnerResult, MoveClusterWarnings, } from './dtos/ClusterOwnerMove.dto.js';
35
41
  export type { ClusterPlanDto } from './dtos/ClusterPlan.dto.js';
36
42
  export type { ClusterPlanTypeDto } from './dtos/ClusterPlanType.dto.js';
43
+ export type { ChangeClusterPlanTypeResult } from './dtos/ClusterPlanTypeChange.dto.js';
37
44
  export type { ClusterSpecChange, ClusterSpecChangeActor, ClusterSpecHistory, } from './dtos/ClusterSpecHistory.dto.js';
38
45
  export type { CommonClusterDto, ExternalIdpConfig, OptimizeFilteringConfig, OptimizeFilteringIncludeExclude, OptimizeFilteringPatch, SecretsFilterMode, } from './dtos/CommonCluster.dto.js';
39
46
  export type { ConsoleClusterDto } from './dtos/ConsoleCluster.dto.js';
40
47
  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';
48
+ export type { DashboardActor, DashboardAnnotationsQuery, DashboardAnnotationsTile, DashboardAnnotationsTileV1, DashboardCatalogue, DashboardCatalogueChartMetric, DashboardCatalogueSearchField, DashboardChartQuery, DashboardChartRender, DashboardChartTile, DashboardChartTileV3, DashboardClusterCard, DashboardClusterDetailQuery, DashboardClusterDetailTile, DashboardClusterDetailTileV2, DashboardDefinition, DashboardDefinitionV1, DashboardDefinitionV2, DashboardDefinitionV3, DashboardDto, DashboardFleetQuery, DashboardFleetQueryTile, DashboardFleetQueryTileV1, DashboardHeadingTile, DashboardHeadingTileV2, DashboardLinkTile, DashboardLinkTileV2, DashboardListDto, DashboardNewTile, DashboardNoteTile, DashboardNoteTileV2, DashboardOrgCard, DashboardOrgDetailQuery, DashboardOrgDetailTile, DashboardOrgDetailTileV2, DashboardSummaryDto, DashboardTile, DashboardTileKind, DashboardTileLayout, DashboardTileV1, DashboardTileV2, DashboardTileV3, StoredDashboardDefinition, } from './dtos/Dashboard.dto.js';
49
+ export { DASHBOARD_CHART_RENDERS, DASHBOARD_CLUSTER_CARDS, DASHBOARD_DEFINITION_BYTES_MAX, DASHBOARD_DEFINITION_VERSION, DASHBOARD_ENTITY_ID_MAX, DASHBOARD_GRID_COLUMNS, DASHBOARD_GRID_ROWS_MAX, DASHBOARD_LINK_URL_MAX, DASHBOARD_NOTE_MAX, DASHBOARD_ORG_CARDS, DASHBOARD_PAGE_SIZE_DEFAULT, DASHBOARD_PAGE_SIZE_MAX, DASHBOARD_TILE_KINDS, DASHBOARD_TILE_ROWS_MAX, DASHBOARD_TILES_MAX, DASHBOARD_TITLE_MAX, } from './dtos/Dashboard.dto.js';
41
50
  export type { EarlyAccessFeatureDto } from './dtos/EarlyAccessFeature.dto.js';
42
51
  export type { CamundaWebApp, CamundaWebAppWithZeebe, ExternalClickwrapConfigDto, ExternalClusterDto, ExternalOrganizationDto, } from './dtos/ExternalWebapp.dto.js';
43
- export type { Features } from './dtos/FeatureFlags.dto.js';
52
+ export type { CreateFeatureFlagDto, FeatureFlagAnswer, FeatureFlagDto, FeatureFlagListDto, UpdateFeatureFlagDto, } from './dtos/FeatureFlags.dto.js';
44
53
  export { activeGenerations, compareGenerationNamesNewestFirst, type GenerationDto, type GenerationWithClusterCountDto, sortGenerationBySemverOfZeebe, type UpgradableGenerationsDto, } from './dtos/Generations.dto.js';
45
54
  export type { Hdp } from './dtos/Hdp.dto.js';
46
55
  export type { K8sBackupConfig, K8sConfig, K8sConfigLegacyFormat, K8sContext, K8sContextDto, } from './dtos/K8sContext.dto.js';
@@ -52,15 +61,17 @@ export type { OrganizationToSalesPlanDto } from './dtos/OrganizationToSalesPlan.
52
61
  export type { ReleaseTrainSanityReport, SanityFix, SanityRuleInfo, SanitySeverity, SanityViolation, } from './dtos/ReleaseTrainSanity.dto.js';
53
62
  export type { RestoreDto, RestoreState } from './dtos/Restore.dto.js';
54
63
  export type { ClusterLimits, ConsumptionDataItem, Limits, SalesPlanDto, SalesPlanMetadata, } 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';
64
+ export { allClusterBasedLimits, allSalesPlanLimits, clusterPlanWhiteListIds, deprecatedLimit, isLimitKeyEnabled, 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';
56
65
  export type { SecureConnectivityDto } from './dtos/SecureConnectivity.dto.js';
57
66
  export type { SignupDto } from './dtos/Signup.dto.js';
58
67
  export type { StorybookConfig, StorybookConfigBackup, StorybookConfigChannel, StorybookConfigDatacenter, StorybookConfigGeneration, } from './dtos/StorybookConfig.dto.js';
59
68
  export type { SystemAuditDto } from './dtos/SystemAudit.dto.js';
69
+ export type { UpgradeReadinessDto, UpgradeReadinessSource, UpgradeReadinessState, } from './dtos/UpgradeReadiness.dto.js';
60
70
  export type { UsageAlertDto } from './dtos/UsageAlert.dto.js';
61
71
  export { UsageAlertInitValues, UsageAlertMetric, UsageAlertThresholdLimits, } from './dtos/UsageAlert.dto.js';
62
72
  export type { UserMetaDataDto } from './dtos/UserMetaData.dto.js';
63
- export { type AndNode, CLUSTER_DEFAULT_SEARCH_FIELDS, CLUSTER_SEARCH_FIELDS, type CompileContext, type CompiledQuery, compileQuery, type FieldBinding, findSearchField, idSetPredicate, isLuceneQueryError, joinIdSet, LuceneQueryError, likeArgument, type NotNode, ORG_DEFAULT_SEARCH_FIELDS, ORGANIZATION_SEARCH_FIELDS, type OrNode, parseLuceneQuery, type QueryNode, type RangeNode, type SearchFieldCapability, type SearchFieldSpec, type SearchFieldType, type SearchTermOperator, type TermNode, } from './search/index.js';
73
+ export { type AndNode, CLUSTER_DEFAULT_SEARCH_FIELDS, CLUSTER_SEARCH_FIELDS, type CompileContext, type CompiledQuery, compileQuery, type FieldBinding, findSearchField, idSetPredicate, isLuceneQueryError, joinIdSet, LuceneQueryError, likeArgument, type NotNode, ORG_DEFAULT_SEARCH_FIELDS, ORGANIZATION_SEARCH_FIELDS, type OrNode, parseLuceneQuery, type QueryNode, type RangeNode, type SearchFieldCapability, type SearchFieldSpec, type SearchFieldType, type SearchTermOperator, type SqlDialect, type TermNode, } from './search/index.js';
74
+ export { upgradeGateReason } from './utils/upgradeGateReason.utils.js';
64
75
  export { AlertSubscriptionReportType, AlertSubscriptionType, } from './enums/AlertSubscription.enum.js';
65
76
  export { AuditEntity, AuditEntityAttribute } from './enums/AuditEntity.enum.js';
66
77
  export { AuditService } from './enums/AuditService.enum.js';
@@ -140,6 +151,7 @@ export { type ConnectivityStatus, deriveConnectivityMessage, deriveConnectivityS
140
151
  export { ConsoleSelfManagedUtils } from './utils/console-sm.utils.js';
141
152
  export type { CronScheduleValidationFailure, CronScheduleValidationResult, CronScheduleValidationSuccess, } from './utils/cronSchedule.utils.js';
142
153
  export { BACKUP_SCHEDULE_MIN_INTERVAL_MINUTES, validateCronSchedule, } from './utils/cronSchedule.utils.js';
154
+ export { canonicalPlan, canonicalPlanKey, } from './utils/elasticsearchPlanPath.utils.js';
143
155
  export { deriveEncryptionStatus, type EncryptionStatus, isEncryptionStatus, } from './utils/encryptionStatus.utils.js';
144
156
  export type { EnterpriseConnectionOrganizationAssignment } from './utils/enterprise-connection.utils.js';
145
157
  export { enterpriseConnectionMetadataToOrganizationAssignments, organizationAssignmentsToEnterpriseConnectionMetadata, } from './utils/enterprise-connection.utils.js';
@@ -154,6 +166,7 @@ export { computeOrgStartDate, type OrgStartDateInput, } from './utils/orgStartDa
154
166
  export { getPermissionsByRoles, getUserPermissionsForOrg, } from './utils/orgs/OrgHelper.js';
155
167
  export type { PasswordPolicyRequest, PasswordPolicyResult, } from './utils/PasswordPolicy.js';
156
168
  export { MAXLENGTH as PASSWORD_POLICY_MAXLENGTH, MINLENGTH as PASSWORD_POLICY_MINLENGTH, passwordPolicyCheck, } from './utils/PasswordPolicy.js';
169
+ export { isQaUserEmail, qaUserEmail } from './utils/qa-user.utils.js';
157
170
  export { deriveSecondaryStorageStatus, type SecondaryStorageStatus, } from './utils/secondaryStorageStatus.utils.js';
158
171
  export { allSettledResultsCounts, getFulfilledPromises, getRejectedPromises, getSettledSummary, } from './utils/settledPromises.util.js';
159
172
  export { isValidAwsArn, isValidCIDR, isValidCIDRList, isValidClientName, isValidHostname, isValidPrivateLinkRegion, normalizeCIDRList, } from './utils/string-validation.utils.js';