@camunda/ccma-shared-types 0.1.3 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/config/camundi-permission-rules.types.d.ts +5 -0
  2. package/dist/config/camundi-permission-rules.types.js.map +1 -1
  3. package/dist/constants/failoverRegionPairs.const.d.ts +11 -0
  4. package/dist/constants/failoverRegionPairs.const.js +17 -0
  5. package/dist/constants/failoverRegionPairs.const.js.map +7 -0
  6. package/dist/constants/misc.const.d.ts +7 -0
  7. package/dist/constants/misc.const.js +2 -0
  8. package/dist/constants/misc.const.js.map +2 -2
  9. package/dist/constants/trialExtensionSurvey.const.js +18 -34
  10. package/dist/constants/trialExtensionSurvey.const.js.map +2 -2
  11. package/dist/dtos/ClusterSpecHistory.dto.d.ts +24 -0
  12. package/dist/dtos/ClusterSpecHistory.dto.js +1 -0
  13. package/dist/dtos/ClusterSpecHistory.dto.js.map +7 -0
  14. package/dist/dtos/CommonCluster.dto.d.ts +64 -6
  15. package/dist/dtos/ConsoleCluster.dto.d.ts +7 -0
  16. package/dist/dtos/ControlV2.dto.d.ts +177 -0
  17. package/dist/dtos/ControlV2.dto.js +1 -0
  18. package/dist/dtos/ControlV2.dto.js.map +7 -0
  19. package/dist/dtos/ExternalWebapp.dto.d.ts +89 -0
  20. package/dist/dtos/ExternalWebapp.dto.js +1 -0
  21. package/dist/dtos/ExternalWebapp.dto.js.map +7 -0
  22. package/dist/dtos/Generations.dto.js.map +2 -2
  23. package/dist/dtos/K8sContext.dto.d.ts +1 -0
  24. package/dist/dtos/SalesPlan.dto.d.ts +7 -2
  25. package/dist/dtos/SalesPlan.dto.js +10 -2
  26. package/dist/dtos/SalesPlan.dto.js.map +2 -2
  27. package/dist/dtos/StorybookConfig.dto.d.ts +39 -0
  28. package/dist/dtos/StorybookConfig.dto.js +1 -0
  29. package/dist/dtos/StorybookConfig.dto.js.map +7 -0
  30. package/dist/enums/AuditEntity.enum.d.ts +1 -0
  31. package/dist/enums/AuditEntity.enum.js +1 -0
  32. package/dist/enums/AuditEntity.enum.js.map +2 -2
  33. package/dist/enums/OrganizationRole.enum.d.ts +0 -2
  34. package/dist/enums/OrganizationRole.enum.js +0 -2
  35. package/dist/enums/OrganizationRole.enum.js.map +2 -2
  36. package/dist/enums/SystemAuditEntity.enum.d.ts +2 -1
  37. package/dist/enums/SystemAuditEntity.enum.js +1 -0
  38. package/dist/enums/SystemAuditEntity.enum.js.map +2 -2
  39. package/dist/index.d.ts +8 -3
  40. package/dist/index.js +9 -17
  41. package/dist/index.js.map +2 -2
  42. package/dist/permissions/combo.js +3 -0
  43. package/dist/permissions/combo.js.map +2 -2
  44. package/dist/permissions/console.permissions.d.ts +2 -0
  45. package/dist/permissions/console.permissions.js +7 -0
  46. package/dist/permissions/console.permissions.js.map +2 -2
  47. package/dist/permissions/profile.permissions.d.ts +14 -8
  48. package/dist/permissions/profile.permissions.js +22 -123
  49. package/dist/permissions/profile.permissions.js.map +2 -2
  50. package/dist/types/SalesPlanType.type.d.ts +1 -1
  51. package/dist/types/Telemetry.type.js +4 -6
  52. package/dist/types/Telemetry.type.js.map +2 -2
  53. package/dist/utils/labelValidator.utils.js +1 -1
  54. package/dist/utils/labelValidator.utils.js.map +2 -2
  55. package/dist/utils/orgs/OrgHelper.js.map +2 -2
  56. package/dist/utils/user.utils.js.map +2 -2
  57. package/dist/utils/versionCheck.utils.js +2 -0
  58. package/dist/utils/versionCheck.utils.js.map +2 -2
  59. package/package.json +1 -1
@@ -44,6 +44,11 @@ export interface HibobEmployee {
44
44
  [DEPARTMENT]?: {
45
45
  value: string;
46
46
  };
47
+ '/work/reportsTo'?: {
48
+ value?: {
49
+ email?: string;
50
+ };
51
+ };
47
52
  work: {
48
53
  reportsTo: {
49
54
  email?: string;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/config/camundi-permission-rules.types.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 { Roles } from '../types/Roles.js'\n\n/**\n * Configuration for automatic permission augmentation for Camundis\n * based on their organizational structure (department, division, subdivision).\n */\nexport interface CamundiPermissionRules {\n /**\n * Rules based on department ID or name\n * Key: department ID (e.g., \"205882305\") or department name (e.g., \"Products\")\n * Value: array of roles to grant\n */\n departmentRules: Record<string, Roles[]>\n\n /**\n * Rules based on division name\n * Key: division name (e.g., \"Engineering\")\n * Value: array of roles to grant\n */\n divisionRules: Record<string, Roles[]>\n\n /**\n * Rules based on subdivision ID or name\n * Key: subdivision ID (e.g., \"256909487\") or name\n * Value: array of roles to grant\n */\n subdivisionRules: Record<string, Roles[]>\n}\n\n// HiBob field paths as constants\nexport const DEPARTMENT = '/work/department'\nexport const DIVISION = '/work/customColumns/column_1629151319875'\nexport const SUB_DIVISION = '/work/customColumns/column_1642024758438'\n\n/**\n * HiBob employee interface (subset of fields we need)\n */\nexport interface HibobEmployee {\n id: string\n email?: string\n '/root/email'?: {\n value: string\n }\n [DIVISION]?: {\n value: string\n }\n [SUB_DIVISION]?: {\n value: string\n }\n [DEPARTMENT]?: {\n value: string\n }\n work: {\n reportsTo: {\n email?: string\n }\n }\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 { Roles } from '../types/Roles.js'\n\n/**\n * Configuration for automatic permission augmentation for Camundis\n * based on their organizational structure (department, division, subdivision).\n */\nexport interface CamundiPermissionRules {\n /**\n * Rules based on department ID or name\n * Key: department ID (e.g., \"205882305\") or department name (e.g., \"Products\")\n * Value: array of roles to grant\n */\n departmentRules: Record<string, Roles[]>\n\n /**\n * Rules based on division name\n * Key: division name (e.g., \"Engineering\")\n * Value: array of roles to grant\n */\n divisionRules: Record<string, Roles[]>\n\n /**\n * Rules based on subdivision ID or name\n * Key: subdivision ID (e.g., \"256909487\") or name\n * Value: array of roles to grant\n */\n subdivisionRules: Record<string, Roles[]>\n}\n\n// HiBob field paths as constants\nexport const DEPARTMENT = '/work/department'\nexport const DIVISION = '/work/customColumns/column_1629151319875'\nexport const SUB_DIVISION = '/work/customColumns/column_1642024758438'\n\n/**\n * HiBob employee interface (subset of fields we need)\n */\nexport interface HibobEmployee {\n id: string\n email?: string\n '/root/email'?: {\n value: string\n }\n [DIVISION]?: {\n value: string\n }\n [SUB_DIVISION]?: {\n value: string\n }\n [DEPARTMENT]?: {\n value: string\n }\n '/work/reportsTo'?: {\n value?: {\n email?: string\n }\n }\n work: {\n reportsTo: {\n email?: string\n }\n }\n}\n"],
5
5
  "mappings": "AAoCO,MAAM,aAAa;AACnB,MAAM,WAAW;AACjB,MAAM,eAAe;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Region pairs supported for cross-region failover (#9120). Failover is only
3
+ * offered for dual-region clusters whose primary and secondary regions form
4
+ * one of these reverse-region pairs — cluster creation must be supported in
5
+ * both directions. Both directions of each pair are listed.
6
+ *
7
+ * Shared between console-backend (FailoverRouter guard) and c4 (hiding the
8
+ * failover action for unsupported pairs).
9
+ */
10
+ export declare const SUPPORTED_FAILOVER_REGION_PAIRS: ReadonlySet<string>;
11
+ export declare function isSupportedFailoverRegionPair(regionA: string | undefined, regionB: string | undefined): boolean;
@@ -0,0 +1,17 @@
1
+ const SUPPORTED_FAILOVER_REGION_PAIRS = /* @__PURE__ */ new Set([
2
+ "us-east-2:us-west-2",
3
+ "us-west-2:us-east-2",
4
+ "us-east-2:us-east-1",
5
+ "us-east-1:us-east-2"
6
+ ]);
7
+ function isSupportedFailoverRegionPair(regionA, regionB) {
8
+ if (!regionA || !regionB) return false;
9
+ return SUPPORTED_FAILOVER_REGION_PAIRS.has(
10
+ `${regionA.toLowerCase()}:${regionB.toLowerCase()}`
11
+ );
12
+ }
13
+ export {
14
+ SUPPORTED_FAILOVER_REGION_PAIRS,
15
+ isSupportedFailoverRegionPair
16
+ };
17
+ //# sourceMappingURL=failoverRegionPairs.const.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/constants/failoverRegionPairs.const.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/**\n * Region pairs supported for cross-region failover (#9120). Failover is only\n * offered for dual-region clusters whose primary and secondary regions form\n * one of these reverse-region pairs \u2014 cluster creation must be supported in\n * both directions. Both directions of each pair are listed.\n *\n * Shared between console-backend (FailoverRouter guard) and c4 (hiding the\n * failover action for unsupported pairs).\n */\nexport const SUPPORTED_FAILOVER_REGION_PAIRS: ReadonlySet<string> = new Set([\n 'us-east-2:us-west-2',\n 'us-west-2:us-east-2',\n 'us-east-2:us-east-1',\n 'us-east-1:us-east-2',\n])\n\nexport function isSupportedFailoverRegionPair(\n regionA: string | undefined,\n regionB: string | undefined,\n): boolean {\n if (!regionA || !regionB) return false\n return SUPPORTED_FAILOVER_REGION_PAIRS.has(\n `${regionA.toLowerCase()}:${regionB.toLowerCase()}`,\n )\n}\n"],
5
+ "mappings": "AAeO,MAAM,kCAAuD,oBAAI,IAAI;AAAA,EAC1E;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAEM,SAAS,8BACd,SACA,SACS;AACT,MAAI,CAAC,WAAW,CAAC,QAAS,QAAO;AACjC,SAAO,gCAAgC;AAAA,IACrC,GAAG,QAAQ,YAAY,CAAC,IAAI,QAAQ,YAAY,CAAC;AAAA,EACnD;AACF;",
6
+ "names": []
7
+ }
@@ -16,6 +16,13 @@ export declare const MINIMUM_EYEPAIRS: {
16
16
  CLUSTER_MODIFICATION: number;
17
17
  };
18
18
  export declare const MAX_HARDWARE_PACKAGE_COUNT = 4;
19
+ /**
20
+ * Minimum cluster (zeebe) version for the Optimize data-filters feature. Shared by
21
+ * the c4 settings tile, the new-cluster default, and CRD spec generation so the gate
22
+ * stays consistent. Stricter than the operator's own gate (Camunda >= 8.9.0-alpha1,
23
+ * where the exporter starts honoring the filters) — this is the product rollout gate.
24
+ */
25
+ export declare const OPTIMIZE_FILTERING_MIN_VERSION = "8.10.0-alpha1";
19
26
  export declare const SENTRY: {
20
27
  dsn: {
21
28
  trial: string;
@@ -18,6 +18,7 @@ const MINIMUM_EYEPAIRS = {
18
18
  CLUSTER_MODIFICATION: 1
19
19
  };
20
20
  const MAX_HARDWARE_PACKAGE_COUNT = 4;
21
+ const OPTIMIZE_FILTERING_MIN_VERSION = "8.10.0-alpha1";
21
22
  const SENTRY = {
22
23
  dsn: {
23
24
  trial: "https://a91625f8d3e1b34690588504ed020e14@o4507463051378688.ingest.de.sentry.io/4507463055376464",
@@ -107,6 +108,7 @@ export {
107
108
  MAX_LENGTH_CLUSTER_NAME,
108
109
  MINIMUM_EYEPAIRS,
109
110
  NAMES_OF_ENTERPRISE_SALESPLANS_WITH_SLEEPING_CLUSTERS,
111
+ OPTIMIZE_FILTERING_MIN_VERSION,
110
112
  SECRETS_MAX_LENGTH,
111
113
  SENTRY,
112
114
  STARTING_PRICE_PER_MONTH_IN_EURO,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/constants/misc.const.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\nexport const CONSOLE_API_USER_ID = 'console-api'\nexport const TEMPORARY_CLUSTER_NAME = 'Get Started'\nexport type Stage = 'local' | 'dev' | 'int' | 'prod'\nexport const HOTBACKUP_MIN_CREATE_PERIOD = 1000 * 60 * 60 * 0.25 // 15 minutes\n\nexport const SECRETS_MAX_LENGTH = 4096\nexport const FIRSTNAME_LASTNAME_MAX_LENGTH = 255\n\nexport const STARTING_PRICE_PER_MONTH_IN_EURO = 99\n\nexport const MAX_LENGTH_CLUSTER_NAME = 50\n\nexport const NAMES_OF_ENTERPRISE_SALESPLANS_WITH_SLEEPING_CLUSTERS = [\n 'CELP with sleeping clusters',\n 'Camunda Partner',\n]\n\nexport const MINIMUM_EYEPAIRS = {\n CLUSTER_DELETION: 3,\n CLUSTER_GENERATION_UPDATE: 2,\n CLUSTER_PLAN_UPDATE: 2,\n CLUSTER_PLAN_TYPE_UPDATE: 2,\n CLUSTER_PLAN_MODIFICATION: 1,\n CLUSTER_MODIFICATION: 1,\n}\n\nexport const MAX_HARDWARE_PACKAGE_COUNT = 4\n\nexport const SENTRY = {\n dsn: {\n trial:\n 'https://a91625f8d3e1b34690588504ed020e14@o4507463051378688.ingest.de.sentry.io/4507463055376464',\n console: {\n frontend:\n 'https://bbf8e6b13f91f7a49ab0b7f079ae8cc0@o132036.ingest.us.sentry.io/4507537062494208',\n backend:\n 'https://43de708d3ad0199f8c23975a3fd43aa0@o132036.ingest.us.sentry.io/4507537080188928',\n },\n accounts: {\n frontend:\n 'https://49c5d54e4d05418feb80cd4085fa32bd@o132036.ingest.us.sentry.io/4507537094541312',\n backend:\n 'https://d120a5f0acbf132b1edf58008c674164@o132036.ingest.us.sentry.io/4507537100505088',\n },\n },\n applicationKey: {\n console: 'ccma-console-frontend-0xDEADBEEF',\n accounts: 'ccma-accounts-frontend-0xDEADBEEF',\n },\n enabled: ['dev', 'int', 'prod'],\n ignoreTransactions: ['/events', '/assets', '/metrics'],\n ignoreErrors: [\n 'No activity within 120000 milliseconds. No response received. Reconnecting.',\n 'network error',\n 'Load failed',\n 'Non-Error promise rejection captured with value: Could not clear consent from root domain.',\n 'NetworkError when attempting to fetch resource.',\n 'The initialization timeout of 3000ms has been hit before the network request has completed.',\n 'Non-Error promise rejection captured with value: Object Not Found Matching Id:3, MethodName:update, ParamCount:4',\n 'Non-Error promise rejection captured with value: Object Not Found Matching Id:3, MethodName:simulateEvent, ParamCount:1',\n `Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node.`,\n `Failed to execute 'createPolicy' on 'TrustedTypePolicyFactory': Policy with name \"default\" already exists.`,\n // SSE errors after reload\n `TypeError: Error in input stream`,\n `TypeError: Failed to fetch`,\n `that is not 200. Aborting the connection.`,\n `chars received. Reconnecting.`,\n ],\n // value pair: [preprod, prod]\n config: {\n tracesSampleRate: {\n frontend: {\n accounts: [0.1, 0.005],\n console: [0.2, 0.01],\n },\n backend: {\n accounts: [0.1, 0.005],\n console: [0.0002, 0.0005],\n },\n },\n replaysSessionSampleRate: {\n frontend: {\n accounts: [0.005, 0.001],\n console: [0.005, 0.001],\n },\n },\n replaysOnErrorSampleRate: {\n frontend: {\n accounts: [0.005, 0.001],\n console: [0.005, 0.001],\n },\n },\n profilesSampleRate: {\n backend: {\n accounts: [0.001, 0.0002],\n console: [0.001, 0.0002],\n },\n frontend: {\n accounts: [0.001, 0.0002],\n console: [0.001, 0.0002],\n },\n },\n },\n configWeight: (env: string, values: number[]) => {\n if (values && values.length === 2) {\n if (env === 'prod') {\n return values[1]\n } else {\n return values[0]\n }\n }\n return 0.1\n },\n}\n"],
5
- "mappings": "AAMO,MAAM,sBAAsB;AAC5B,MAAM,yBAAyB;AAE/B,MAAM,8BAA8B,MAAO,KAAK,KAAK;AAErD,MAAM,qBAAqB;AAC3B,MAAM,gCAAgC;AAEtC,MAAM,mCAAmC;AAEzC,MAAM,0BAA0B;AAEhC,MAAM,wDAAwD;AAAA,EACnE;AAAA,EACA;AACF;AAEO,MAAM,mBAAmB;AAAA,EAC9B,kBAAkB;AAAA,EAClB,2BAA2B;AAAA,EAC3B,qBAAqB;AAAA,EACrB,0BAA0B;AAAA,EAC1B,2BAA2B;AAAA,EAC3B,sBAAsB;AACxB;AAEO,MAAM,6BAA6B;AAEnC,MAAM,SAAS;AAAA,EACpB,KAAK;AAAA,IACH,OACE;AAAA,IACF,SAAS;AAAA,MACP,UACE;AAAA,MACF,SACE;AAAA,IACJ;AAAA,IACA,UAAU;AAAA,MACR,UACE;AAAA,MACF,SACE;AAAA,IACJ;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,SAAS;AAAA,IACT,UAAU;AAAA,EACZ;AAAA,EACA,SAAS,CAAC,OAAO,OAAO,MAAM;AAAA,EAC9B,oBAAoB,CAAC,WAAW,WAAW,UAAU;AAAA,EACrD,cAAc;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA;AAAA,EAEA,QAAQ;AAAA,IACN,kBAAkB;AAAA,MAChB,UAAU;AAAA,QACR,UAAU,CAAC,KAAK,IAAK;AAAA,QACrB,SAAS,CAAC,KAAK,IAAI;AAAA,MACrB;AAAA,MACA,SAAS;AAAA,QACP,UAAU,CAAC,KAAK,IAAK;AAAA,QACrB,SAAS,CAAC,MAAQ,IAAM;AAAA,MAC1B;AAAA,IACF;AAAA,IACA,0BAA0B;AAAA,MACxB,UAAU;AAAA,QACR,UAAU,CAAC,MAAO,IAAK;AAAA,QACvB,SAAS,CAAC,MAAO,IAAK;AAAA,MACxB;AAAA,IACF;AAAA,IACA,0BAA0B;AAAA,MACxB,UAAU;AAAA,QACR,UAAU,CAAC,MAAO,IAAK;AAAA,QACvB,SAAS,CAAC,MAAO,IAAK;AAAA,MACxB;AAAA,IACF;AAAA,IACA,oBAAoB;AAAA,MAClB,SAAS;AAAA,QACP,UAAU,CAAC,MAAO,IAAM;AAAA,QACxB,SAAS,CAAC,MAAO,IAAM;AAAA,MACzB;AAAA,MACA,UAAU;AAAA,QACR,UAAU,CAAC,MAAO,IAAM;AAAA,QACxB,SAAS,CAAC,MAAO,IAAM;AAAA,MACzB;AAAA,IACF;AAAA,EACF;AAAA,EACA,cAAc,CAAC,KAAa,WAAqB;AAC/C,QAAI,UAAU,OAAO,WAAW,GAAG;AACjC,UAAI,QAAQ,QAAQ;AAClB,eAAO,OAAO,CAAC;AAAA,MACjB,OAAO;AACL,eAAO,OAAO,CAAC;AAAA,MACjB;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;",
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\nexport const CONSOLE_API_USER_ID = 'console-api'\nexport const TEMPORARY_CLUSTER_NAME = 'Get Started'\nexport type Stage = 'local' | 'dev' | 'int' | 'prod'\nexport const HOTBACKUP_MIN_CREATE_PERIOD = 1000 * 60 * 60 * 0.25 // 15 minutes\n\nexport const SECRETS_MAX_LENGTH = 4096\nexport const FIRSTNAME_LASTNAME_MAX_LENGTH = 255\n\nexport const STARTING_PRICE_PER_MONTH_IN_EURO = 99\n\nexport const MAX_LENGTH_CLUSTER_NAME = 50\n\nexport const NAMES_OF_ENTERPRISE_SALESPLANS_WITH_SLEEPING_CLUSTERS = [\n 'CELP with sleeping clusters',\n 'Camunda Partner',\n]\n\nexport const MINIMUM_EYEPAIRS = {\n CLUSTER_DELETION: 3,\n CLUSTER_GENERATION_UPDATE: 2,\n CLUSTER_PLAN_UPDATE: 2,\n CLUSTER_PLAN_TYPE_UPDATE: 2,\n CLUSTER_PLAN_MODIFICATION: 1,\n CLUSTER_MODIFICATION: 1,\n}\n\nexport const MAX_HARDWARE_PACKAGE_COUNT = 4\n\n/**\n * Minimum cluster (zeebe) version for the Optimize data-filters feature. Shared by\n * the c4 settings tile, the new-cluster default, and CRD spec generation so the gate\n * stays consistent. Stricter than the operator's own gate (Camunda >= 8.9.0-alpha1,\n * where the exporter starts honoring the filters) \u2014 this is the product rollout gate.\n */\nexport const OPTIMIZE_FILTERING_MIN_VERSION = '8.10.0-alpha1'\n\nexport const SENTRY = {\n dsn: {\n trial:\n 'https://a91625f8d3e1b34690588504ed020e14@o4507463051378688.ingest.de.sentry.io/4507463055376464',\n console: {\n frontend:\n 'https://bbf8e6b13f91f7a49ab0b7f079ae8cc0@o132036.ingest.us.sentry.io/4507537062494208',\n backend:\n 'https://43de708d3ad0199f8c23975a3fd43aa0@o132036.ingest.us.sentry.io/4507537080188928',\n },\n accounts: {\n frontend:\n 'https://49c5d54e4d05418feb80cd4085fa32bd@o132036.ingest.us.sentry.io/4507537094541312',\n backend:\n 'https://d120a5f0acbf132b1edf58008c674164@o132036.ingest.us.sentry.io/4507537100505088',\n },\n },\n applicationKey: {\n console: 'ccma-console-frontend-0xDEADBEEF',\n accounts: 'ccma-accounts-frontend-0xDEADBEEF',\n },\n enabled: ['dev', 'int', 'prod'],\n ignoreTransactions: ['/events', '/assets', '/metrics'],\n ignoreErrors: [\n 'No activity within 120000 milliseconds. No response received. Reconnecting.',\n 'network error',\n 'Load failed',\n 'Non-Error promise rejection captured with value: Could not clear consent from root domain.',\n 'NetworkError when attempting to fetch resource.',\n 'The initialization timeout of 3000ms has been hit before the network request has completed.',\n 'Non-Error promise rejection captured with value: Object Not Found Matching Id:3, MethodName:update, ParamCount:4',\n 'Non-Error promise rejection captured with value: Object Not Found Matching Id:3, MethodName:simulateEvent, ParamCount:1',\n `Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node.`,\n `Failed to execute 'createPolicy' on 'TrustedTypePolicyFactory': Policy with name \"default\" already exists.`,\n // SSE errors after reload\n `TypeError: Error in input stream`,\n `TypeError: Failed to fetch`,\n `that is not 200. Aborting the connection.`,\n `chars received. Reconnecting.`,\n ],\n // value pair: [preprod, prod]\n config: {\n tracesSampleRate: {\n frontend: {\n accounts: [0.1, 0.005],\n console: [0.2, 0.01],\n },\n backend: {\n accounts: [0.1, 0.005],\n console: [0.0002, 0.0005],\n },\n },\n replaysSessionSampleRate: {\n frontend: {\n accounts: [0.005, 0.001],\n console: [0.005, 0.001],\n },\n },\n replaysOnErrorSampleRate: {\n frontend: {\n accounts: [0.005, 0.001],\n console: [0.005, 0.001],\n },\n },\n profilesSampleRate: {\n backend: {\n accounts: [0.001, 0.0002],\n console: [0.001, 0.0002],\n },\n frontend: {\n accounts: [0.001, 0.0002],\n console: [0.001, 0.0002],\n },\n },\n },\n configWeight: (env: string, values: number[]) => {\n if (values && values.length === 2) {\n if (env === 'prod') {\n return values[1]\n } else {\n return values[0]\n }\n }\n return 0.1\n },\n}\n"],
5
+ "mappings": "AAMO,MAAM,sBAAsB;AAC5B,MAAM,yBAAyB;AAE/B,MAAM,8BAA8B,MAAO,KAAK,KAAK;AAErD,MAAM,qBAAqB;AAC3B,MAAM,gCAAgC;AAEtC,MAAM,mCAAmC;AAEzC,MAAM,0BAA0B;AAEhC,MAAM,wDAAwD;AAAA,EACnE;AAAA,EACA;AACF;AAEO,MAAM,mBAAmB;AAAA,EAC9B,kBAAkB;AAAA,EAClB,2BAA2B;AAAA,EAC3B,qBAAqB;AAAA,EACrB,0BAA0B;AAAA,EAC1B,2BAA2B;AAAA,EAC3B,sBAAsB;AACxB;AAEO,MAAM,6BAA6B;AAQnC,MAAM,iCAAiC;AAEvC,MAAM,SAAS;AAAA,EACpB,KAAK;AAAA,IACH,OACE;AAAA,IACF,SAAS;AAAA,MACP,UACE;AAAA,MACF,SACE;AAAA,IACJ;AAAA,IACA,UAAU;AAAA,MACR,UACE;AAAA,MACF,SACE;AAAA,IACJ;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,SAAS;AAAA,IACT,UAAU;AAAA,EACZ;AAAA,EACA,SAAS,CAAC,OAAO,OAAO,MAAM;AAAA,EAC9B,oBAAoB,CAAC,WAAW,WAAW,UAAU;AAAA,EACrD,cAAc;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA;AAAA,EAEA,QAAQ;AAAA,IACN,kBAAkB;AAAA,MAChB,UAAU;AAAA,QACR,UAAU,CAAC,KAAK,IAAK;AAAA,QACrB,SAAS,CAAC,KAAK,IAAI;AAAA,MACrB;AAAA,MACA,SAAS;AAAA,QACP,UAAU,CAAC,KAAK,IAAK;AAAA,QACrB,SAAS,CAAC,MAAQ,IAAM;AAAA,MAC1B;AAAA,IACF;AAAA,IACA,0BAA0B;AAAA,MACxB,UAAU;AAAA,QACR,UAAU,CAAC,MAAO,IAAK;AAAA,QACvB,SAAS,CAAC,MAAO,IAAK;AAAA,MACxB;AAAA,IACF;AAAA,IACA,0BAA0B;AAAA,MACxB,UAAU;AAAA,QACR,UAAU,CAAC,MAAO,IAAK;AAAA,QACvB,SAAS,CAAC,MAAO,IAAK;AAAA,MACxB;AAAA,IACF;AAAA,IACA,oBAAoB;AAAA,MAClB,SAAS;AAAA,QACP,UAAU,CAAC,MAAO,IAAM;AAAA,QACxB,SAAS,CAAC,MAAO,IAAM;AAAA,MACzB;AAAA,MACA,UAAU;AAAA,QACR,UAAU,CAAC,MAAO,IAAM;AAAA,QACxB,SAAS,CAAC,MAAO,IAAM;AAAA,MACzB;AAAA,IACF;AAAA,EACF;AAAA,EACA,cAAc,CAAC,KAAa,WAAqB;AAC/C,QAAI,UAAU,OAAO,WAAW,GAAG;AACjC,UAAI,QAAQ,QAAQ;AAClB,eAAO,OAAO,CAAC;AAAA,MACjB,OAAO;AACL,eAAO,OAAO,CAAC;AAAA,MACjB;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;",
6
6
  "names": []
7
7
  }
@@ -1,49 +1,33 @@
1
1
  const TRIAL_EXTENSION_SURVEY_QUESTIONS = [
2
2
  {
3
- id: "use_case",
4
- question: "What is the primary use case you are evaluating Camunda for?",
5
- type: "select",
6
- options: [
7
- "Microservices orchestration",
8
- "Human workflow / task management",
9
- "Event-driven automation",
10
- "RPA / legacy system integration",
11
- "Other"
12
- ],
13
- required: true
14
- },
15
- {
16
- id: "blockers",
17
- question: "What prevented you from completing your evaluation during the initial trial?",
3
+ id: "evaluating",
4
+ question: "What are you evaluating during this trial?",
18
5
  type: "multiselect",
19
6
  options: [
20
- "Not enough time",
21
- "Technical complexity",
22
- "Missing features or integrations",
23
- "Waiting for stakeholder approval",
24
- "Comparing with alternatives",
25
- "Other"
7
+ "A specific use case / proof of concept / demo",
8
+ "Testing a new capability or alpha feature",
9
+ "Just exploring \u2014 no specific project yet"
26
10
  ],
27
11
  required: true
28
12
  },
29
13
  {
30
- id: "missing_features",
31
- question: "Which specific features or integrations do you still need to evaluate?",
32
- type: "text",
33
- required: false
34
- },
35
- {
36
- id: "team_size",
37
- question: "How many people in your organization would be using Camunda regularly?",
14
+ id: "timeline",
15
+ question: "What's your timeline for a production decision?",
38
16
  type: "select",
39
- options: ["1\u20135", "6\u201320", "21\u2013100", "100+"],
17
+ options: ["1\u20133 months", "3\u20136 months", "6+ months"],
40
18
  required: true
41
19
  },
42
20
  {
43
- id: "decision_timeline",
44
- question: "What would help you make a purchase decision in the next 30 days?",
45
- type: "text",
46
- required: false
21
+ id: "next_steps",
22
+ question: "What would help you move forward?",
23
+ type: "multiselect",
24
+ options: [
25
+ "More time to run tests",
26
+ "Technical guidance / architecture review",
27
+ "A conversation with our team",
28
+ "Nothing \u2014 just need more time"
29
+ ],
30
+ required: true
47
31
  }
48
32
  ];
49
33
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/constants/trialExtensionSurvey.const.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\nexport interface TrialExtensionSurveyQuestion {\n id: string\n question: string\n type: 'text' | 'select' | 'multiselect'\n options?: string[]\n required: boolean\n}\n\nexport interface TrialExtensionSurveyAnswer {\n questionId: string\n answer: string | string[]\n}\n\nexport const TRIAL_EXTENSION_SURVEY_QUESTIONS: TrialExtensionSurveyQuestion[] =\n [\n {\n id: 'use_case',\n question: 'What is the primary use case you are evaluating Camunda for?',\n type: 'select',\n options: [\n 'Microservices orchestration',\n 'Human workflow / task management',\n 'Event-driven automation',\n 'RPA / legacy system integration',\n 'Other',\n ],\n required: true,\n },\n {\n id: 'blockers',\n question:\n 'What prevented you from completing your evaluation during the initial trial?',\n type: 'multiselect',\n options: [\n 'Not enough time',\n 'Technical complexity',\n 'Missing features or integrations',\n 'Waiting for stakeholder approval',\n 'Comparing with alternatives',\n 'Other',\n ],\n required: true,\n },\n {\n id: 'missing_features',\n question:\n 'Which specific features or integrations do you still need to evaluate?',\n type: 'text',\n required: false,\n },\n {\n id: 'team_size',\n question:\n 'How many people in your organization would be using Camunda regularly?',\n type: 'select',\n options: ['1\u20135', '6\u201320', '21\u2013100', '100+'],\n required: true,\n },\n {\n id: 'decision_timeline',\n question:\n 'What would help you make a purchase decision in the next 30 days?',\n type: 'text',\n required: false,\n },\n ]\n"],
5
- "mappings": "AAmBO,MAAM,mCACX;AAAA,EACE;AAAA,IACE,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,UACE;AAAA,IACF,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,UACE;AAAA,IACF,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,UACE;AAAA,IACF,MAAM;AAAA,IACN,SAAS,CAAC,YAAO,aAAQ,eAAU,MAAM;AAAA,IACzC,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,UACE;AAAA,IACF,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AACF;",
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\nexport interface TrialExtensionSurveyQuestion {\n id: string\n question: string\n type: 'text' | 'select' | 'multiselect'\n options?: string[]\n required: boolean\n}\n\nexport interface TrialExtensionSurveyAnswer {\n questionId: string\n answer: string | string[]\n}\n\nexport const TRIAL_EXTENSION_SURVEY_QUESTIONS: TrialExtensionSurveyQuestion[] =\n [\n {\n id: 'evaluating',\n question: 'What are you evaluating during this trial?',\n type: 'multiselect',\n options: [\n 'A specific use case / proof of concept / demo',\n 'Testing a new capability or alpha feature',\n 'Just exploring \u2014 no specific project yet',\n ],\n required: true,\n },\n {\n id: 'timeline',\n question: \"What's your timeline for a production decision?\",\n type: 'select',\n options: ['1\u20133 months', '3\u20136 months', '6+ months'],\n required: true,\n },\n {\n id: 'next_steps',\n question: 'What would help you move forward?',\n type: 'multiselect',\n options: [\n 'More time to run tests',\n 'Technical guidance / architecture review',\n 'A conversation with our team',\n 'Nothing \u2014 just need more time',\n ],\n required: true,\n },\n ]\n"],
5
+ "mappings": "AAmBO,MAAM,mCACX;AAAA,EACE;AAAA,IACE,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,MAAM;AAAA,IACN,SAAS,CAAC,mBAAc,mBAAc,WAAW;AAAA,IACjD,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,UAAU;AAAA,EACZ;AACF;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,24 @@
1
+ /** Who made a cluster spec change (mirrors the console-backend entity). */
2
+ export interface ClusterSpecChangeActor {
3
+ type: 'user' | 'system' | 'migration';
4
+ id: string;
5
+ }
6
+ /**
7
+ * One entry in a cluster's spec-change history. `snapshot` carries a full spec
8
+ * in `data`; `diff` carries per-key `{ from, to }` changes.
9
+ */
10
+ export interface ClusterSpecChange {
11
+ timestamp: string;
12
+ type: 'snapshot' | 'diff';
13
+ actor: ClusterSpecChangeActor;
14
+ data: Record<string, unknown>;
15
+ }
16
+ /**
17
+ * Cluster spec-change history, exposed on the cluster detail read for callers
18
+ * with read-all-cluster-info. Populated by the console backend
19
+ * (`ClusterSpecHistoryData`).
20
+ */
21
+ export interface ClusterSpecHistory {
22
+ lastFullSpec: Record<string, unknown>;
23
+ changes: ClusterSpecChange[];
24
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=ClusterSpecHistory.dto.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -1,4 +1,59 @@
1
1
  import type { ClusterPlanTypeDto } from './ClusterPlanType.dto.js';
2
+ /** Inclusion/exclusion pattern lists. Exclusion takes precedence over inclusion;
3
+ * an empty inclusion list includes everything. */
4
+ export interface OptimizeFilteringIncludeExclude {
5
+ inclusion?: string[];
6
+ exclusion?: string[];
7
+ }
8
+ /**
9
+ * Optimize Elasticsearch-exporter record filters. Mirrors the operator CRD shape
10
+ * (`spec.zeebe.exporterFilters`, camunda-operator#5683) so it maps through 1:1.
11
+ * `variableName.startWith` matches variable names by prefix — the nesting keeps
12
+ * room for `endWith`/exact match types without a breaking change.
13
+ */
14
+ export interface OptimizeFilteringConfig {
15
+ processDefinition?: OptimizeFilteringIncludeExclude;
16
+ variableName?: {
17
+ startWith?: OptimizeFilteringIncludeExclude;
18
+ };
19
+ }
20
+ /**
21
+ * PATCH-request variant of OptimizeFilteringConfig. Lists may arrive as null (older
22
+ * clients sent null for empty lists); the controller coerces null to undefined and
23
+ * reconstructs a clean OptimizeFilteringConfig before persisting.
24
+ */
25
+ export interface OptimizeFilteringPatch {
26
+ processDefinition?: {
27
+ inclusion?: string[] | null;
28
+ exclusion?: string[] | null;
29
+ };
30
+ variableName?: {
31
+ startWith?: {
32
+ inclusion?: string[] | null;
33
+ exclusion?: string[] | null;
34
+ };
35
+ };
36
+ }
37
+ /**
38
+ * BYOIDP Phase 1 (#3190): non-secret config for one custom OIDC provider.
39
+ * The client secret is NEVER part of this shape — it is written as a K8s Secret
40
+ * (`idp-config-{clusterId}`, keyed by `name`) and referenced from the CR only.
41
+ */
42
+ export interface ExternalIdpConfig {
43
+ /** Registration id. Uppercase letters + digits, starts with a letter (`^[A-Z][A-Z0-9]*$`).
44
+ * Doubles as the Secret data key, the `..._OIDC_<NAME>_*` env-var segment, and `clientSecretRef.key`. */
45
+ name: string;
46
+ /** Friendly display name shown on the login picker. */
47
+ clientName: string;
48
+ issuerUri: string;
49
+ clientId: string;
50
+ scopes?: string[];
51
+ usernameClaim?: string;
52
+ groupsClaim?: string;
53
+ clientIdClaim?: string;
54
+ /** Rotation marker — bumped on every secret write so the CR changes and pods roll. */
55
+ secretUpdatedAt?: string;
56
+ }
2
57
  export interface CommonClusterDto {
3
58
  ownerId: string;
4
59
  uuid: string;
@@ -45,6 +100,11 @@ export interface CommonClusterDto {
45
100
  */
46
101
  backupRegionCodes?: string[];
47
102
  backupRegionId?: string | null;
103
+ /**
104
+ * True once the operator's initial primary→secondary bucket sync has
105
+ * completed. Failover is only offered when this is true.
106
+ */
107
+ secondaryBucketSyncCompleted?: boolean;
48
108
  encryption?: string;
49
109
  primaryEncryptionKeyId?: string | null;
50
110
  secondaryEncryptionKeyId?: string | null;
@@ -55,17 +115,15 @@ export interface CommonClusterDto {
55
115
  clientCategories?: string[];
56
116
  };
57
117
  swagger?: boolean;
118
+ appIntegrationsEnabled?: boolean;
58
119
  optimizeEnabled?: boolean;
59
- optimizeFiltering?: {
60
- includeProcessIds?: string[];
61
- excludeProcessIds?: string[];
62
- includeVariableNames?: string[];
63
- excludeVariableNames?: string[];
64
- };
120
+ optimizeFiltering?: OptimizeFilteringConfig;
65
121
  };
66
122
  rba?: boolean;
67
123
  identityBackendChecksEnabled?: boolean;
68
124
  multiTenancyEnabled?: boolean;
125
+ externalIdpEnabled?: boolean;
126
+ externalIdpConfig?: ExternalIdpConfig;
69
127
  enforceGroups?: boolean;
70
128
  playMode?: boolean;
71
129
  mcpEnabled?: boolean;
@@ -1,6 +1,7 @@
1
1
  import type { ClusterLabels } from '../types/CamundaClusterLabels.type.js';
2
2
  import type { ClusterIpWhitelistDto } from './ClusterIpWhitelist.dto.js';
3
3
  import type { ClusterPlanDto } from './ClusterPlan.dto.js';
4
+ import type { ClusterSpecHistory } from './ClusterSpecHistory.dto.js';
4
5
  import type { CommonClusterDto } from './CommonCluster.dto.js';
5
6
  import type { GenerationDto } from './Generations.dto.js';
6
7
  import type { K8sContextDto } from './K8sContext.dto.js';
@@ -13,4 +14,10 @@ export interface ConsoleClusterDto extends CommonClusterDto {
13
14
  hasOptimize?: boolean;
14
15
  hasIdentity?: boolean;
15
16
  ipWhitelist?: ClusterIpWhitelistDto[];
17
+ /**
18
+ * Spec-change history, present when the caller has read-all-cluster-info
19
+ * (the backend exposes it under that permission group). Backs the cluster
20
+ * "Spec Changes" tab.
21
+ */
22
+ specHistory?: ClusterSpecHistory;
16
23
  }
@@ -0,0 +1,177 @@
1
+ import type { SalesPlanType } from '../types/SalesPlanType.type.js';
2
+ /** Generic cursor-paginated response. `nextCursor === null` on the last page. */
3
+ export interface CursorPage<T> {
4
+ items: T[];
5
+ nextCursor: string | null;
6
+ }
7
+ /** Cursor pagination query params shared by all v2 list endpoints. */
8
+ export interface CursorParams {
9
+ cursor?: string;
10
+ limit?: number;
11
+ }
12
+ export interface ControlSessionUser {
13
+ id: string;
14
+ email: string;
15
+ name: string;
16
+ }
17
+ /**
18
+ * Flat map of resolved capability flags for the signed-in user, computed
19
+ * server-side from the existing JWT-claim + Auth0-metadata model (kept as-is,
20
+ * spec Q12). The shell uses these to gate navigation; the backend flattens its
21
+ * `Features` object into the subset the nav needs.
22
+ */
23
+ export type ControlResolvedPermissions = Record<string, boolean>;
24
+ export interface OrgSummaryV2Dto {
25
+ id: string;
26
+ name: string;
27
+ role: string;
28
+ clusterCount: number;
29
+ }
30
+ export interface ControlSessionDto {
31
+ user: ControlSessionUser;
32
+ permissions: ControlResolvedPermissions;
33
+ organizations: OrgSummaryV2Dto[];
34
+ }
35
+ export interface OrgListItemV2Dto {
36
+ id: string;
37
+ name: string;
38
+ /** ISO-8601; part of the cursor key. */
39
+ created: string;
40
+ internal: boolean;
41
+ salesPlanType?: SalesPlanType;
42
+ salesForceId?: string;
43
+ /** Batched per page (spec §9.4 B3); absent if the count lookup failed. */
44
+ clusterCount?: number;
45
+ }
46
+ export interface ListOrganizationsV2Params extends CursorParams {
47
+ q?: string;
48
+ sort?: 'name' | 'created' | 'internal';
49
+ order?: 'asc' | 'desc';
50
+ filter?: {
51
+ internal?: boolean;
52
+ salesPlanType?: SalesPlanType;
53
+ /** ISO-8601 lower bound on `created` (age-bucket filters). */
54
+ createdAfter?: string;
55
+ /** ISO-8601 upper bound on `created` (age-bucket filters). */
56
+ createdBefore?: string;
57
+ /**
58
+ * Restrict to these org uuids. Backs cross-backend lookups (e.g. org by
59
+ * cluster name / client id: resolve owner ids on console, then filter
60
+ * here — spec §14.1 L).
61
+ */
62
+ ids?: string[];
63
+ };
64
+ }
65
+ export interface OrgDetailV2Dto extends OrgListItemV2Dto {
66
+ /** Full detail fields are added as the detail page is built (Phase 3). */
67
+ metadata?: Record<string, unknown>;
68
+ }
69
+ export interface OrgMemberV2Dto {
70
+ userId: string;
71
+ email: string;
72
+ name?: string;
73
+ roles: string[];
74
+ status: 'active' | 'invited';
75
+ /** ISO-8601. */
76
+ invitedAt?: string;
77
+ /** ISO-8601. */
78
+ joinedAt?: string;
79
+ }
80
+ export interface ListOrgMembersV2Params extends CursorParams {
81
+ q?: string;
82
+ }
83
+ export interface ClusterListItemV2Dto {
84
+ id: string;
85
+ name: string;
86
+ orgId: string;
87
+ orgName: string;
88
+ /** Normalized server-side; augmented on the fly from the K8s watcher (§9.4 B1). */
89
+ status: string;
90
+ plan: string;
91
+ generation: string;
92
+ region: string;
93
+ /** Display-only; not a sort/filter key (§9.4 B2). */
94
+ load?: number;
95
+ updateAvailable: boolean;
96
+ /** Auto-update setting (distinct from `updateAvailable`). */
97
+ autoUpdate: boolean;
98
+ /** Release channel name, when the cluster is on one. */
99
+ channel?: string;
100
+ /** ISO-8601; part of the cursor key. */
101
+ created: string;
102
+ }
103
+ /** Detail extends the list shape; richer fields are added in Phase 3. */
104
+ export type ClusterDetailV2Dto = ClusterListItemV2Dto;
105
+ export interface ListClustersV2Params extends CursorParams {
106
+ q?: string;
107
+ sort?: 'name' | 'created';
108
+ order?: 'asc' | 'desc';
109
+ filter?: {
110
+ status?: string;
111
+ /** Cluster plan TYPE name (maps to `planType.name`; legacy param name). */
112
+ plan?: string;
113
+ /** Cluster plan name (the concrete `plan.name`, not the type). */
114
+ planName?: string;
115
+ generation?: string;
116
+ region?: string;
117
+ /** Cloud provider (resolved via the k8s-context config, like `region`). */
118
+ provider?: string;
119
+ /** Exact k8s context uuid. */
120
+ k8sContext?: string;
121
+ orgId?: string;
122
+ /** Restrict to these owner org uuids (cross-backend sales-plan filters). */
123
+ orgIds?: string[];
124
+ /** Restrict to these cluster uuids (prefilter-by-id). */
125
+ ids?: string[];
126
+ /** Auto-update on/off. */
127
+ autoUpdate?: boolean;
128
+ /** Internal (Camunda-owned) clusters only / excluded. */
129
+ internal?: boolean;
130
+ /** Only clusters with (true) / without (false) an active modification. */
131
+ hasActiveModification?: boolean;
132
+ /**
133
+ * Zeebe minor-version prefix match on the generation's versions (e.g.
134
+ * "8.7" matches zeebe 8.7.x).
135
+ */
136
+ minorVersion?: string;
137
+ /** Release channel name. */
138
+ channel?: string;
139
+ /** ISO-8601 lower bound on `created` (e.g. "created in the last 7 days"). */
140
+ createdAfter?: string;
141
+ };
142
+ }
143
+ export interface ClusterParameterOptionV2Dto {
144
+ id: string;
145
+ name: string;
146
+ }
147
+ export interface ClusterParametersV2Dto {
148
+ plans: ClusterParameterOptionV2Dto[];
149
+ generations: ClusterParameterOptionV2Dto[];
150
+ regions: ClusterParameterOptionV2Dto[];
151
+ }
152
+ /**
153
+ * Aggregated cluster distribution counts (GET /v2/clusters/facets), backing
154
+ * the list page's distribution charts and quick-filter tiles without a
155
+ * client-side full-table scan (spec §14.0 hybrid model). SQL-backed facets
156
+ * (generation/planType/channel/autoUpdate) come from GROUP BYs; status and
157
+ * provider are aggregated in-app from the K8s watcher / context config.
158
+ */
159
+ export interface ClusterFacetsV2Dto {
160
+ total: number;
161
+ status: Record<string, number>;
162
+ generation: Record<string, number>;
163
+ planType: Record<string, number>;
164
+ channel: Record<string, number>;
165
+ provider: Record<string, number>;
166
+ autoUpdate: {
167
+ on: number;
168
+ off: number;
169
+ };
170
+ /** Clusters with an active (non-archived) modification. */
171
+ activeModifications: number;
172
+ }
173
+ /** Cluster/owner resolution for a Zeebe client id (cross-backend org search). */
174
+ export interface ClusterByClientV2Dto {
175
+ clusterId: string;
176
+ orgId: string;
177
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=ControlV2.dto.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }