@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
@@ -1,92 +1,5 @@
1
- const CLOUD_TEAM_EMAILS = [
2
- "adam.urban@camunda.com",
3
- "collin.raddatz@camunda.com",
4
- "tim.schuppener@camunda.com"
5
- ];
6
- const LIMIT_EXTENDERS = [
7
- "william.vonalt@camunda.com",
8
- "victor.grund@camunda.com",
9
- "ragnar.nevries@camunda.com",
10
- "robert.emsbach@camunda.com",
11
- "jared.mcmahon@camunda.com"
12
- ];
13
- const SRE_TEAM_EMAILS = [
14
- "jonathan.ballet@camunda.com",
15
- "thanasis.petrovas@camunda.com",
16
- "thomas.polnik@camunda.com"
17
- ];
18
- const PLATFORM_SM_EMAILS = [
19
- "immanuel.monma@camunda.com",
20
- "jesse.simpson@camunda.com",
21
- "hamza.masood@camunda.com",
22
- "lars.lange@camunda.com",
23
- "leo.journel@camunda.com",
24
- "balazs.kenez@camunda.com"
25
- ];
26
- const SUPPORT_MANAGERS_EMAILS = [
27
- "garima.yadav@camunda.com",
28
- "jeffrey.stokes@camunda.com",
29
- "alexandra.corremans@camunda.com",
30
- "chris.campbell@camunda.com"
31
- ];
32
- const C8_ENGINEERING_MANAGERS_EMAILS = [
33
- "sebastian.bathke@camunda.com",
34
- "catalina.moisuc@camunda.com",
35
- "immanuel.monma@camunda.com",
36
- "joshua.windels@camunda.com",
37
- "marcos.vieira@camunda.com",
38
- "maximilian.trumpf@camunda.com",
39
- "simon.buettner@camunda.com",
40
- // schoetti is also some sort of engineering manager
41
- "michael.schoettes@camunda.com",
42
- "tassilo.weidner@camunda.com",
43
- "nicolas.pepin-perreault@camunda.com",
44
- "wolfgang.amann@camunda.com",
45
- "mathieu.stennier@camunda.com",
46
- "jason.hunter@camunda.com",
47
- "maxim.danilov@camunda.com",
48
- "stephan.epping@camunda.com",
49
- "simon.zengerling@camunda.com",
50
- "shay.matasaro@camunda.com"
51
- ];
52
- const CONSULTING_MANAGER_EMAILS = [
53
- "benjamin.hoffmann@camunda.com",
54
- "chandan.dash@camunda.com",
55
- "darren.devine@camunda.com",
56
- "hurshid.kadirov@camunda.com",
57
- "ivan.jovic@camunda.com",
58
- "michael.ferber@camunda.com",
59
- "ragnar.nevries@camunda.com",
60
- "norbert.kuchenmeister@camunda.com",
61
- "robert.emsbach@camunda.com",
62
- "victor.grund@camunda.com"
63
- ];
64
- const CSM_MANAGER_EMAIL = [
65
- "aaron.laye@camunda.com",
66
- "andreas.tollschein@camunda.com",
67
- "betsy.burt@camunda.com",
68
- "leona.schlosser@camunda.com",
69
- "yulia.sinyanskaya@camunda.com",
70
- "agnes.kelemen@camunda.com",
71
- "thomas.schulz@camunda.com",
72
- "shadia.jubril@camunda.com",
73
- "kaitlin.leighton@camunda.com",
74
- "ryan.warner@camunda.com",
75
- "manjula.kularathne@camunda.com"
76
- ];
77
- const ADR_MANAGER_EMAIL = ["jasmin.morfin-davila@camunda.com"];
78
- const PDF_WATERMARK_EMAILS = ["eyal.marantenboim@camunda.com"];
79
1
  const PROFILES = {
80
2
  readOnly: {
81
- allowed: [
82
- ...CLOUD_TEAM_EMAILS,
83
- ...SUPPORT_MANAGERS_EMAILS,
84
- ...C8_ENGINEERING_MANAGERS_EMAILS,
85
- ...CONSULTING_MANAGER_EMAILS,
86
- ...SRE_TEAM_EMAILS,
87
- ...CSM_MANAGER_EMAIL,
88
- "eric.lundberg@camunda.com"
89
- ],
90
3
  rolesToAssign: ["accounts:read", "console:admin:readonly"],
91
4
  email: {
92
5
  handbookPages: [
@@ -95,8 +8,8 @@ const PROFILES = {
95
8
  }
96
9
  },
97
10
  supportEngineer: {
98
- allowed: [...CLOUD_TEAM_EMAILS, ...SUPPORT_MANAGERS_EMAILS],
99
11
  rolesToAssign: [
12
+ "accounts:read",
100
13
  "accounts:connections:create",
101
14
  "accounts:connections:update",
102
15
  "support:agent"
@@ -109,8 +22,8 @@ const PROFILES = {
109
22
  }
110
23
  },
111
24
  ssoAdmin: {
112
- allowed: [...CLOUD_TEAM_EMAILS, ...SUPPORT_MANAGERS_EMAILS],
113
25
  rolesToAssign: [
26
+ "accounts:read",
114
27
  "accounts:connections:create",
115
28
  "accounts:connections:update",
116
29
  "accounts:connections:delete",
@@ -123,13 +36,22 @@ const PROFILES = {
123
36
  ]
124
37
  }
125
38
  },
126
- supportAgent: {
127
- allowed: [
128
- ...CLOUD_TEAM_EMAILS,
129
- ...SUPPORT_MANAGERS_EMAILS,
130
- ...C8_ENGINEERING_MANAGERS_EMAILS,
131
- ...CONSULTING_MANAGER_EMAILS
39
+ tam: {
40
+ rolesToAssign: [
41
+ "support:agent",
42
+ "accounts:trialExtender",
43
+ "accounts:limitExtender",
44
+ "accounts:enterpriseAdmin",
45
+ "accounts:read",
46
+ "console:admin:readonly"
132
47
  ],
48
+ email: {
49
+ handbookPages: [
50
+ "https://confluence.camunda.com/display/HAN/Access+to+a+customers+Organization+on+C8+SaaS"
51
+ ]
52
+ }
53
+ },
54
+ supportAgent: {
133
55
  rolesToAssign: ["support:agent"],
134
56
  email: {
135
57
  handbookPages: [
@@ -138,12 +60,11 @@ const PROFILES = {
138
60
  }
139
61
  },
140
62
  clusterUpdateSupportEngineer: {
141
- allowed: [
142
- ...CLOUD_TEAM_EMAILS,
143
- ...SUPPORT_MANAGERS_EMAILS,
144
- ...C8_ENGINEERING_MANAGERS_EMAILS
63
+ rolesToAssign: [
64
+ "accounts:clusterUpdates",
65
+ "support:agent",
66
+ "accounts:read"
145
67
  ],
146
- rolesToAssign: ["accounts:clusterUpdates", "support:agent"],
147
68
  email: {
148
69
  handbookPages: [
149
70
  "https://lamppost.camunda-it.rocks/handbook/#departments/products/engineering/managing-generations-on-c8-saas/index.md"
@@ -151,7 +72,6 @@ const PROFILES = {
151
72
  }
152
73
  },
153
74
  c8ReleaseManager: {
154
- allowed: [...CLOUD_TEAM_EMAILS, ...C8_ENGINEERING_MANAGERS_EMAILS],
155
75
  rolesToAssign: [
156
76
  "console:C8ReleaseManager",
157
77
  "accounts:read",
@@ -164,7 +84,6 @@ const PROFILES = {
164
84
  }
165
85
  },
166
86
  incidentEngineer: {
167
- allowed: [...CLOUD_TEAM_EMAILS, ...C8_ENGINEERING_MANAGERS_EMAILS],
168
87
  rolesToAssign: [
169
88
  "accounts:read",
170
89
  "support:agent",
@@ -177,7 +96,6 @@ const PROFILES = {
177
96
  }
178
97
  },
179
98
  consulting: {
180
- allowed: [...CLOUD_TEAM_EMAILS, ...CONSULTING_MANAGER_EMAILS],
181
99
  rolesToAssign: [
182
100
  "accounts:read",
183
101
  "console:admin:readonly",
@@ -193,7 +111,6 @@ const PROFILES = {
193
111
  }
194
112
  },
195
113
  csm: {
196
- allowed: [...CLOUD_TEAM_EMAILS, ...CSM_MANAGER_EMAIL],
197
114
  rolesToAssign: [
198
115
  "accounts:enterpriseAdmin",
199
116
  "accounts:read",
@@ -208,7 +125,6 @@ const PROFILES = {
208
125
  }
209
126
  },
210
127
  csmOffboard: {
211
- allowed: [...CLOUD_TEAM_EMAILS, ...CSM_MANAGER_EMAIL],
212
128
  rolesToAssign: ["accounts:enterpriseOffboarding", "accounts:read"],
213
129
  email: {
214
130
  handbookPages: [
@@ -217,7 +133,6 @@ const PROFILES = {
217
133
  }
218
134
  },
219
135
  adr: {
220
- allowed: [...ADR_MANAGER_EMAIL, "javier.garcia-alzorriz@camunda.com"],
221
136
  rolesToAssign: ["accounts:trialExtender", "accounts:read"],
222
137
  email: {
223
138
  handbookPages: [
@@ -227,11 +142,6 @@ const PROFILES = {
227
142
  }
228
143
  },
229
144
  trialExtender: {
230
- allowed: [
231
- ...CLOUD_TEAM_EMAILS,
232
- ...LIMIT_EXTENDERS,
233
- "rory.tettey@camunda.com"
234
- ],
235
145
  rolesToAssign: ["accounts:trialExtender", "accounts:read"],
236
146
  email: {
237
147
  handbookPages: [
@@ -241,7 +151,6 @@ const PROFILES = {
241
151
  }
242
152
  },
243
153
  limitExtender: {
244
- allowed: [...CLOUD_TEAM_EMAILS, ...LIMIT_EXTENDERS],
245
154
  rolesToAssign: ["accounts:limitExtender", "accounts:read"],
246
155
  email: {
247
156
  handbookPages: [
@@ -251,7 +160,6 @@ const PROFILES = {
251
160
  }
252
161
  },
253
162
  workshopCreator: {
254
- allowed: [...CLOUD_TEAM_EMAILS, "robert.emsbach@camunda.com"],
255
163
  rolesToAssign: ["accounts:orgCreator"],
256
164
  email: {
257
165
  handbookPages: [
@@ -260,14 +168,12 @@ const PROFILES = {
260
168
  }
261
169
  },
262
170
  pdfWatermarkRead: {
263
- allowed: [...CLOUD_TEAM_EMAILS, ...PDF_WATERMARK_EMAILS],
264
171
  rolesToAssign: ["accounts:pdfWatermarkReader"],
265
172
  email: {
266
173
  handbookPages: []
267
174
  }
268
175
  },
269
176
  pdfWatermarkWrite: {
270
- allowed: [...CLOUD_TEAM_EMAILS, ...PDF_WATERMARK_EMAILS],
271
177
  rolesToAssign: ["accounts:pdfWatermarkWriter"],
272
178
  email: {
273
179
  handbookPages: []
@@ -275,13 +181,6 @@ const PROFILES = {
275
181
  }
276
182
  };
277
183
  export {
278
- C8_ENGINEERING_MANAGERS_EMAILS,
279
- CLOUD_TEAM_EMAILS,
280
- CONSULTING_MANAGER_EMAILS,
281
- CSM_MANAGER_EMAIL,
282
- PLATFORM_SM_EMAILS,
283
- PROFILES,
284
- SRE_TEAM_EMAILS,
285
- SUPPORT_MANAGERS_EMAILS
184
+ PROFILES
286
185
  };
287
186
  //# sourceMappingURL=profile.permissions.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/permissions/profile.permissions.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\nexport const CLOUD_TEAM_EMAILS = [\n 'adam.urban@camunda.com',\n 'collin.raddatz@camunda.com',\n 'tim.schuppener@camunda.com',\n]\nconst LIMIT_EXTENDERS = [\n 'william.vonalt@camunda.com',\n 'victor.grund@camunda.com',\n 'ragnar.nevries@camunda.com',\n 'robert.emsbach@camunda.com',\n 'jared.mcmahon@camunda.com',\n]\nexport const SRE_TEAM_EMAILS = [\n 'jonathan.ballet@camunda.com',\n 'thanasis.petrovas@camunda.com',\n 'thomas.polnik@camunda.com',\n]\nexport const PLATFORM_SM_EMAILS = [\n 'immanuel.monma@camunda.com',\n 'jesse.simpson@camunda.com',\n 'hamza.masood@camunda.com',\n 'lars.lange@camunda.com',\n 'leo.journel@camunda.com',\n 'balazs.kenez@camunda.com',\n]\nexport const SUPPORT_MANAGERS_EMAILS = [\n 'garima.yadav@camunda.com',\n 'jeffrey.stokes@camunda.com',\n 'alexandra.corremans@camunda.com',\n 'chris.campbell@camunda.com',\n]\nexport const C8_ENGINEERING_MANAGERS_EMAILS = [\n 'sebastian.bathke@camunda.com',\n 'catalina.moisuc@camunda.com',\n 'immanuel.monma@camunda.com',\n 'joshua.windels@camunda.com',\n 'marcos.vieira@camunda.com',\n 'maximilian.trumpf@camunda.com',\n 'simon.buettner@camunda.com',\n // schoetti is also some sort of engineering manager\n 'michael.schoettes@camunda.com',\n 'tassilo.weidner@camunda.com',\n 'nicolas.pepin-perreault@camunda.com',\n 'wolfgang.amann@camunda.com',\n 'mathieu.stennier@camunda.com',\n 'jason.hunter@camunda.com',\n 'maxim.danilov@camunda.com',\n 'stephan.epping@camunda.com',\n 'simon.zengerling@camunda.com',\n 'shay.matasaro@camunda.com',\n]\nexport const CONSULTING_MANAGER_EMAILS = [\n 'benjamin.hoffmann@camunda.com',\n 'chandan.dash@camunda.com',\n 'darren.devine@camunda.com',\n 'hurshid.kadirov@camunda.com',\n 'ivan.jovic@camunda.com',\n 'michael.ferber@camunda.com',\n 'ragnar.nevries@camunda.com',\n 'norbert.kuchenmeister@camunda.com',\n 'robert.emsbach@camunda.com',\n 'victor.grund@camunda.com',\n]\nexport const CSM_MANAGER_EMAIL = [\n 'aaron.laye@camunda.com',\n 'andreas.tollschein@camunda.com',\n 'betsy.burt@camunda.com',\n 'leona.schlosser@camunda.com',\n 'yulia.sinyanskaya@camunda.com',\n 'agnes.kelemen@camunda.com',\n 'thomas.schulz@camunda.com',\n 'shadia.jubril@camunda.com',\n 'kaitlin.leighton@camunda.com',\n 'ryan.warner@camunda.com',\n 'manjula.kularathne@camunda.com',\n]\nconst ADR_MANAGER_EMAIL = ['jasmin.morfin-davila@camunda.com']\nconst PDF_WATERMARK_EMAILS = ['eyal.marantenboim@camunda.com']\n\nexport interface OnboardConfig {\n [unit: string]: {\n allowed: string[]\n rolesToAssign: Roles[]\n email: {\n handbookPages: string[]\n }\n }\n}\n\nexport const PROFILES: OnboardConfig = {\n readOnly: {\n allowed: [\n ...CLOUD_TEAM_EMAILS,\n ...SUPPORT_MANAGERS_EMAILS,\n ...C8_ENGINEERING_MANAGERS_EMAILS,\n ...CONSULTING_MANAGER_EMAILS,\n ...SRE_TEAM_EMAILS,\n ...CSM_MANAGER_EMAIL,\n 'eric.lundberg@camunda.com',\n ],\n rolesToAssign: ['accounts:read', 'console:admin:readonly'],\n email: {\n handbookPages: [\n 'https://lamppost.camunda-it.rocks/handbook/#departments/products/engineering/finding-an-organization-on-c8-saas/index.md',\n ],\n },\n },\n supportEngineer: {\n allowed: [...CLOUD_TEAM_EMAILS, ...SUPPORT_MANAGERS_EMAILS],\n rolesToAssign: [\n 'accounts:connections:create',\n 'accounts:connections:update',\n 'support:agent',\n ],\n email: {\n handbookPages: [\n 'https://lamppost.camunda-it.rocks/handbook/#departments/products/engineering/access-to-a-customers-organization-on-c8-saas/index.md',\n 'https://confluence.camunda.com/display/HAN/How+to+handle+requests+for+External+SSO+integration+in+C8-SaaS',\n ],\n },\n },\n ssoAdmin: {\n allowed: [...CLOUD_TEAM_EMAILS, ...SUPPORT_MANAGERS_EMAILS],\n rolesToAssign: [\n 'accounts:connections:create',\n 'accounts:connections:update',\n 'accounts:connections:delete',\n 'support:agent',\n ],\n email: {\n handbookPages: [\n 'https://lamppost.camunda-it.rocks/handbook/#departments/products/engineering/access-to-a-customers-organization-on-c8-saas/index.md',\n 'https://confluence.camunda.com/display/HAN/How+to+handle+requests+for+External+SSO+integration+in+C8-SaaS',\n ],\n },\n },\n supportAgent: {\n allowed: [\n ...CLOUD_TEAM_EMAILS,\n ...SUPPORT_MANAGERS_EMAILS,\n ...C8_ENGINEERING_MANAGERS_EMAILS,\n ...CONSULTING_MANAGER_EMAILS,\n ],\n rolesToAssign: ['support:agent'],\n email: {\n handbookPages: [\n 'https://lamppost.camunda-it.rocks/handbook/#departments/products/engineering/access-to-a-customers-organization-on-c8-saas/index.md',\n ],\n },\n },\n clusterUpdateSupportEngineer: {\n allowed: [\n ...CLOUD_TEAM_EMAILS,\n ...SUPPORT_MANAGERS_EMAILS,\n ...C8_ENGINEERING_MANAGERS_EMAILS,\n ],\n rolesToAssign: ['accounts:clusterUpdates', 'support:agent'],\n email: {\n handbookPages: [\n 'https://lamppost.camunda-it.rocks/handbook/#departments/products/engineering/managing-generations-on-c8-saas/index.md',\n ],\n },\n },\n c8ReleaseManager: {\n allowed: [...CLOUD_TEAM_EMAILS, ...C8_ENGINEERING_MANAGERS_EMAILS],\n rolesToAssign: [\n 'console:C8ReleaseManager',\n 'accounts:read',\n 'console:C8UpdateEnforcer',\n ],\n email: {\n handbookPages: [\n 'https://lamppost.camunda-it.rocks/handbook/#departments/products/engineering/managing-generations-on-c8-saas/index.md',\n ],\n },\n },\n incidentEngineer: {\n allowed: [...CLOUD_TEAM_EMAILS, ...C8_ENGINEERING_MANAGERS_EMAILS],\n rolesToAssign: [\n 'accounts:read',\n 'support:agent',\n 'console:operationsEngineer',\n ],\n email: {\n handbookPages: [\n 'https://lamppost.camunda-it.rocks/handbook/#departments/products/engineering/tweaking-a-running-cluster/index.md',\n ],\n },\n },\n consulting: {\n allowed: [...CLOUD_TEAM_EMAILS, ...CONSULTING_MANAGER_EMAILS],\n rolesToAssign: [\n 'accounts:read',\n 'console:admin:readonly',\n 'accounts:trialExtender',\n 'accounts:limitExtender',\n 'accounts:enterpriseAdmin',\n ],\n email: {\n handbookPages: [\n 'https://lamppost.camunda-it.rocks/handbook/#departments/products/engineering/finding-an-organization-on-c8-saas/index.md',\n 'https://confluence.camunda.com/display/HAN/Extend+a+Trial+Subscription+on+C8+SaaS',\n ],\n },\n },\n csm: {\n allowed: [...CLOUD_TEAM_EMAILS, ...CSM_MANAGER_EMAIL],\n rolesToAssign: [\n 'accounts:enterpriseAdmin',\n 'accounts:read',\n 'accounts:trialExtender',\n ],\n email: {\n handbookPages: [\n 'https://confluence.camunda.com/display/FIELDOPS/Migrating+C8-SaaS+Organizations+to+Enterprise',\n 'https://lamppost.camunda-it.rocks/handbook/#departments/products/engineering/modify-a-running-c8-saas-enterprise-organisation/index.md',\n 'https://confluence.camunda.com/display/HAN/Extend+a+Trial+Subscription+on+C8+SaaS',\n ],\n },\n },\n csmOffboard: {\n allowed: [...CLOUD_TEAM_EMAILS, ...CSM_MANAGER_EMAIL],\n rolesToAssign: ['accounts:enterpriseOffboarding', 'accounts:read'],\n email: {\n handbookPages: [\n 'https://lamppost.camunda-it.rocks/handbook/#departments/products/engineering/shutting-down-an-c8-saas-organization/index.md',\n ],\n },\n },\n adr: {\n allowed: [...ADR_MANAGER_EMAIL, 'javier.garcia-alzorriz@camunda.com'],\n rolesToAssign: ['accounts:trialExtender', 'accounts:read'],\n email: {\n handbookPages: [\n 'https://lamppost.camunda-it.rocks/handbook/#departments/products/engineering/finding-an-organization-on-c8-saas/index.md',\n 'https://confluence.camunda.com/display/HAN/Extend+a+Trial+Subscription+on+C8+SaaS',\n ],\n },\n },\n trialExtender: {\n allowed: [\n ...CLOUD_TEAM_EMAILS,\n ...LIMIT_EXTENDERS,\n 'rory.tettey@camunda.com',\n ],\n rolesToAssign: ['accounts:trialExtender', 'accounts:read'],\n email: {\n handbookPages: [\n 'https://lamppost.camunda-it.rocks/handbook/#departments/products/engineering/finding-an-organization-on-c8-saas/index.md',\n 'https://confluence.camunda.com/display/HAN/Extend+a+Trial+Subscription+on+C8+SaaS',\n ],\n },\n },\n limitExtender: {\n allowed: [...CLOUD_TEAM_EMAILS, ...LIMIT_EXTENDERS],\n rolesToAssign: ['accounts:limitExtender', 'accounts:read'],\n email: {\n handbookPages: [\n 'https://lamppost.camunda-it.rocks/handbook/#departments/products/engineering/finding-an-organization-on-c8-saas/index.md',\n 'https://confluence.camunda.com/display/HAN/Managing+Organization+Limits+on+C8+SaaS',\n ],\n },\n },\n workshopCreator: {\n allowed: [...CLOUD_TEAM_EMAILS, 'robert.emsbach@camunda.com'],\n rolesToAssign: ['accounts:orgCreator'],\n email: {\n handbookPages: [\n 'https://lamppost.camunda-it.rocks/handbook/#departments/products/engineering/finding-an-organization-on-c8-saas/index.md',\n ],\n },\n },\n pdfWatermarkRead: {\n allowed: [...CLOUD_TEAM_EMAILS, ...PDF_WATERMARK_EMAILS],\n rolesToAssign: ['accounts:pdfWatermarkReader'],\n email: {\n handbookPages: [],\n },\n },\n pdfWatermarkWrite: {\n allowed: [...CLOUD_TEAM_EMAILS, ...PDF_WATERMARK_EMAILS],\n rolesToAssign: ['accounts:pdfWatermarkWriter'],\n email: {\n handbookPages: [],\n },\n },\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\nimport type { Roles } from '../types/Roles.js'\n\n/**\n * NOTE: This package (`@camunda/ccma-shared-types`) is published publicly to\n * npmjs.org and is imported directly by frontend applications, so its contents\n * ship in the browser bundle and in every published npm version.\n *\n * For that reason this file MUST NOT contain the `allowed` email lists (real\n * Camunda employee names/emails) that gate who may run each onboarding\n * profile. Those lists live in the private, never-published\n * `@camunda-cloud/shared-backend` package instead\n * (see `packages/shared-backend/src/permissions/profile.permissions.ts`).\n *\n * This file only exposes the non-sensitive parts of each profile that are\n * safe to ship publicly: the roles to assign and the handbook links.\n */\nexport interface OnboardConfig {\n [unit: string]: {\n rolesToAssign: Roles[]\n email: {\n handbookPages: string[]\n }\n }\n}\n\nexport const PROFILES: OnboardConfig = {\n readOnly: {\n rolesToAssign: ['accounts:read', 'console:admin:readonly'],\n email: {\n handbookPages: [\n 'https://lamppost.camunda-it.rocks/handbook/#departments/products/engineering/finding-an-organization-on-c8-saas/index.md',\n ],\n },\n },\n supportEngineer: {\n rolesToAssign: [\n 'accounts:read',\n 'accounts:connections:create',\n 'accounts:connections:update',\n 'support:agent',\n ],\n email: {\n handbookPages: [\n 'https://lamppost.camunda-it.rocks/handbook/#departments/products/engineering/access-to-a-customers-organization-on-c8-saas/index.md',\n 'https://confluence.camunda.com/display/HAN/How+to+handle+requests+for+External+SSO+integration+in+C8-SaaS',\n ],\n },\n },\n ssoAdmin: {\n rolesToAssign: [\n 'accounts:read',\n 'accounts:connections:create',\n 'accounts:connections:update',\n 'accounts:connections:delete',\n 'support:agent',\n ],\n email: {\n handbookPages: [\n 'https://lamppost.camunda-it.rocks/handbook/#departments/products/engineering/access-to-a-customers-organization-on-c8-saas/index.md',\n 'https://confluence.camunda.com/display/HAN/How+to+handle+requests+for+External+SSO+integration+in+C8-SaaS',\n ],\n },\n },\n tam: {\n rolesToAssign: [\n 'support:agent',\n 'accounts:trialExtender',\n 'accounts:limitExtender',\n 'accounts:enterpriseAdmin',\n 'accounts:read',\n 'console:admin:readonly',\n ],\n email: {\n handbookPages: [\n 'https://confluence.camunda.com/display/HAN/Access+to+a+customers+Organization+on+C8+SaaS',\n ],\n },\n },\n supportAgent: {\n rolesToAssign: ['support:agent'],\n email: {\n handbookPages: [\n 'https://lamppost.camunda-it.rocks/handbook/#departments/products/engineering/access-to-a-customers-organization-on-c8-saas/index.md',\n ],\n },\n },\n clusterUpdateSupportEngineer: {\n rolesToAssign: [\n 'accounts:clusterUpdates',\n 'support:agent',\n 'accounts:read',\n ],\n email: {\n handbookPages: [\n 'https://lamppost.camunda-it.rocks/handbook/#departments/products/engineering/managing-generations-on-c8-saas/index.md',\n ],\n },\n },\n c8ReleaseManager: {\n rolesToAssign: [\n 'console:C8ReleaseManager',\n 'accounts:read',\n 'console:C8UpdateEnforcer',\n ],\n email: {\n handbookPages: [\n 'https://lamppost.camunda-it.rocks/handbook/#departments/products/engineering/managing-generations-on-c8-saas/index.md',\n ],\n },\n },\n incidentEngineer: {\n rolesToAssign: [\n 'accounts:read',\n 'support:agent',\n 'console:operationsEngineer',\n ],\n email: {\n handbookPages: [\n 'https://lamppost.camunda-it.rocks/handbook/#departments/products/engineering/tweaking-a-running-cluster/index.md',\n ],\n },\n },\n consulting: {\n rolesToAssign: [\n 'accounts:read',\n 'console:admin:readonly',\n 'accounts:trialExtender',\n 'accounts:limitExtender',\n 'accounts:enterpriseAdmin',\n ],\n email: {\n handbookPages: [\n 'https://lamppost.camunda-it.rocks/handbook/#departments/products/engineering/finding-an-organization-on-c8-saas/index.md',\n 'https://confluence.camunda.com/display/HAN/Extend+a+Trial+Subscription+on+C8+SaaS',\n ],\n },\n },\n csm: {\n rolesToAssign: [\n 'accounts:enterpriseAdmin',\n 'accounts:read',\n 'accounts:trialExtender',\n ],\n email: {\n handbookPages: [\n 'https://confluence.camunda.com/display/FIELDOPS/Migrating+C8-SaaS+Organizations+to+Enterprise',\n 'https://lamppost.camunda-it.rocks/handbook/#departments/products/engineering/modify-a-running-c8-saas-enterprise-organisation/index.md',\n 'https://confluence.camunda.com/display/HAN/Extend+a+Trial+Subscription+on+C8+SaaS',\n ],\n },\n },\n csmOffboard: {\n rolesToAssign: ['accounts:enterpriseOffboarding', 'accounts:read'],\n email: {\n handbookPages: [\n 'https://lamppost.camunda-it.rocks/handbook/#departments/products/engineering/shutting-down-an-c8-saas-organization/index.md',\n ],\n },\n },\n adr: {\n rolesToAssign: ['accounts:trialExtender', 'accounts:read'],\n email: {\n handbookPages: [\n 'https://lamppost.camunda-it.rocks/handbook/#departments/products/engineering/finding-an-organization-on-c8-saas/index.md',\n 'https://confluence.camunda.com/display/HAN/Extend+a+Trial+Subscription+on+C8+SaaS',\n ],\n },\n },\n trialExtender: {\n rolesToAssign: ['accounts:trialExtender', 'accounts:read'],\n email: {\n handbookPages: [\n 'https://lamppost.camunda-it.rocks/handbook/#departments/products/engineering/finding-an-organization-on-c8-saas/index.md',\n 'https://confluence.camunda.com/display/HAN/Extend+a+Trial+Subscription+on+C8+SaaS',\n ],\n },\n },\n limitExtender: {\n rolesToAssign: ['accounts:limitExtender', 'accounts:read'],\n email: {\n handbookPages: [\n 'https://lamppost.camunda-it.rocks/handbook/#departments/products/engineering/finding-an-organization-on-c8-saas/index.md',\n 'https://confluence.camunda.com/display/HAN/Managing+Organization+Limits+on+C8+SaaS',\n ],\n },\n },\n workshopCreator: {\n rolesToAssign: ['accounts:orgCreator'],\n email: {\n handbookPages: [\n 'https://lamppost.camunda-it.rocks/handbook/#departments/products/engineering/finding-an-organization-on-c8-saas/index.md',\n ],\n },\n },\n pdfWatermarkRead: {\n rolesToAssign: ['accounts:pdfWatermarkReader'],\n email: {\n handbookPages: [],\n },\n },\n pdfWatermarkWrite: {\n rolesToAssign: ['accounts:pdfWatermarkWriter'],\n email: {\n handbookPages: [],\n },\n },\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -23,7 +23,7 @@ export declare const getAnalyticsSalesPlanFromOrgSalesPlan: (organization: {
23
23
  version: number;
24
24
  };
25
25
  };
26
- }) => AnalyticsSalesPlanType.TRIAL | AnalyticsSalesPlanType.ENTERPRISE | AnalyticsSalesPlanType.IN_NEGOTIATION | AnalyticsSalesPlanType.INTERNAL;
26
+ }) => AnalyticsSalesPlanType.TRIAL | AnalyticsSalesPlanType.ENTERPRISE | AnalyticsSalesPlanType.IN_NEGOTIATION | AnalyticsSalesPlanType.INTERNAL | undefined;
27
27
  export type RevisitedSalesPlanName = 'Camunda SaaS Trial' | 'Camunda SaaS Modeling' | 'Enterprise' | 'In Negotiation' | 'Internal';
28
28
  export declare function getRevisitedSalesPlanName(displayedSalesPlanName: DisplayedSalesPlan | undefined): RevisitedSalesPlanName | undefined;
29
29
  export type DisplayedSalesPlan = 'Free Trial' | 'Free' | 'Enterprise' | 'In Negotiation' | 'Internal';
@@ -158,22 +158,20 @@ var Telemetry;
158
158
  const timeRangeParts = keyParts[2] ? keyParts[2].split(".." /* LEVEL1 */) : [0];
159
159
  const tsFrom = Number(timeRangeParts[0]);
160
160
  const tsTo = timeRangeParts[1] ? Number(timeRangeParts[1]) : void 0;
161
- const entityReferences = entityReferenceIndices.map((index) => {
161
+ const entityReferences = entityReferenceIndices.flatMap((index) => {
162
162
  const entityReference = this.data.context.entities.find(
163
163
  (currentEntityReference) => currentEntityReference.idx === Number(index)
164
164
  );
165
165
  if (entityReference) {
166
- return {
167
- id: entityReference.id,
168
- type: entityReference.type
169
- };
166
+ return [{ id: entityReference.id, type: entityReference.type }];
170
167
  }
168
+ return [];
171
169
  });
172
170
  const dataPointReference = this.data.context.dataPoints.find(
173
171
  (dataPoint) => dataPoint.idx === dataPointReferenceIndex
174
172
  );
175
173
  this.decodedData.dataPoints.push({
176
- entities: entityReferences ?? [],
174
+ entities: entityReferences,
177
175
  key: dataPointReference ? dataPointReference.key : "unknown",
178
176
  type: dataPointReference ? dataPointReference.type : 0 /* STRING */,
179
177
  tags: dataPointReference ? dataPointReference.tags : void 0,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/types/Telemetry.type.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 namespace Telemetry {\n // //////////////////////////////////////////////////////////////////////\n // TYPES\n\n // Specifies the references a data point belongs to, like cluster xyz, component abc, etc.\n export type EntityReferenceType =\n | 'cluster'\n | 'component'\n | 'global'\n | 'user'\n | 'other'\n export interface EntityReference {\n id: string\n type: EntityReferenceType\n idx: number\n }\n\n // Specifies the data point reference.\n // eslint-disable-next-line no-shadow\n export enum DataPointValueType {\n STRING = 0,\n NUMBER = 1,\n BOOLEAN = 2,\n }\n\n export interface DataPointReference {\n key: string\n type: DataPointValueType\n tags?: Record<string, string>\n idx: number\n }\n\n // Specifies the data body\n export type Properties = Record<string, string>\n export type InstallationContextReference = 'cid' | 'iid' // cid = customerId, iid = installationId\n export interface DataContext {\n ts: number // timestamp\n installation: Record<InstallationContextReference, string>\n entities: EntityReference[]\n dataPoints: DataPointReference[]\n }\n\n // Encoded data format\n export interface EncodedData {\n context: DataContext\n properties: Properties\n }\n\n // Decoded data format\n export interface DecodedData {\n installation: Record<InstallationContextReference, string>\n dataPoints: Array<{\n entities: Array<{\n id: string\n type: EntityReferenceType\n }>\n key: string\n type: DataPointValueType\n tags?: Record<string, string>\n transferredValue: string\n value: string | number | boolean\n tsFrom: number\n tsTo?: number\n }>\n }\n\n // HTTP types\n\n export interface PostResponse {\n success: boolean\n }\n\n // PING\n\n export interface PingRequest {\n cid: string\n iid: string\n }\n\n // //////////////////////////////////////////////////////////////////////\n // HELPERS\n\n // eslint-disable-next-line no-shadow\n export enum Separator {\n LEVEL0 = '::',\n LEVEL1 = '..',\n }\n\n export interface AddDataPointOptions {\n references: Array<{ id: string; type: EntityReferenceType }>\n dataPointKey: string\n dataPointValue: string\n dataPointValueType: DataPointValueType\n dataPointTags?: Record<string, string>\n tsFrom: number\n tsTo?: number\n }\n\n // Helper class to create encoded data\n export class DataEncoder {\n private data: EncodedData = {\n context: {\n // eslint-disable-next-line id-length\n ts: Date.now(),\n installation: {\n cid: '',\n iid: '',\n },\n entities: [],\n dataPoints: [],\n },\n properties: {},\n }\n\n public init(options: { customerId: string; installationId: string }) {\n this.data = {\n context: {\n // eslint-disable-next-line id-length\n ts: Date.now(),\n installation: {\n cid: options.customerId,\n iid: options.installationId,\n },\n entities: [],\n dataPoints: [],\n },\n properties: {},\n }\n }\n\n public getEncodedData(): EncodedData {\n return this.data\n }\n\n private getReferenceIndex(\n referenceId: string,\n referenceType: EntityReferenceType,\n ): number {\n const foundReference = this.data.context.entities.find(\n (ref) => ref.id === referenceId && ref.type === referenceType,\n )\n let entityReferenceIndex = -1\n if (foundReference) {\n entityReferenceIndex = foundReference.idx\n } else {\n // new entity reference\n entityReferenceIndex = this.data.context.entities.length\n this.data.context.entities.push({\n id: referenceId,\n type: referenceType,\n idx: entityReferenceIndex,\n })\n }\n return entityReferenceIndex\n }\n\n private getDataPointIndex(\n dataPointKey: string,\n dataPointValueType: DataPointValueType,\n dataPointTags?: Record<string, string>,\n ): number {\n const foundDataPointReference = this.data.context.dataPoints.find(\n (ref) => {\n if (ref.key === dataPointKey && ref.type === dataPointValueType) {\n // check tags\n if (dataPointTags && !ref.tags) {\n return false\n } else if (!dataPointTags && ref.tags) {\n return false\n } else if (dataPointTags && ref.tags) {\n for (const [key, value] of Object.entries(dataPointTags)) {\n if (ref.tags[key] !== value) {\n return false\n }\n }\n }\n return true\n } else {\n return false\n }\n },\n )\n let dataPointReferenceIndex = -1\n if (foundDataPointReference) {\n dataPointReferenceIndex = foundDataPointReference.idx\n } else {\n // new data point reference\n dataPointReferenceIndex = this.data.context.dataPoints.length\n this.data.context.dataPoints.push({\n key: dataPointKey,\n type: dataPointValueType,\n tags: dataPointTags,\n idx: dataPointReferenceIndex,\n })\n }\n return dataPointReferenceIndex\n }\n\n public addDataPoint(options: AddDataPointOptions) {\n const {\n references,\n dataPointKey,\n dataPointValue,\n dataPointValueType,\n dataPointTags,\n tsFrom,\n tsTo,\n } = options\n\n // find references\n const foundReferences = references.map((reference) => {\n return this.getReferenceIndex(reference.id, reference.type)\n })\n\n // find data point reference\n const foundDataPointReferenceIndex = this.getDataPointIndex(\n dataPointKey,\n dataPointValueType,\n dataPointTags,\n )\n\n // calculate timestamps\n const tsFromCalculated = tsFrom - this.data.context.ts\n let tsToCalculates: number | undefined\n if (tsTo) {\n tsToCalculates = tsTo - this.data.context.ts\n }\n\n // generate data key\n // pattern: entity reference index - data point reference index - time range diff\n const entityReferenceParts: string[] = foundReferences.map((ref) =>\n String(ref),\n )\n\n const timeRangeParts: string[] = []\n timeRangeParts.push(String(tsFromCalculated))\n if (tsToCalculates) {\n timeRangeParts.push(String(tsToCalculates))\n }\n\n const keyParts: string[] = [\n entityReferenceParts.join(Separator.LEVEL1),\n String(foundDataPointReferenceIndex),\n timeRangeParts.join(Separator.LEVEL1),\n ]\n const key = keyParts.join(Separator.LEVEL0)\n\n // add data point\n this.data.properties[key] = dataPointValue\n }\n }\n\n export class DataDecoder {\n private decodedData: DecodedData\n\n constructor(private data: EncodedData) {\n this.decodedData = {\n installation: data.context.installation,\n dataPoints: [],\n }\n this.decode()\n }\n\n public getDecodedData(): DecodedData {\n return this.decodedData\n }\n\n private decode() {\n for (const [key, value] of Object.entries(this.data.properties)) {\n const keyParts = key.split(Separator.LEVEL0)\n const entityReferenceIndices = keyParts[0]\n ? keyParts[0].split(Separator.LEVEL1)\n : [-1]\n const dataPointReferenceIndex = keyParts[1] ? Number(keyParts[1]) : -1\n const timeRangeParts = keyParts[2]\n ? keyParts[2].split(Separator.LEVEL1)\n : [0]\n const tsFrom = Number(timeRangeParts[0])\n const tsTo = timeRangeParts[1] ? Number(timeRangeParts[1]) : undefined\n\n // eslint-disable-next-line array-callback-return\n const entityReferences = entityReferenceIndices.map((index) => {\n const entityReference = this.data.context.entities.find(\n (currentEntityReference) =>\n currentEntityReference.idx === Number(index),\n )\n if (entityReference) {\n return {\n id: entityReference.id,\n type: entityReference.type,\n }\n }\n })\n const dataPointReference = this.data.context.dataPoints.find(\n (dataPoint) => dataPoint.idx === dataPointReferenceIndex,\n )\n\n this.decodedData.dataPoints.push({\n entities: entityReferences ?? [],\n key: dataPointReference ? dataPointReference.key : 'unknown',\n type: dataPointReference\n ? dataPointReference.type\n : DataPointValueType.STRING,\n tags: dataPointReference ? dataPointReference.tags : undefined,\n transferredValue: value,\n value: this.getValue(\n value,\n dataPointReference?.type ?? DataPointValueType.STRING,\n ),\n tsFrom: this.data.context.ts + tsFrom,\n tsTo: tsTo ? this.data.context.ts + tsTo : undefined,\n })\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n private getValue(\n value: string,\n type: DataPointValueType,\n ): string | number | boolean {\n switch (type) {\n case DataPointValueType.BOOLEAN:\n if (['0', 'false'].includes(value)) {\n return false\n }\n if (['1', 'true'].includes(value)) {\n return true\n }\n return false\n case DataPointValueType.NUMBER: {\n // eslint-disable-next-line no-case-declarations\n let valueAsNumber = -1\n try {\n valueAsNumber = Number(value)\n } catch (_error) {\n // ignore\n }\n return valueAsNumber\n }\n default:\n return value\n }\n }\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\nexport namespace Telemetry {\n // //////////////////////////////////////////////////////////////////////\n // TYPES\n\n // Specifies the references a data point belongs to, like cluster xyz, component abc, etc.\n export type EntityReferenceType =\n | 'cluster'\n | 'component'\n | 'global'\n | 'user'\n | 'other'\n export interface EntityReference {\n id: string\n type: EntityReferenceType\n idx: number\n }\n\n // Specifies the data point reference.\n // eslint-disable-next-line no-shadow\n export enum DataPointValueType {\n STRING = 0,\n NUMBER = 1,\n BOOLEAN = 2,\n }\n\n export interface DataPointReference {\n key: string\n type: DataPointValueType\n tags?: Record<string, string>\n idx: number\n }\n\n // Specifies the data body\n export type Properties = Record<string, string>\n export type InstallationContextReference = 'cid' | 'iid' // cid = customerId, iid = installationId\n export interface DataContext {\n ts: number // timestamp\n installation: Record<InstallationContextReference, string>\n entities: EntityReference[]\n dataPoints: DataPointReference[]\n }\n\n // Encoded data format\n export interface EncodedData {\n context: DataContext\n properties: Properties\n }\n\n // Decoded data format\n export interface DecodedData {\n installation: Record<InstallationContextReference, string>\n dataPoints: Array<{\n entities: Array<{\n id: string\n type: EntityReferenceType\n }>\n key: string\n type: DataPointValueType\n tags?: Record<string, string>\n transferredValue: string\n value: string | number | boolean\n tsFrom: number\n tsTo?: number\n }>\n }\n\n // HTTP types\n\n export interface PostResponse {\n success: boolean\n }\n\n // PING\n\n export interface PingRequest {\n cid: string\n iid: string\n }\n\n // //////////////////////////////////////////////////////////////////////\n // HELPERS\n\n // eslint-disable-next-line no-shadow\n export enum Separator {\n LEVEL0 = '::',\n LEVEL1 = '..',\n }\n\n export interface AddDataPointOptions {\n references: Array<{ id: string; type: EntityReferenceType }>\n dataPointKey: string\n dataPointValue: string\n dataPointValueType: DataPointValueType\n dataPointTags?: Record<string, string>\n tsFrom: number\n tsTo?: number\n }\n\n // Helper class to create encoded data\n export class DataEncoder {\n private data: EncodedData = {\n context: {\n // eslint-disable-next-line id-length\n ts: Date.now(),\n installation: {\n cid: '',\n iid: '',\n },\n entities: [],\n dataPoints: [],\n },\n properties: {},\n }\n\n public init(options: { customerId: string; installationId: string }) {\n this.data = {\n context: {\n // eslint-disable-next-line id-length\n ts: Date.now(),\n installation: {\n cid: options.customerId,\n iid: options.installationId,\n },\n entities: [],\n dataPoints: [],\n },\n properties: {},\n }\n }\n\n public getEncodedData(): EncodedData {\n return this.data\n }\n\n private getReferenceIndex(\n referenceId: string,\n referenceType: EntityReferenceType,\n ): number {\n const foundReference = this.data.context.entities.find(\n (ref) => ref.id === referenceId && ref.type === referenceType,\n )\n let entityReferenceIndex = -1\n if (foundReference) {\n entityReferenceIndex = foundReference.idx\n } else {\n // new entity reference\n entityReferenceIndex = this.data.context.entities.length\n this.data.context.entities.push({\n id: referenceId,\n type: referenceType,\n idx: entityReferenceIndex,\n })\n }\n return entityReferenceIndex\n }\n\n private getDataPointIndex(\n dataPointKey: string,\n dataPointValueType: DataPointValueType,\n dataPointTags?: Record<string, string>,\n ): number {\n const foundDataPointReference = this.data.context.dataPoints.find(\n (ref) => {\n if (ref.key === dataPointKey && ref.type === dataPointValueType) {\n // check tags\n if (dataPointTags && !ref.tags) {\n return false\n } else if (!dataPointTags && ref.tags) {\n return false\n } else if (dataPointTags && ref.tags) {\n for (const [key, value] of Object.entries(dataPointTags)) {\n if (ref.tags[key] !== value) {\n return false\n }\n }\n }\n return true\n } else {\n return false\n }\n },\n )\n let dataPointReferenceIndex = -1\n if (foundDataPointReference) {\n dataPointReferenceIndex = foundDataPointReference.idx\n } else {\n // new data point reference\n dataPointReferenceIndex = this.data.context.dataPoints.length\n this.data.context.dataPoints.push({\n key: dataPointKey,\n type: dataPointValueType,\n tags: dataPointTags,\n idx: dataPointReferenceIndex,\n })\n }\n return dataPointReferenceIndex\n }\n\n public addDataPoint(options: AddDataPointOptions) {\n const {\n references,\n dataPointKey,\n dataPointValue,\n dataPointValueType,\n dataPointTags,\n tsFrom,\n tsTo,\n } = options\n\n // find references\n const foundReferences = references.map((reference) => {\n return this.getReferenceIndex(reference.id, reference.type)\n })\n\n // find data point reference\n const foundDataPointReferenceIndex = this.getDataPointIndex(\n dataPointKey,\n dataPointValueType,\n dataPointTags,\n )\n\n // calculate timestamps\n const tsFromCalculated = tsFrom - this.data.context.ts\n let tsToCalculates: number | undefined\n if (tsTo) {\n tsToCalculates = tsTo - this.data.context.ts\n }\n\n // generate data key\n // pattern: entity reference index - data point reference index - time range diff\n const entityReferenceParts: string[] = foundReferences.map((ref) =>\n String(ref),\n )\n\n const timeRangeParts: string[] = []\n timeRangeParts.push(String(tsFromCalculated))\n if (tsToCalculates) {\n timeRangeParts.push(String(tsToCalculates))\n }\n\n const keyParts: string[] = [\n entityReferenceParts.join(Separator.LEVEL1),\n String(foundDataPointReferenceIndex),\n timeRangeParts.join(Separator.LEVEL1),\n ]\n const key = keyParts.join(Separator.LEVEL0)\n\n // add data point\n this.data.properties[key] = dataPointValue\n }\n }\n\n export class DataDecoder {\n private decodedData: DecodedData\n\n constructor(private data: EncodedData) {\n this.decodedData = {\n installation: data.context.installation,\n dataPoints: [],\n }\n this.decode()\n }\n\n public getDecodedData(): DecodedData {\n return this.decodedData\n }\n\n private decode() {\n for (const [key, value] of Object.entries(this.data.properties)) {\n const keyParts = key.split(Separator.LEVEL0)\n const entityReferenceIndices = keyParts[0]\n ? keyParts[0].split(Separator.LEVEL1)\n : [-1]\n const dataPointReferenceIndex = keyParts[1] ? Number(keyParts[1]) : -1\n const timeRangeParts = keyParts[2]\n ? keyParts[2].split(Separator.LEVEL1)\n : [0]\n const tsFrom = Number(timeRangeParts[0])\n const tsTo = timeRangeParts[1] ? Number(timeRangeParts[1]) : undefined\n\n const entityReferences = entityReferenceIndices.flatMap((index) => {\n const entityReference = this.data.context.entities.find(\n (currentEntityReference) =>\n currentEntityReference.idx === Number(index),\n )\n if (entityReference) {\n return [{ id: entityReference.id, type: entityReference.type }]\n }\n return []\n })\n const dataPointReference = this.data.context.dataPoints.find(\n (dataPoint) => dataPoint.idx === dataPointReferenceIndex,\n )\n\n this.decodedData.dataPoints.push({\n entities: entityReferences,\n key: dataPointReference ? dataPointReference.key : 'unknown',\n type: dataPointReference\n ? dataPointReference.type\n : DataPointValueType.STRING,\n tags: dataPointReference ? dataPointReference.tags : undefined,\n transferredValue: value,\n value: this.getValue(\n value,\n dataPointReference?.type ?? DataPointValueType.STRING,\n ),\n tsFrom: this.data.context.ts + tsFrom,\n tsTo: tsTo ? this.data.context.ts + tsTo : undefined,\n })\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n private getValue(\n value: string,\n type: DataPointValueType,\n ): string | number | boolean {\n switch (type) {\n case DataPointValueType.BOOLEAN:\n if (['0', 'false'].includes(value)) {\n return false\n }\n if (['1', 'true'].includes(value)) {\n return true\n }\n return false\n case DataPointValueType.NUMBER: {\n // eslint-disable-next-line no-case-declarations\n let valueAsNumber = -1\n try {\n valueAsNumber = Number(value)\n } catch (_error) {\n // ignore\n }\n return valueAsNumber\n }\n default:\n return value\n }\n }\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["Telemetry", "DataPointValueType", "Separator"]
7
7
  }
@@ -2,7 +2,7 @@ import {
2
2
  ALLOWED_CAMUNDA_LABELS
3
3
  } from "../types/CamundaClusterLabels.type.js";
4
4
  function validateLabels(labels) {
5
- if (labels.camunda?.length > 0) {
5
+ if ((labels.camunda?.length ?? 0) > 0) {
6
6
  if (!labels.camunda.every(
7
7
  (camundaLabelToBeSet) => ALLOWED_CAMUNDA_LABELS.includes(camundaLabelToBeSet)
8
8
  )) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/labelValidator.utils.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 {\n ALLOWED_CAMUNDA_LABELS,\n type CamundaClusterStage,\n} from '../types/CamundaClusterLabels.type.js'\n\nexport function validateLabels(labels: {\n custom?: string[]\n camunda?: CamundaClusterStage[]\n}): boolean {\n if (labels.camunda?.length > 0) {\n if (\n !labels.camunda.every((camundaLabelToBeSet) =>\n ALLOWED_CAMUNDA_LABELS.includes(camundaLabelToBeSet),\n )\n ) {\n return false\n }\n }\n return true\n}\n"],
5
- "mappings": "AAMA;AAAA,EACE;AAAA,OAEK;AAEA,SAAS,eAAe,QAGnB;AACV,MAAI,OAAO,SAAS,SAAS,GAAG;AAC9B,QACE,CAAC,OAAO,QAAQ;AAAA,MAAM,CAAC,wBACrB,uBAAuB,SAAS,mBAAmB;AAAA,IACrD,GACA;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;",
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 {\n ALLOWED_CAMUNDA_LABELS,\n type CamundaClusterStage,\n} from '../types/CamundaClusterLabels.type.js'\n\nexport function validateLabels(labels: {\n custom?: string[]\n camunda?: CamundaClusterStage[]\n}): boolean {\n if ((labels.camunda?.length ?? 0) > 0) {\n if (\n !labels.camunda!.every((camundaLabelToBeSet) =>\n ALLOWED_CAMUNDA_LABELS.includes(camundaLabelToBeSet),\n )\n ) {\n return false\n }\n }\n return true\n}\n"],
5
+ "mappings": "AAMA;AAAA,EACE;AAAA,OAEK;AAEA,SAAS,eAAe,QAGnB;AACV,OAAK,OAAO,SAAS,UAAU,KAAK,GAAG;AACrC,QACE,CAAC,OAAO,QAAS;AAAA,MAAM,CAAC,wBACtB,uBAAuB,SAAS,mBAAmB;AAAA,IACrD,GACA;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/utils/orgs/OrgHelper.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 { OrganizationRole } from '../../enums/OrganizationRole.enum.js'\nimport {\n type OrganizationPermissions,\n PermissionsForOrganizationRole,\n} from '../../types/OrganizationPermission.type.js'\n\nexport function getUserPermissionsForOrg(\n orgs: any,\n orgId: string,\n): OrganizationPermissions | undefined {\n const relatedOrg = orgs ? orgs.find((org) => org.id === orgId) : undefined\n return relatedOrg ? getPermissionsByRoles(relatedOrg.roles) : undefined\n}\n\nexport function getPermissionsByRoles(\n roles: OrganizationRole[],\n): OrganizationPermissions | undefined {\n const orgPermissions: OrganizationPermissions = {\n org: {\n clusters: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n clients: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n settings: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n usage: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n billing: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n users: {\n general: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n owner: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n admin: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n member: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n },\n activity: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n diagrams: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n forms: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n instances: {\n create: false,\n read: false,\n update: false,\n delete: false,\n }, // create === start new instances\n workflows: {\n create: false,\n read: false,\n update: false,\n delete: false,\n }, // create === deploy diagrams\n webide: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n earlyAccessFeatures: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n },\n cluster: {\n clients: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n alerts: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n operate: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n tasklist: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n optimize: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n identity: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n ipWhitelist: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n secureConnectivity: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n encryption: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n connectorSecrets: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n connectors: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n settings: {\n resourceBasedAuthorizations: {\n activate: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n configure: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n },\n identityBasedAuthorizations: {\n activate: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n },\n multiTenancy: {\n activate: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n },\n },\n },\n }\n const permissionsForRoles: any[] = roles.map((role) =>\n PermissionsForOrganizationRole.get(role),\n )\n for (const orgRolePermissions of permissionsForRoles) {\n mergePermissions(orgPermissions, orgRolePermissions)\n }\n return orgPermissions\n}\n\n// recursive check all permissions\nfunction mergePermissions(target: any, permission: any): any {\n for (const key of Object.keys(target)) {\n if (typeof target[key] === 'boolean') {\n target[key] = target[key] || permission[key]\n } else {\n mergePermissions(target[key], permission[key])\n }\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\nimport type { OrganizationRole } from '../../enums/OrganizationRole.enum.js'\nimport {\n type OrganizationPermissions,\n PermissionsForOrganizationRole,\n} from '../../types/OrganizationPermission.type.js'\n\nexport function getUserPermissionsForOrg(\n orgs: any,\n orgId: string,\n): OrganizationPermissions | undefined {\n const relatedOrg = orgs\n ? orgs.find((org: any) => org.id === orgId)\n : undefined\n return relatedOrg ? getPermissionsByRoles(relatedOrg.roles) : undefined\n}\n\nexport function getPermissionsByRoles(\n roles: OrganizationRole[],\n): OrganizationPermissions | undefined {\n const orgPermissions: OrganizationPermissions = {\n org: {\n clusters: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n clients: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n settings: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n usage: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n billing: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n users: {\n general: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n owner: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n admin: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n member: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n },\n activity: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n diagrams: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n forms: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n instances: {\n create: false,\n read: false,\n update: false,\n delete: false,\n }, // create === start new instances\n workflows: {\n create: false,\n read: false,\n update: false,\n delete: false,\n }, // create === deploy diagrams\n webide: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n earlyAccessFeatures: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n },\n cluster: {\n clients: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n alerts: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n operate: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n tasklist: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n optimize: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n identity: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n ipWhitelist: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n secureConnectivity: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n encryption: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n connectorSecrets: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n connectors: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n settings: {\n resourceBasedAuthorizations: {\n activate: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n configure: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n },\n identityBasedAuthorizations: {\n activate: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n },\n multiTenancy: {\n activate: {\n create: false,\n read: false,\n update: false,\n delete: false,\n },\n },\n },\n },\n }\n const permissionsForRoles: any[] = roles.map((role) =>\n PermissionsForOrganizationRole.get(role),\n )\n for (const orgRolePermissions of permissionsForRoles) {\n mergePermissions(orgPermissions, orgRolePermissions)\n }\n return orgPermissions\n}\n\n// recursive check all permissions\nfunction mergePermissions(target: any, permission: any): any {\n for (const key of Object.keys(target)) {\n if (typeof target[key] === 'boolean') {\n target[key] = target[key] || permission[key]\n } else {\n mergePermissions(target[key], permission[key])\n }\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/user.utils.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 function guessName(user: {\n name?: string\n given_name?: string\n family_name?: string\n}) {\n const { name, given_name, family_name } = user\n const firstname = given_name || ''\n const lastname = family_name || ''\n\n let calculatedName = { firstname, lastname }\n\n if (firstname && !lastname) {\n calculatedName = extractNameFromArg(firstname, lastname, firstname)\n } else if (!firstname && lastname) {\n calculatedName = extractNameFromArg(firstname, lastname, lastname)\n } else if (!firstname && !lastname && name) {\n calculatedName = extractNameFromArg(firstname, lastname, name)\n }\n return calculatedName\n}\nfunction extractNameFromArg(firstnamePassthrough, lastnamePassthrough, arg) {\n let firstname = firstnamePassthrough\n let lastname = lastnamePassthrough\n\n const nameParts = arg.split(' ')\n if (nameParts.length > 1) {\n firstname = nameParts.slice(0, -1).join(' ')\n lastname = nameParts.slice(-1).join(' ')\n }\n return { firstname, lastname }\n}\n\nexport const isCamundaUserId = (userId?: string): boolean => {\n if (!userId) {\n return false\n }\n\n const CAMUNDA_DOMAIN = 'camunda.com'\n\n // Handle Okta SAML-style user IDs: \"samlp|Okta|<email>\"\n const oktaPrefix = 'samlp|Okta|'\n if (userId.startsWith(oktaPrefix)) {\n const email = userId.substring(oktaPrefix.length)\n const atIndex = email.lastIndexOf('@')\n if (atIndex === -1) {\n return false\n }\n const domain = email.substring(atIndex + 1)\n return domain === CAMUNDA_DOMAIN\n }\n return false\n}\nexport const extractCamundaUserEmail = (userId: string): string => {\n if (!isCamundaUserId(userId)) {\n throw new Error('Not a Camunda userId')\n }\n return userId.replace('samlp|Okta|', '')\n}\n"],
5
- "mappings": "AAMO,SAAS,UAAU,MAIvB;AACD,QAAM,EAAE,MAAM,YAAY,YAAY,IAAI;AAC1C,QAAM,YAAY,cAAc;AAChC,QAAM,WAAW,eAAe;AAEhC,MAAI,iBAAiB,EAAE,WAAW,SAAS;AAE3C,MAAI,aAAa,CAAC,UAAU;AAC1B,qBAAiB,mBAAmB,WAAW,UAAU,SAAS;AAAA,EACpE,WAAW,CAAC,aAAa,UAAU;AACjC,qBAAiB,mBAAmB,WAAW,UAAU,QAAQ;AAAA,EACnE,WAAW,CAAC,aAAa,CAAC,YAAY,MAAM;AAC1C,qBAAiB,mBAAmB,WAAW,UAAU,IAAI;AAAA,EAC/D;AACA,SAAO;AACT;AACA,SAAS,mBAAmB,sBAAsB,qBAAqB,KAAK;AAC1E,MAAI,YAAY;AAChB,MAAI,WAAW;AAEf,QAAM,YAAY,IAAI,MAAM,GAAG;AAC/B,MAAI,UAAU,SAAS,GAAG;AACxB,gBAAY,UAAU,MAAM,GAAG,EAAE,EAAE,KAAK,GAAG;AAC3C,eAAW,UAAU,MAAM,EAAE,EAAE,KAAK,GAAG;AAAA,EACzC;AACA,SAAO,EAAE,WAAW,SAAS;AAC/B;AAEO,MAAM,kBAAkB,CAAC,WAA6B;AAC3D,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AAEA,QAAM,iBAAiB;AAGvB,QAAM,aAAa;AACnB,MAAI,OAAO,WAAW,UAAU,GAAG;AACjC,UAAM,QAAQ,OAAO,UAAU,WAAW,MAAM;AAChD,UAAM,UAAU,MAAM,YAAY,GAAG;AACrC,QAAI,YAAY,IAAI;AAClB,aAAO;AAAA,IACT;AACA,UAAM,SAAS,MAAM,UAAU,UAAU,CAAC;AAC1C,WAAO,WAAW;AAAA,EACpB;AACA,SAAO;AACT;AACO,MAAM,0BAA0B,CAAC,WAA2B;AACjE,MAAI,CAAC,gBAAgB,MAAM,GAAG;AAC5B,UAAM,IAAI,MAAM,sBAAsB;AAAA,EACxC;AACA,SAAO,OAAO,QAAQ,eAAe,EAAE;AACzC;",
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 function guessName(user: {\n name?: string\n given_name?: string\n family_name?: string\n}) {\n const { name, given_name, family_name } = user\n const firstname = given_name || ''\n const lastname = family_name || ''\n\n let calculatedName = { firstname, lastname }\n\n if (firstname && !lastname) {\n calculatedName = extractNameFromArg(firstname, lastname, firstname)\n } else if (!firstname && lastname) {\n calculatedName = extractNameFromArg(firstname, lastname, lastname)\n } else if (!firstname && !lastname && name) {\n calculatedName = extractNameFromArg(firstname, lastname, name)\n }\n return calculatedName\n}\nfunction extractNameFromArg(\n firstnamePassthrough: string,\n lastnamePassthrough: string,\n arg: string,\n) {\n let firstname = firstnamePassthrough\n let lastname = lastnamePassthrough\n\n const nameParts = arg.split(' ')\n if (nameParts.length > 1) {\n firstname = nameParts.slice(0, -1).join(' ')\n lastname = nameParts.slice(-1).join(' ')\n }\n return { firstname, lastname }\n}\n\nexport const isCamundaUserId = (userId?: string): boolean => {\n if (!userId) {\n return false\n }\n\n const CAMUNDA_DOMAIN = 'camunda.com'\n\n // Handle Okta SAML-style user IDs: \"samlp|Okta|<email>\"\n const oktaPrefix = 'samlp|Okta|'\n if (userId.startsWith(oktaPrefix)) {\n const email = userId.substring(oktaPrefix.length)\n const atIndex = email.lastIndexOf('@')\n if (atIndex === -1) {\n return false\n }\n const domain = email.substring(atIndex + 1)\n return domain === CAMUNDA_DOMAIN\n }\n return false\n}\nexport const extractCamundaUserEmail = (userId: string): string => {\n if (!isCamundaUserId(userId)) {\n throw new Error('Not a Camunda userId')\n }\n return userId.replace('samlp|Okta|', '')\n}\n"],
5
+ "mappings": "AAMO,SAAS,UAAU,MAIvB;AACD,QAAM,EAAE,MAAM,YAAY,YAAY,IAAI;AAC1C,QAAM,YAAY,cAAc;AAChC,QAAM,WAAW,eAAe;AAEhC,MAAI,iBAAiB,EAAE,WAAW,SAAS;AAE3C,MAAI,aAAa,CAAC,UAAU;AAC1B,qBAAiB,mBAAmB,WAAW,UAAU,SAAS;AAAA,EACpE,WAAW,CAAC,aAAa,UAAU;AACjC,qBAAiB,mBAAmB,WAAW,UAAU,QAAQ;AAAA,EACnE,WAAW,CAAC,aAAa,CAAC,YAAY,MAAM;AAC1C,qBAAiB,mBAAmB,WAAW,UAAU,IAAI;AAAA,EAC/D;AACA,SAAO;AACT;AACA,SAAS,mBACP,sBACA,qBACA,KACA;AACA,MAAI,YAAY;AAChB,MAAI,WAAW;AAEf,QAAM,YAAY,IAAI,MAAM,GAAG;AAC/B,MAAI,UAAU,SAAS,GAAG;AACxB,gBAAY,UAAU,MAAM,GAAG,EAAE,EAAE,KAAK,GAAG;AAC3C,eAAW,UAAU,MAAM,EAAE,EAAE,KAAK,GAAG;AAAA,EACzC;AACA,SAAO,EAAE,WAAW,SAAS;AAC/B;AAEO,MAAM,kBAAkB,CAAC,WAA6B;AAC3D,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AAEA,QAAM,iBAAiB;AAGvB,QAAM,aAAa;AACnB,MAAI,OAAO,WAAW,UAAU,GAAG;AACjC,UAAM,QAAQ,OAAO,UAAU,WAAW,MAAM;AAChD,UAAM,UAAU,MAAM,YAAY,GAAG;AACrC,QAAI,YAAY,IAAI;AAClB,aAAO;AAAA,IACT;AACA,UAAM,SAAS,MAAM,UAAU,UAAU,CAAC;AAC1C,WAAO,WAAW;AAAA,EACpB;AACA,SAAO;AACT;AACO,MAAM,0BAA0B,CAAC,WAA2B;AACjE,MAAI,CAAC,gBAAgB,MAAM,GAAG;AAC5B,UAAM,IAAI,MAAM,sBAAsB;AAAA,EACxC;AACA,SAAO,OAAO,QAAQ,eAAe,EAAE;AACzC;",
6
6
  "names": []
7
7
  }
@@ -34,6 +34,8 @@ const checkVersion = (params) => {
34
34
  const versionSplit = params.possiblyVersionOrDockerPath?.split(":") ?? [];
35
35
  if (versionSplit.length > 1) {
36
36
  version = versionSplit[1];
37
+ } else {
38
+ version = params.possiblyVersionOrDockerPath ?? "";
37
39
  }
38
40
  }
39
41
  if (params.trueForSnapshot && version.includes("SNAPSHOT")) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/versionCheck.utils.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 * as semver from 'semver'\n\n// eslint-disable-next-line no-shadow\nexport enum VersionCheckOperator {\n LessThan,\n LessThanOrEqual,\n GreaterThan,\n GreaterThanOrEqual,\n SameMajor,\n SameMinor,\n}\n\nexport const checkVersion = (params: {\n possiblyVersionOrDockerPath?: string\n trueForSnapshot: boolean | 'compare'\n operator: VersionCheckOperator\n versionToCompareTo: string\n trueOnInvalidVersion?: boolean\n}) => {\n // quick exit: if the versionToCompareTo is\n // - `SNAPSHOT` there is not a lot we can compare here to, so we return false directly\n // - ends with `-SNAPSHOT` we ignore the `-SNAPSHOT` part for the comparison, guess a good matching semver compliant version and try to move on with the generated one in the code\n if (params.versionToCompareTo === 'SNAPSHOT') {\n return false\n }\n let versionToCompareTo = params.versionToCompareTo\n if (versionToCompareTo.endsWith('-SNAPSHOT')) {\n versionToCompareTo = versionToCompareTo.replace('-SNAPSHOT', '')\n const parts = versionToCompareTo.split('.')\n if (parts.length === 1) {\n versionToCompareTo = `${parts[0]}.0.0`\n } else if (parts.length === 2) {\n versionToCompareTo = `${parts[0]}.${parts[1]}.0`\n } else if (parts.length === 3) {\n versionToCompareTo = `${parts[0]}.${parts[1]}.${parts[2]}`\n }\n }\n if (!semver.valid(versionToCompareTo)) {\n throw new Error('Invalid version to compare to')\n }\n let version: string = ''\n if (semver.valid(params.possiblyVersionOrDockerPath ?? '')) {\n version = params.possiblyVersionOrDockerPath ?? ''\n } else {\n const versionSplit = params.possiblyVersionOrDockerPath?.split(':') ?? []\n if (versionSplit.length > 1) {\n version = versionSplit[1]\n }\n }\n if (params.trueForSnapshot && version.includes('SNAPSHOT')) {\n if (version === 'SNAPSHOT') {\n // bare SNAPSHOT: `true` short-circuits here; `'compare'` falls through to invalid-version handling\n if (params.trueForSnapshot !== 'compare') {\n return true\n }\n } else {\n version = version.replace('-SNAPSHOT', '')\n if (version.split('.').length === 1) {\n version = `${version}.99.99`\n }\n if (version.split('.').length === 2) {\n version = `${version}.99`\n }\n if (version.split('.').length === 3) {\n version = `${version.split('.')[0]}.${version.split('.')[1]}.99`\n }\n }\n }\n\n let parsedVersionToCompareTo: string = ''\n if (semver.valid(versionToCompareTo ?? '')) {\n parsedVersionToCompareTo = versionToCompareTo ?? ''\n } else {\n const versionSplit = versionToCompareTo?.split(':') ?? []\n if (versionSplit.length > 1) {\n parsedVersionToCompareTo = versionSplit[1]\n }\n }\n if (params.trueForSnapshot && parsedVersionToCompareTo === 'SNAPSHOT') {\n return true\n }\n\n if (!semver.valid(version)) {\n return !!params.trueOnInvalidVersion\n }\n\n switch (params.operator) {\n case VersionCheckOperator.LessThan:\n return semver.lt(version, parsedVersionToCompareTo)\n case VersionCheckOperator.LessThanOrEqual:\n return semver.lte(version, parsedVersionToCompareTo)\n case VersionCheckOperator.GreaterThan:\n return semver.gt(version, parsedVersionToCompareTo)\n case VersionCheckOperator.GreaterThanOrEqual:\n return semver.gte(version, parsedVersionToCompareTo)\n case VersionCheckOperator.SameMajor:\n return semver.major(version) === semver.major(parsedVersionToCompareTo)\n case VersionCheckOperator.SameMinor:\n return (\n semver.major(version) === semver.major(parsedVersionToCompareTo) &&\n semver.minor(version) === semver.minor(parsedVersionToCompareTo)\n )\n default:\n return false\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 * as semver from 'semver'\n\n// eslint-disable-next-line no-shadow\nexport enum VersionCheckOperator {\n LessThan,\n LessThanOrEqual,\n GreaterThan,\n GreaterThanOrEqual,\n SameMajor,\n SameMinor,\n}\n\nexport const checkVersion = (params: {\n possiblyVersionOrDockerPath?: string\n trueForSnapshot: boolean | 'compare'\n operator: VersionCheckOperator\n versionToCompareTo: string\n trueOnInvalidVersion?: boolean\n}) => {\n // quick exit: if the versionToCompareTo is\n // - `SNAPSHOT` there is not a lot we can compare here to, so we return false directly\n // - ends with `-SNAPSHOT` we ignore the `-SNAPSHOT` part for the comparison, guess a good matching semver compliant version and try to move on with the generated one in the code\n if (params.versionToCompareTo === 'SNAPSHOT') {\n return false\n }\n let versionToCompareTo = params.versionToCompareTo\n if (versionToCompareTo.endsWith('-SNAPSHOT')) {\n versionToCompareTo = versionToCompareTo.replace('-SNAPSHOT', '')\n const parts = versionToCompareTo.split('.')\n if (parts.length === 1) {\n versionToCompareTo = `${parts[0]}.0.0`\n } else if (parts.length === 2) {\n versionToCompareTo = `${parts[0]}.${parts[1]}.0`\n } else if (parts.length === 3) {\n versionToCompareTo = `${parts[0]}.${parts[1]}.${parts[2]}`\n }\n }\n if (!semver.valid(versionToCompareTo)) {\n throw new Error('Invalid version to compare to')\n }\n let version: string = ''\n if (semver.valid(params.possiblyVersionOrDockerPath ?? '')) {\n version = params.possiblyVersionOrDockerPath ?? ''\n } else {\n const versionSplit = params.possiblyVersionOrDockerPath?.split(':') ?? []\n if (versionSplit.length > 1) {\n version = versionSplit[1]\n } else {\n // bare version string not valid semver (e.g. '8.10-SNAPSHOT') \u2014 use as-is so SNAPSHOT expansion can handle it\n version = params.possiblyVersionOrDockerPath ?? ''\n }\n }\n if (params.trueForSnapshot && version.includes('SNAPSHOT')) {\n if (version === 'SNAPSHOT') {\n // bare SNAPSHOT: `true` short-circuits here; `'compare'` falls through to invalid-version handling\n if (params.trueForSnapshot !== 'compare') {\n return true\n }\n } else {\n version = version.replace('-SNAPSHOT', '')\n if (version.split('.').length === 1) {\n version = `${version}.99.99`\n }\n if (version.split('.').length === 2) {\n version = `${version}.99`\n }\n if (version.split('.').length === 3) {\n version = `${version.split('.')[0]}.${version.split('.')[1]}.99`\n }\n }\n }\n\n let parsedVersionToCompareTo: string = ''\n if (semver.valid(versionToCompareTo ?? '')) {\n parsedVersionToCompareTo = versionToCompareTo ?? ''\n } else {\n const versionSplit = versionToCompareTo?.split(':') ?? []\n if (versionSplit.length > 1) {\n parsedVersionToCompareTo = versionSplit[1]\n }\n }\n if (params.trueForSnapshot && parsedVersionToCompareTo === 'SNAPSHOT') {\n return true\n }\n\n if (!semver.valid(version)) {\n return !!params.trueOnInvalidVersion\n }\n\n switch (params.operator) {\n case VersionCheckOperator.LessThan:\n return semver.lt(version, parsedVersionToCompareTo)\n case VersionCheckOperator.LessThanOrEqual:\n return semver.lte(version, parsedVersionToCompareTo)\n case VersionCheckOperator.GreaterThan:\n return semver.gt(version, parsedVersionToCompareTo)\n case VersionCheckOperator.GreaterThanOrEqual:\n return semver.gte(version, parsedVersionToCompareTo)\n case VersionCheckOperator.SameMajor:\n return semver.major(version) === semver.major(parsedVersionToCompareTo)\n case VersionCheckOperator.SameMinor:\n return (\n semver.major(version) === semver.major(parsedVersionToCompareTo) &&\n semver.minor(version) === semver.minor(parsedVersionToCompareTo)\n )\n default:\n return false\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["VersionCheckOperator"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/ccma-shared-types",
3
- "version": "0.1.3",
3
+ "version": "0.4.0",
4
4
  "description": "Shared TypeScript types for Camunda Cloud Management Apps",
5
5
  "bugs": {
6
6
  "url": "https://github.com/camunda/camunda-cloud-management-apps/issues"