@oneuptime/common 13.0.8 → 14.0.1

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 (514) hide show
  1. package/Models/AnalyticsModels/AuditLog.ts +23 -15
  2. package/Models/DatabaseModels/GlobalConfig.ts +24 -0
  3. package/Models/DatabaseModels/Index.ts +4 -0
  4. package/Models/DatabaseModels/Monitor.ts +3 -2
  5. package/Models/DatabaseModels/MonitorTemplate.ts +2 -1
  6. package/Models/DatabaseModels/ServiceLevelObjectiveFeed.ts +2 -0
  7. package/Models/DatabaseModels/ServiceLevelObjectiveLabelRule.ts +522 -0
  8. package/Models/DatabaseModels/ServiceLevelObjectiveMonitorRule.ts +38 -4
  9. package/Models/DatabaseModels/ServiceLevelObjectiveOwnerRule.ts +603 -0
  10. package/Scripts/generate-service-worker.js +65 -4
  11. package/Server/API/BaseAPI.ts +26 -5
  12. package/Server/API/GlobalConfigAPI.ts +228 -462
  13. package/Server/API/ProjectOIDC.ts +25 -16
  14. package/Server/API/ProjectSSO.ts +24 -16
  15. package/Server/API/StatusPageAPI.ts +100 -42
  16. package/Server/API/TeamMemberAPI.ts +10 -1
  17. package/Server/Enterprise/EnterpriseEdition.ts +649 -0
  18. package/Server/Enterprise/EnterpriseFeature.ts +48 -0
  19. package/Server/Enterprise/EnterpriseLicenseSnapshot.ts +192 -0
  20. package/Server/Enterprise/EnterpriseServerModule.ts +233 -0
  21. package/Server/EnvironmentConfig.ts +147 -2
  22. package/Server/Infrastructure/Postgres/SchemaMigrations/1793900000000-AddEnterpriseEditionFirstSeenAt.ts +25 -0
  23. package/Server/Infrastructure/Postgres/SchemaMigrations/1794100000000-AddSloLabelAndOwnerRules.ts +248 -0
  24. package/Server/Infrastructure/Postgres/SchemaMigrations/1794200000000-AddSloMonitorRuleMonitorType.ts +19 -0
  25. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
  26. package/Server/Middleware/UserAuthorization.ts +38 -16
  27. package/Server/Services/AuditLogService.ts +84 -1079
  28. package/Server/Services/DatabaseService.ts +10 -0
  29. package/Server/Services/EnterpriseLicenseService.ts +38 -0
  30. package/Server/Services/GlobalConfigService.ts +80 -1
  31. package/Server/Services/Index.ts +4 -0
  32. package/Server/Services/MonitorProbeService.ts +116 -20
  33. package/Server/Services/MonitorService.ts +59 -6
  34. package/Server/Services/MonitorStatusTimelineService.ts +284 -0
  35. package/Server/Services/MonitorTemplateService.ts +26 -0
  36. package/Server/Services/ProjectService.ts +284 -0
  37. package/Server/Services/RumSessionPinService.ts +25 -6
  38. package/Server/Services/ServiceLevelObjectiveLabelRuleEngineService.ts +385 -0
  39. package/Server/Services/ServiceLevelObjectiveLabelRuleService.ts +51 -0
  40. package/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.ts +92 -16
  41. package/Server/Services/ServiceLevelObjectiveMonitorRuleService.ts +36 -1
  42. package/Server/Services/ServiceLevelObjectiveOwnerRuleEngineService.ts +521 -0
  43. package/Server/Services/ServiceLevelObjectiveOwnerRuleService.ts +51 -0
  44. package/Server/Services/ServiceLevelObjectiveService.ts +28 -0
  45. package/Server/Services/StatusPagePrivateUserService.ts +7 -3
  46. package/Server/Services/StatusPageService.ts +78 -1
  47. package/Server/Services/TeamMemberService.ts +11 -0
  48. package/Server/Services/TeamService.ts +10 -0
  49. package/Server/Services/UserService.ts +10 -17
  50. package/Server/Types/Database/Permissions/CreatePermission.ts +15 -0
  51. package/Server/Types/Database/Permissions/EditionPermission.ts +208 -18
  52. package/Server/Types/Database/Permissions/TablePermission.ts +10 -3
  53. package/Server/Types/Database/Permissions/UpdatePermission.ts +29 -0
  54. package/Server/Types/Markdown.ts +41 -0
  55. package/Server/Types/Workflow/Components/Telegram/SendMessageToChat.ts +27 -1
  56. package/Server/Utils/AI/Toolbox/SloTools.ts +1 -0
  57. package/Server/Utils/CommunityEditionSsoReport.ts +361 -0
  58. package/Server/Utils/EditionEnforcement.ts +233 -0
  59. package/Server/Utils/FrontendEnvironment.ts +41 -2
  60. package/Server/Utils/InstanceHealth/RedisHealth.ts +12 -277
  61. package/Server/Utils/Monitor/AffectedResourceList.ts +148 -0
  62. package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +1 -1
  63. package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +10 -1
  64. package/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.ts +1 -1
  65. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +720 -465
  66. package/Server/Utils/Monitor/MonitoringIntervalValidator.ts +116 -0
  67. package/Server/Utils/Monitor/RootCauseList.ts +139 -0
  68. package/Server/Utils/Rules/RuleRun/RuleRunRegistry.ts +28 -0
  69. package/Server/Utils/Slo/SloRulePatternValidator.ts +42 -0
  70. package/Server/Utils/Workspace/Slack/Slack.ts +423 -10
  71. package/Tests/App/Accounts/LoginPasskey.test.tsx +18 -0
  72. package/Tests/App/Accounts/LoginSsoEdition.test.tsx +616 -0
  73. package/Tests/App/AdminDashboard/AdminAuthenticationSsoEdition.test.tsx +217 -0
  74. package/Tests/App/AdminDashboard/AdminEnterprisePluginPage.test.tsx +357 -0
  75. package/Tests/App/AdminDashboard/EnterpriseLicensesShell.test.tsx +214 -0
  76. package/Tests/App/AdminDashboard/GlobalSSOEnterpriseShells.test.tsx +271 -0
  77. package/Tests/App/AdminDashboard/HealthShells.test.tsx +659 -0
  78. package/Tests/App/Dashboard/AuditLogsAndComplianceShells.test.tsx +572 -0
  79. package/Tests/App/Dashboard/EnterpriseFeatureUpgrade.test.tsx +547 -0
  80. package/Tests/App/Dashboard/EnterprisePluginPage.test.tsx +667 -0
  81. package/Tests/App/Dashboard/FeedFilterSortIntegration.test.tsx +1632 -0
  82. package/Tests/App/Dashboard/FeedOptionsLocales.test.ts +250 -0
  83. package/Tests/App/Dashboard/FeedOrdering.test.ts +279 -9
  84. package/Tests/App/Dashboard/IdentityEnterpriseShells.test.tsx +319 -0
  85. package/Tests/App/Dashboard/InvestigationFeedRefresh.test.tsx +60 -1
  86. package/Tests/App/Dashboard/InvestigationPanel.test.tsx +594 -3
  87. package/Tests/App/Dashboard/OnboardingSsoEmptyState.test.tsx +185 -0
  88. package/Tests/App/Dashboard/ProductOrientation.test.tsx +646 -0
  89. package/Tests/App/Dashboard/ResourceFeed.test.tsx +612 -2
  90. package/Tests/App/Dashboard/ResourceFeedPageWiring.test.ts +30 -0
  91. package/Tests/App/Dashboard/ResourceFeedPagesFilterSort.test.tsx +1202 -0
  92. package/Tests/App/Dashboard/ScheduledMaintenanceFeedRefresh.test.tsx +52 -1
  93. package/Tests/App/Dashboard/SecurityEventConnectionDiagnostics.test.tsx +45 -9
  94. package/Tests/App/Dashboard/SecurityEventDetailPanel.test.tsx +399 -0
  95. package/Tests/App/Dashboard/SecurityEventListRow.test.tsx +214 -0
  96. package/Tests/App/Dashboard/SecurityEventsEmptyState.test.tsx +1 -83
  97. package/Tests/App/Dashboard/SecurityEventsNavTabs.test.tsx +248 -0
  98. package/Tests/App/Dashboard/SecurityEventsViewer.test.tsx +1203 -0
  99. package/Tests/App/Dashboard/SloFeed.test.tsx +106 -1
  100. package/Tests/App/Dashboard/SloMonitorRuleCriteria.test.tsx +566 -0
  101. package/Tests/App/Dashboard/SloNavigationWiring.test.tsx +6 -4
  102. package/Tests/App/Dashboard/SloNoticeBanner.test.tsx +186 -0
  103. package/Tests/App/Dashboard/SloOverviewKpiStrip.test.tsx +388 -44
  104. package/Tests/App/Dashboard/SloOverviewLayout.test.tsx +613 -0
  105. package/Tests/App/Dashboard/UserEmailCallSites.test.tsx +11 -91
  106. package/Tests/App/StatusPage/StatusPageSsoEmptyState.test.tsx +319 -0
  107. package/Tests/Helpers/RefreshAwareApiScan.ts +757 -0
  108. package/Tests/Helpers/TenantScopedRequestScan.ts +515 -0
  109. package/Tests/Models/DatabaseModels/ResourceFeedModels.test.ts +0 -8
  110. package/Tests/Models/DatabaseModels/SloLabelAndOwnerRuleModels.test.ts +404 -0
  111. package/Tests/Models/DatabaseModels/SloOverhaulModels.test.ts +17 -1
  112. package/Tests/Models/DatabaseModels/StaticRuleCriteriaInheritance.test.ts +4 -2
  113. package/Tests/Scripts/GenerateServiceWorker.test.ts +931 -0
  114. package/Tests/Server/API/BaseAPICreateItemDoesNotMutateModel.test.ts +130 -0
  115. package/Tests/Server/API/GlobalConfigLicense.test.ts +742 -497
  116. package/Tests/Server/API/OnCallReadinessAPI.test.ts +35 -909
  117. package/Tests/Server/API/SsoProviderListingsEdition.test.ts +432 -0
  118. package/Tests/Server/API/TeamMemberLeaveScimLockEdition.test.ts +252 -0
  119. package/Tests/Server/Enterprise/EnterpriseEdition.test.ts +824 -0
  120. package/Tests/Server/Enterprise/EnterpriseFeatureActive.test.ts +643 -0
  121. package/Tests/Server/Enterprise/EnterpriseLicenseSnapshot.test.ts +294 -0
  122. package/Tests/Server/Enterprise/EnterpriseModelFeatureMap.test.ts +93 -0
  123. package/Tests/Server/Enterprise/EnterpriseOnlyModulesLiveInEe.test.ts +582 -0
  124. package/Tests/Server/Enterprise/EnterpriseServerModule.test.ts +247 -0
  125. package/Tests/Server/Enterprise/FakeEnterpriseModule.ts +502 -0
  126. package/Tests/Server/Enterprise/TestBillingFlag.ts +70 -0
  127. package/Tests/Server/EnvironmentConfigEnterpriseEdition.test.ts +314 -0
  128. package/Tests/Server/Infrastructure/ContainerBootConfiguration.test.ts +289 -0
  129. package/Tests/Server/Infrastructure/E2EClickHouseFixtureAccess.test.ts +5 -1
  130. package/Tests/Server/Infrastructure/Postgres/AddConfigurableRuleCriteriaMigration.test.ts +3 -0
  131. package/Tests/Server/Infrastructure/Postgres/AddSloLabelAndOwnerRulesMigration.test.ts +407 -0
  132. package/Tests/Server/Infrastructure/Postgres/AddSloMonitorRuleMonitorTypeMigration.test.ts +171 -0
  133. package/Tests/Server/Infrastructure/Postgres/SloProductOverhaulMigration.test.ts +88 -4
  134. package/Tests/Server/Middleware/UserAuthorization.test.ts +37 -2
  135. package/Tests/Server/Middleware/UserAuthorizationEditionEnforcement.test.ts +516 -0
  136. package/Tests/Server/Services/AuditLogService.test.ts +460 -990
  137. package/Tests/Server/Services/CreateAndReadResponsesKeepIds.test.ts +263 -0
  138. package/Tests/Server/Services/DatabaseServiceRuleCriteriaValidation.test.ts +104 -0
  139. package/Tests/Server/Services/EnterpriseLicenseServiceKeyGeneration.test.ts +151 -0
  140. package/Tests/Server/Services/GlobalConfigServiceLicenseColumns.test.ts +357 -0
  141. package/Tests/Server/Services/MonitorDestinationInfoIPv6.test.ts +101 -0
  142. package/Tests/Server/Services/MonitorProbeServiceIntervalScheduling.test.ts +333 -0
  143. package/Tests/Server/Services/MonitorStatusTimelineDailyAggregates.test.ts +303 -0
  144. package/Tests/Server/Services/ProjectServiceAuditLogLicense.test.ts +701 -0
  145. package/Tests/Server/Services/ProjectServiceAuditLogSettingsCache.test.ts +31 -35
  146. package/Tests/Server/Services/RuleRun/LabelRuleEnginesGroupBRun.test.ts +48 -1
  147. package/Tests/Server/Services/RuleRun/OwnerRuleEnginesGroupBRun.test.ts +30 -0
  148. package/Tests/Server/Services/ScimPushGroupsTeamLocksEdition.test.ts +431 -0
  149. package/Tests/Server/Services/ServiceLevelObjectiveLabelAndOwnerRuleEngines.test.ts +1170 -0
  150. package/Tests/Server/Services/ServiceLevelObjectiveLabelAndOwnerRuleServices.test.ts +172 -0
  151. package/Tests/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.test.ts +323 -0
  152. package/Tests/Server/Services/ServiceLevelObjectiveMonitorRuleService.test.ts +115 -0
  153. package/Tests/Server/Services/ServiceLevelObjectiveMonitorRuleTriggers.test.ts +21 -2
  154. package/Tests/Server/Services/ServiceLevelObjectiveMonitorTypePostgres.test.ts +480 -0
  155. package/Tests/Server/Services/ServiceLevelObjectiveService.test.ts +162 -0
  156. package/Tests/Server/Services/SsoRequirementReadMasking.test.ts +419 -0
  157. package/Tests/Server/Services/SsoRequirementWriteGuard.test.ts +769 -0
  158. package/Tests/Server/Services/StaticRuleCriteriaRuntimeCoverage.test.ts +45 -6
  159. package/Tests/Server/Services/StatusPagePrivateUserInvitationPolicy.test.ts +94 -0
  160. package/Tests/Server/Services/UserAuthenticationService.test.ts +35 -0
  161. package/Tests/Server/Services/UserServiceSeatLimit.test.ts +94 -56
  162. package/Tests/Server/Types/Database/FeedEventTypeFilterQuery.test.ts +745 -0
  163. package/Tests/Server/Types/Database/Permissions/EditionPermission.test.ts +1823 -0
  164. package/Tests/Server/Types/Markdown.test.ts +183 -1
  165. package/Tests/Server/Types/Workflow/Components/ApiComponentSsrf.test.ts +49 -0
  166. package/Tests/Server/Types/Workflow/Components/TelegramSendMessageToChat.test.ts +331 -0
  167. package/Tests/Server/Utils/AI/SloTools.test.ts +10 -0
  168. package/Tests/Server/Utils/CommunityEditionSsoReport.test.ts +565 -0
  169. package/Tests/Server/Utils/EditionEnforcement.test.ts +303 -0
  170. package/Tests/Server/Utils/FrontendEnvironment.test.ts +367 -0
  171. package/Tests/Server/Utils/InstanceHealth/RedisHealth.test.ts +38 -418
  172. package/Tests/Server/Utils/Monitor/AffectedResourceList.test.ts +518 -0
  173. package/Tests/Server/Utils/Monitor/Criteria/EvaluateOverTime.test.ts +24 -4
  174. package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteriaAnomalyUnits.test.ts +1 -1
  175. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +1339 -96
  176. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorBreachingSamples.test.ts +1101 -0
  177. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorMetricUnits.test.ts +106 -80
  178. package/Tests/Server/Utils/Monitor/MonitoringIntervalValidator.test.ts +188 -0
  179. package/Tests/Server/Utils/Monitor/RootCauseList.test.ts +252 -0
  180. package/Tests/Server/Utils/Rules/RuleRun/RuleRunPermission.test.ts +154 -0
  181. package/Tests/Server/Utils/SSRFProtection.test.ts +111 -0
  182. package/Tests/Server/Utils/Slo/SloRulePatternValidator.test.ts +67 -0
  183. package/Tests/Server/Utils/VM/VMRunnerSsrf.test.ts +213 -0
  184. package/Tests/Server/Utils/Workspace/Slack/SlackMarkdownSectionSplit.test.ts +1209 -0
  185. package/Tests/Types/API/HostnameFromAuthority.test.ts +20 -10
  186. package/Tests/Types/API/HostnameIPv6.test.ts +149 -0
  187. package/Tests/Types/API/Route.test.ts +56 -0
  188. package/Tests/Types/API/URLSchemeLikePath.test.ts +304 -0
  189. package/Tests/Types/Database/CanonicalModelInstance.test.ts +190 -0
  190. package/Tests/UI/Components/EditionLabelLapseCopy.ts +104 -0
  191. package/Tests/UI/Components/EditionLabelLicenseManagerWiring.test.tsx +254 -0
  192. package/Tests/UI/Components/EditionLabelLicenseRefresh.test.tsx +84 -178
  193. package/Tests/UI/Components/EditionLabelLicenseStatus.test.tsx +1586 -0
  194. package/Tests/UI/Components/EditionLabelLicenseWritesGuard.test.tsx +157 -0
  195. package/Tests/UI/Components/FeedOptions.test.ts +1404 -0
  196. package/Tests/UI/Components/FeedOptionsButton.test.tsx +2603 -0
  197. package/Tests/UI/Components/Graphs/DayUptimeGraph.test.tsx +49 -2
  198. package/Tests/UI/Components/Icon.test.tsx +26 -0
  199. package/Tests/UI/Components/MarkdownConverters.test.ts +684 -0
  200. package/Tests/UI/Components/ModelListEmptyState.test.tsx +289 -0
  201. package/Tests/UI/Components/RuleCriteria/RuleCriteriaModelTable.test.tsx +3 -3
  202. package/Tests/UI/Components/TelemetryViewer/TelemetryViewerEmptyContent.test.tsx +131 -0
  203. package/Tests/UI/Components/useFeedItemsViewKey.test.tsx +1017 -0
  204. package/Tests/UI/Components/useFeedOptions.test.tsx +1107 -0
  205. package/Tests/UI/EsbuildEnterpriseAlias.test.ts +1127 -0
  206. package/Tests/Utils/HostAddressUtil.test.ts +138 -0
  207. package/Tests/Utils/LabelRuleImportExport.test.ts +102 -0
  208. package/Tests/Utils/Monitor/MonitorDestinationUtil.test.ts +313 -0
  209. package/Tests/Utils/Monitor/MonitoringIntervalUtil.test.ts +304 -0
  210. package/Tests/Utils/Slo/SloDuration.test.ts +115 -24
  211. package/Tests/Utils/Slo/SloHealth.test.ts +93 -10
  212. package/Tests/Utils/Slo/SloMonitorRuleCriteria.test.ts +109 -0
  213. package/Tests/Utils/Slo/SloOverviewText.test.ts +64 -0
  214. package/Tests/Utils/StatusPage/UptimeDailyAggregateUtil.test.ts +248 -0
  215. package/Types/API/Hostname.ts +63 -16
  216. package/Types/API/Route.ts +19 -2
  217. package/Types/API/URL.ts +26 -2
  218. package/Types/Database/AccessControl/ColumnAccessControl.ts +19 -7
  219. package/Types/Database/AccessControl/ColumnBillingAccessControl.ts +19 -7
  220. package/Types/Database/AccessControl/OwnerOnlyColumn.ts +15 -6
  221. package/Types/Database/CanonicalModelInstance.ts +102 -0
  222. package/Types/Database/TableColumn.ts +20 -6
  223. package/Types/EnterpriseLicense/EnterpriseLicensePeriods.ts +29 -0
  224. package/Types/IP/IPv6.ts +6 -1
  225. package/Types/Monitor/MetricMonitor/MetricCriteriaContext.ts +6 -5
  226. package/Types/Monitor/MetricMonitor/MetricMonitorResponse.ts +9 -0
  227. package/Types/Monitor/MonitorStep.ts +6 -1
  228. package/Types/Monitor/ProxmoxAlertTemplates.ts +1 -1
  229. package/Types/Permission.ts +90 -0
  230. package/Types/Rules/RuleCriteriaFieldRegistry.ts +11 -0
  231. package/Types/Rules/RuleRun.ts +4 -0
  232. package/Types/StatusPage/UptimeDailyAggregate.ts +110 -0
  233. package/UI/Components/EditionLabel/EditionLabel.tsx +796 -1195
  234. package/UI/Components/EditionLabel/LicenseManager.ts +119 -0
  235. package/UI/Components/Feed/FeedOptions.ts +427 -0
  236. package/UI/Components/Feed/FeedOptionsButton.tsx +692 -0
  237. package/UI/Components/Feed/useFeedItems.ts +28 -9
  238. package/UI/Components/Feed/useFeedOptions.ts +225 -0
  239. package/UI/Components/Graphs/DayUptimeGraph.tsx +123 -15
  240. package/UI/Components/Icon/Icon.tsx +1 -1
  241. package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
  242. package/UI/Components/ModelList/ModelList.tsx +11 -1
  243. package/UI/Components/MonitorGraphs/Uptime.tsx +69 -0
  244. package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +28 -12
  245. package/UI/esbuild-enterprise.js +263 -0
  246. package/Utils/EnterpriseLicense/EnterpriseLicenseUsage.ts +7 -2
  247. package/Utils/HostAddressUtil.ts +94 -0
  248. package/Utils/LabelRuleImportExport.ts +27 -9
  249. package/Utils/Monitor/MetricValueFormatter.ts +2 -2
  250. package/Utils/Monitor/MonitorDestinationUtil.ts +157 -0
  251. package/Utils/Monitor/MonitoringIntervalUtil.ts +436 -0
  252. package/Utils/Rules/MonitorTypeRuleCriteria.ts +31 -0
  253. package/Utils/Slo/SloDuration.ts +22 -6
  254. package/Utils/Slo/SloHealth.ts +8 -7
  255. package/Utils/Slo/SloMonitorRuleCriteria.ts +33 -1
  256. package/Utils/Slo/SloOverviewText.ts +33 -0
  257. package/Utils/Slo/SloProjection.ts +4 -3
  258. package/Utils/StatusPage/UptimeDailyAggregateUtil.ts +192 -0
  259. package/build/dist/Models/AnalyticsModels/AuditLog.js +23 -15
  260. package/build/dist/Models/AnalyticsModels/AuditLog.js.map +1 -1
  261. package/build/dist/Models/DatabaseModels/GlobalConfig.js +25 -0
  262. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  263. package/build/dist/Models/DatabaseModels/Index.js +4 -0
  264. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  265. package/build/dist/Models/DatabaseModels/Monitor.js +2 -2
  266. package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
  267. package/build/dist/Models/DatabaseModels/MonitorTemplate.js +2 -1
  268. package/build/dist/Models/DatabaseModels/MonitorTemplate.js.map +1 -1
  269. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveFeed.js +2 -0
  270. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveFeed.js.map +1 -1
  271. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveLabelRule.js +530 -0
  272. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveLabelRule.js.map +1 -0
  273. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveMonitorRule.js +39 -4
  274. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveMonitorRule.js.map +1 -1
  275. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerRule.js +612 -0
  276. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerRule.js.map +1 -0
  277. package/build/dist/Server/API/BaseAPI.js +26 -5
  278. package/build/dist/Server/API/BaseAPI.js.map +1 -1
  279. package/build/dist/Server/API/GlobalConfigAPI.js +148 -344
  280. package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
  281. package/build/dist/Server/API/ProjectOIDC.js +24 -16
  282. package/build/dist/Server/API/ProjectOIDC.js.map +1 -1
  283. package/build/dist/Server/API/ProjectSSO.js +24 -16
  284. package/build/dist/Server/API/ProjectSSO.js.map +1 -1
  285. package/build/dist/Server/API/StatusPageAPI.js +93 -43
  286. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  287. package/build/dist/Server/API/TeamMemberAPI.js +8 -1
  288. package/build/dist/Server/API/TeamMemberAPI.js.map +1 -1
  289. package/build/dist/Server/Enterprise/EnterpriseEdition.js +466 -0
  290. package/build/dist/Server/Enterprise/EnterpriseEdition.js.map +1 -0
  291. package/build/dist/Server/Enterprise/EnterpriseFeature.js +39 -0
  292. package/build/dist/Server/Enterprise/EnterpriseFeature.js.map +1 -0
  293. package/build/dist/Server/Enterprise/EnterpriseLicenseSnapshot.js +70 -0
  294. package/build/dist/Server/Enterprise/EnterpriseLicenseSnapshot.js.map +1 -0
  295. package/build/dist/Server/Enterprise/EnterpriseServerModule.js +84 -0
  296. package/build/dist/Server/Enterprise/EnterpriseServerModule.js.map +1 -0
  297. package/build/dist/Server/EnvironmentConfig.js +84 -2
  298. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  299. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793900000000-AddEnterpriseEditionFirstSeenAt.js +18 -0
  300. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793900000000-AddEnterpriseEditionFirstSeenAt.js.map +1 -0
  301. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794100000000-AddSloLabelAndOwnerRules.js +93 -0
  302. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794100000000-AddSloLabelAndOwnerRules.js.map +1 -0
  303. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794200000000-AddSloMonitorRuleMonitorType.js +12 -0
  304. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794200000000-AddSloMonitorRuleMonitorType.js.map +1 -0
  305. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
  306. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  307. package/build/dist/Server/Middleware/UserAuthorization.js +30 -11
  308. package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
  309. package/build/dist/Server/Services/AuditLogService.js +71 -740
  310. package/build/dist/Server/Services/AuditLogService.js.map +1 -1
  311. package/build/dist/Server/Services/DatabaseService.js +7 -0
  312. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  313. package/build/dist/Server/Services/EnterpriseLicenseService.js +34 -0
  314. package/build/dist/Server/Services/EnterpriseLicenseService.js.map +1 -1
  315. package/build/dist/Server/Services/GlobalConfigService.js +63 -0
  316. package/build/dist/Server/Services/GlobalConfigService.js.map +1 -1
  317. package/build/dist/Server/Services/Index.js +4 -0
  318. package/build/dist/Server/Services/Index.js.map +1 -1
  319. package/build/dist/Server/Services/MonitorProbeService.js +90 -17
  320. package/build/dist/Server/Services/MonitorProbeService.js.map +1 -1
  321. package/build/dist/Server/Services/MonitorService.js +48 -6
  322. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  323. package/build/dist/Server/Services/MonitorStatusTimelineService.js +242 -0
  324. package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
  325. package/build/dist/Server/Services/MonitorTemplateService.js +16 -0
  326. package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
  327. package/build/dist/Server/Services/ProjectService.js +214 -0
  328. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  329. package/build/dist/Server/Services/RumSessionPinService.js +24 -6
  330. package/build/dist/Server/Services/RumSessionPinService.js.map +1 -1
  331. package/build/dist/Server/Services/ServiceLevelObjectiveLabelRuleEngineService.js +295 -0
  332. package/build/dist/Server/Services/ServiceLevelObjectiveLabelRuleEngineService.js.map +1 -0
  333. package/build/dist/Server/Services/ServiceLevelObjectiveLabelRuleService.js +56 -0
  334. package/build/dist/Server/Services/ServiceLevelObjectiveLabelRuleService.js.map +1 -0
  335. package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.js +59 -14
  336. package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.js.map +1 -1
  337. package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleService.js +22 -1
  338. package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleService.js.map +1 -1
  339. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerRuleEngineService.js +400 -0
  340. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerRuleEngineService.js.map +1 -0
  341. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerRuleService.js +56 -0
  342. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerRuleService.js.map +1 -0
  343. package/build/dist/Server/Services/ServiceLevelObjectiveService.js +21 -0
  344. package/build/dist/Server/Services/ServiceLevelObjectiveService.js.map +1 -1
  345. package/build/dist/Server/Services/StatusPagePrivateUserService.js +7 -3
  346. package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
  347. package/build/dist/Server/Services/StatusPageService.js +71 -0
  348. package/build/dist/Server/Services/StatusPageService.js.map +1 -1
  349. package/build/dist/Server/Services/TeamMemberService.js +10 -0
  350. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  351. package/build/dist/Server/Services/TeamService.js +9 -0
  352. package/build/dist/Server/Services/TeamService.js.map +1 -1
  353. package/build/dist/Server/Services/UserService.js +10 -16
  354. package/build/dist/Server/Services/UserService.js.map +1 -1
  355. package/build/dist/Server/Types/Database/Permissions/CreatePermission.js +10 -0
  356. package/build/dist/Server/Types/Database/Permissions/CreatePermission.js.map +1 -1
  357. package/build/dist/Server/Types/Database/Permissions/EditionPermission.js +154 -14
  358. package/build/dist/Server/Types/Database/Permissions/EditionPermission.js.map +1 -1
  359. package/build/dist/Server/Types/Database/Permissions/TablePermission.js +10 -3
  360. package/build/dist/Server/Types/Database/Permissions/TablePermission.js.map +1 -1
  361. package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js +17 -0
  362. package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js.map +1 -1
  363. package/build/dist/Server/Types/Markdown.js +31 -0
  364. package/build/dist/Server/Types/Markdown.js.map +1 -1
  365. package/build/dist/Server/Types/Workflow/Components/Telegram/SendMessageToChat.js +20 -1
  366. package/build/dist/Server/Types/Workflow/Components/Telegram/SendMessageToChat.js.map +1 -1
  367. package/build/dist/Server/Utils/AI/Toolbox/SloTools.js +1 -0
  368. package/build/dist/Server/Utils/AI/Toolbox/SloTools.js.map +1 -1
  369. package/build/dist/Server/Utils/CommunityEditionSsoReport.js +223 -0
  370. package/build/dist/Server/Utils/CommunityEditionSsoReport.js.map +1 -0
  371. package/build/dist/Server/Utils/EditionEnforcement.js +187 -0
  372. package/build/dist/Server/Utils/EditionEnforcement.js.map +1 -0
  373. package/build/dist/Server/Utils/FrontendEnvironment.js +31 -2
  374. package/build/dist/Server/Utils/FrontendEnvironment.js.map +1 -1
  375. package/build/dist/Server/Utils/InstanceHealth/RedisHealth.js +6 -193
  376. package/build/dist/Server/Utils/InstanceHealth/RedisHealth.js.map +1 -1
  377. package/build/dist/Server/Utils/Monitor/AffectedResourceList.js +67 -0
  378. package/build/dist/Server/Utils/Monitor/AffectedResourceList.js.map +1 -0
  379. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +1 -1
  380. package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +8 -1
  381. package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
  382. package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js +1 -1
  383. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +585 -367
  384. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  385. package/build/dist/Server/Utils/Monitor/MonitoringIntervalValidator.js +88 -0
  386. package/build/dist/Server/Utils/Monitor/MonitoringIntervalValidator.js.map +1 -0
  387. package/build/dist/Server/Utils/Monitor/RootCauseList.js +101 -0
  388. package/build/dist/Server/Utils/Monitor/RootCauseList.js.map +1 -0
  389. package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js +28 -0
  390. package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js.map +1 -1
  391. package/build/dist/Server/Utils/Slo/SloRulePatternValidator.js +28 -0
  392. package/build/dist/Server/Utils/Slo/SloRulePatternValidator.js.map +1 -0
  393. package/build/dist/Server/Utils/Workspace/Slack/Slack.js +331 -11
  394. package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
  395. package/build/dist/Types/API/Hostname.js +59 -11
  396. package/build/dist/Types/API/Hostname.js.map +1 -1
  397. package/build/dist/Types/API/Route.js +18 -2
  398. package/build/dist/Types/API/Route.js.map +1 -1
  399. package/build/dist/Types/API/URL.js +23 -2
  400. package/build/dist/Types/API/URL.js.map +1 -1
  401. package/build/dist/Types/Database/AccessControl/ColumnAccessControl.js +19 -7
  402. package/build/dist/Types/Database/AccessControl/ColumnAccessControl.js.map +1 -1
  403. package/build/dist/Types/Database/AccessControl/ColumnBillingAccessControl.js +19 -7
  404. package/build/dist/Types/Database/AccessControl/ColumnBillingAccessControl.js.map +1 -1
  405. package/build/dist/Types/Database/AccessControl/OwnerOnlyColumn.js +13 -6
  406. package/build/dist/Types/Database/AccessControl/OwnerOnlyColumn.js.map +1 -1
  407. package/build/dist/Types/Database/CanonicalModelInstance.js +88 -0
  408. package/build/dist/Types/Database/CanonicalModelInstance.js.map +1 -0
  409. package/build/dist/Types/Database/TableColumn.js +19 -6
  410. package/build/dist/Types/Database/TableColumn.js.map +1 -1
  411. package/build/dist/Types/EnterpriseLicense/EnterpriseLicensePeriods.js +28 -0
  412. package/build/dist/Types/EnterpriseLicense/EnterpriseLicensePeriods.js.map +1 -0
  413. package/build/dist/Types/IP/IPv6.js +6 -1
  414. package/build/dist/Types/IP/IPv6.js.map +1 -1
  415. package/build/dist/Types/Monitor/MonitorStep.js +5 -0
  416. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  417. package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js +1 -1
  418. package/build/dist/Types/Permission.js +84 -0
  419. package/build/dist/Types/Permission.js.map +1 -1
  420. package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js +11 -0
  421. package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js.map +1 -1
  422. package/build/dist/Types/Rules/RuleRun.js +4 -0
  423. package/build/dist/Types/Rules/RuleRun.js.map +1 -1
  424. package/build/dist/Types/StatusPage/UptimeDailyAggregate.js +32 -0
  425. package/build/dist/Types/StatusPage/UptimeDailyAggregate.js.map +1 -0
  426. package/build/dist/UI/Components/EditionLabel/EditionLabel.js +414 -585
  427. package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
  428. package/build/dist/UI/Components/EditionLabel/LicenseManager.js +2 -0
  429. package/build/dist/UI/Components/EditionLabel/LicenseManager.js.map +1 -0
  430. package/build/dist/UI/Components/Feed/FeedOptions.js +235 -0
  431. package/build/dist/UI/Components/Feed/FeedOptions.js.map +1 -0
  432. package/build/dist/UI/Components/Feed/FeedOptionsButton.js +346 -0
  433. package/build/dist/UI/Components/Feed/FeedOptionsButton.js.map +1 -0
  434. package/build/dist/UI/Components/Feed/useFeedItems.js +17 -7
  435. package/build/dist/UI/Components/Feed/useFeedItems.js.map +1 -1
  436. package/build/dist/UI/Components/Feed/useFeedOptions.js +130 -0
  437. package/build/dist/UI/Components/Feed/useFeedOptions.js.map +1 -0
  438. package/build/dist/UI/Components/Graphs/DayUptimeGraph.js +90 -17
  439. package/build/dist/UI/Components/Graphs/DayUptimeGraph.js.map +1 -1
  440. package/build/dist/UI/Components/Icon/Icon.js +1 -1
  441. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  442. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
  443. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
  444. package/build/dist/UI/Components/ModelList/ModelList.js +4 -1
  445. package/build/dist/UI/Components/ModelList/ModelList.js.map +1 -1
  446. package/build/dist/UI/Components/MonitorGraphs/Uptime.js +42 -1
  447. package/build/dist/UI/Components/MonitorGraphs/Uptime.js.map +1 -1
  448. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +2 -2
  449. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
  450. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js +6 -2
  451. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js.map +1 -1
  452. package/build/dist/Utils/HostAddressUtil.js +80 -0
  453. package/build/dist/Utils/HostAddressUtil.js.map +1 -0
  454. package/build/dist/Utils/LabelRuleImportExport.js +22 -6
  455. package/build/dist/Utils/LabelRuleImportExport.js.map +1 -1
  456. package/build/dist/Utils/Monitor/MetricValueFormatter.js +2 -2
  457. package/build/dist/Utils/Monitor/MonitorDestinationUtil.js +127 -0
  458. package/build/dist/Utils/Monitor/MonitorDestinationUtil.js.map +1 -0
  459. package/build/dist/Utils/Monitor/MonitoringIntervalUtil.js +374 -0
  460. package/build/dist/Utils/Monitor/MonitoringIntervalUtil.js.map +1 -0
  461. package/build/dist/Utils/Rules/MonitorTypeRuleCriteria.js +18 -0
  462. package/build/dist/Utils/Rules/MonitorTypeRuleCriteria.js.map +1 -0
  463. package/build/dist/Utils/Slo/SloDuration.js +13 -5
  464. package/build/dist/Utils/Slo/SloDuration.js.map +1 -1
  465. package/build/dist/Utils/Slo/SloHealth.js +8 -7
  466. package/build/dist/Utils/Slo/SloHealth.js.map +1 -1
  467. package/build/dist/Utils/Slo/SloMonitorRuleCriteria.js +16 -1
  468. package/build/dist/Utils/Slo/SloMonitorRuleCriteria.js.map +1 -1
  469. package/build/dist/Utils/Slo/SloOverviewText.js +16 -0
  470. package/build/dist/Utils/Slo/SloOverviewText.js.map +1 -1
  471. package/build/dist/Utils/Slo/SloProjection.js.map +1 -1
  472. package/build/dist/Utils/StatusPage/UptimeDailyAggregateUtil.js +148 -0
  473. package/build/dist/Utils/StatusPage/UptimeDailyAggregateUtil.js.map +1 -0
  474. package/jest.config.json +3 -1
  475. package/package.json +1 -1
  476. package/test-setup.sh +103 -34
  477. package/tsconfig.json +13 -0
  478. package/Server/API/EnterpriseLicenseAPI.ts +0 -925
  479. package/Server/API/TeamComplianceAPI.ts +0 -158
  480. package/Server/Middleware/SCIMAuthorization.ts +0 -141
  481. package/Server/Services/TeamComplianceService.ts +0 -733
  482. package/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.ts +0 -186
  483. package/Server/Utils/InstanceHealth/PostgresHealth.ts +0 -286
  484. package/Tests/App/AdminDashboard/EnterpriseLicenseInstanceActivity.test.tsx +0 -451
  485. package/Tests/App/Dashboard/AuditLogsTable.test.tsx +0 -598
  486. package/Tests/App/Dashboard/SecurityEventsExplorer.test.tsx +0 -761
  487. package/Tests/App/Dashboard/SecurityEventsSideMenu.test.tsx +0 -247
  488. package/Tests/App/Dashboard/SecurityEventsTableColumns.test.tsx +0 -382
  489. package/Tests/App/Dashboard/SecurityEventsVolumeChart.test.tsx +0 -321
  490. package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +0 -1851
  491. package/Tests/Server/Middleware/SCIMAuthorization.test.ts +0 -525
  492. package/Tests/Server/Services/TeamComplianceServiceBehaviour.test.ts +0 -1845
  493. package/Tests/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.test.ts +0 -495
  494. package/Tests/Server/Utils/InstanceHealth/PostgresHealth.test.ts +0 -337
  495. package/Tests/Utils/EnterpriseLicenseSeats.test.ts +0 -576
  496. package/Tests/Utils/EnterpriseLicenseSync.test.ts +0 -568
  497. package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +0 -287
  498. package/Utils/EnterpriseLicense/EnterpriseLicenseSync.ts +0 -244
  499. package/build/dist/Server/API/EnterpriseLicenseAPI.js +0 -646
  500. package/build/dist/Server/API/EnterpriseLicenseAPI.js.map +0 -1
  501. package/build/dist/Server/API/TeamComplianceAPI.js +0 -111
  502. package/build/dist/Server/API/TeamComplianceAPI.js.map +0 -1
  503. package/build/dist/Server/Middleware/SCIMAuthorization.js +0 -124
  504. package/build/dist/Server/Middleware/SCIMAuthorization.js.map +0 -1
  505. package/build/dist/Server/Services/TeamComplianceService.js +0 -537
  506. package/build/dist/Server/Services/TeamComplianceService.js.map +0 -1
  507. package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js +0 -145
  508. package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js.map +0 -1
  509. package/build/dist/Server/Utils/InstanceHealth/PostgresHealth.js +0 -194
  510. package/build/dist/Server/Utils/InstanceHealth/PostgresHealth.js.map +0 -1
  511. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +0 -168
  512. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +0 -1
  513. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSync.js +0 -174
  514. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSync.js.map +0 -1
@@ -1,5 +1,6 @@
1
1
  import BaseModel from "../../../Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel";
2
2
  import { ColumnAccessControl } from "../../BaseDatabase/AccessControl";
3
+ import getCanonicalModelInstance from "../CanonicalModelInstance";
3
4
  import Dictionary from "../../Dictionary";
4
5
  import { ReflectionMetadataType } from "../../Reflection";
5
6
  import "reflect-metadata";
@@ -31,10 +32,12 @@ type GetColumnAccessControlForAllColumnsFunction = <T extends BaseModel>(
31
32
  ) => Dictionary<ColumnAccessControl>;
32
33
 
33
34
  /*
34
- * Per-class cache. Safe to key on the constructor because every decorated
35
- * column is initialised to `undefined` in the class body, so Object.keys()
36
- * is identical for every instance of a class (see OwnerOnlyColumn.ts).
37
- * Callers must treat the returned dictionary as read-only.
35
+ * Per-class cache, keyed on the constructor and built from a canonical
36
+ * instance of that class rather than from whichever instance asked first, so
37
+ * a caller that has deleted a column off its own instance cannot define what
38
+ * the class reports for the rest of the process. See
39
+ * CanonicalModelInstance.ts for the bug this prevents. Callers must treat the
40
+ * returned dictionary as read-only.
38
41
  */
39
42
  const accessControlCache: WeakMap<
40
43
  { new (): BaseModel },
@@ -50,12 +53,14 @@ export const getColumnAccessControlForAllColumns: GetColumnAccessControlForAllCo
50
53
  accessControlCache.get(modelClass);
51
54
 
52
55
  if (!cached) {
56
+ const canonical: T | null = getCanonicalModelInstance(target);
57
+ const metadataSource: T = canonical || target;
53
58
  const dictonary: Dictionary<ColumnAccessControl> = {};
54
- const keys: Array<string> = Object.keys(target);
59
+ const keys: Array<string> = Object.keys(metadataSource);
55
60
 
56
61
  for (const key of keys) {
57
62
  const accessControl: ColumnAccessControl | undefined =
58
- Reflect.getMetadata(accessControlSymbol, target, key) as
63
+ Reflect.getMetadata(accessControlSymbol, metadataSource, key) as
59
64
  | ColumnAccessControl
60
65
  | undefined;
61
66
  if (accessControl) {
@@ -64,7 +69,14 @@ export const getColumnAccessControlForAllColumns: GetColumnAccessControlForAllCo
64
69
  }
65
70
 
66
71
  cached = dictonary;
67
- accessControlCache.set(modelClass, cached);
72
+ /*
73
+ * No canonical instance (see CanonicalModelInstance): answer from the
74
+ * instance we were handed, but do NOT cache it for the class - that
75
+ * instance may be a mutilated one, and a cached answer outlives it.
76
+ */
77
+ if (canonical) {
78
+ accessControlCache.set(modelClass, cached);
79
+ }
68
80
  }
69
81
 
70
82
  return cached;
@@ -1,5 +1,6 @@
1
1
  import BaseModel from "../../../Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel";
2
2
  import ColumnBillingAccessControl from "../../BaseDatabase/ColumnBillingAccessControl";
3
+ import getCanonicalModelInstance from "../CanonicalModelInstance";
3
4
  import Dictionary from "../../Dictionary";
4
5
  import { ReflectionMetadataType } from "../../Reflection";
5
6
  import "reflect-metadata";
@@ -31,10 +32,12 @@ type GetColumnBillingAccessControlForAllColumnsFunction = <T extends BaseModel>(
31
32
  ) => Dictionary<ColumnBillingAccessControl>;
32
33
 
33
34
  /*
34
- * Per-class cache. Safe to key on the constructor because every decorated
35
- * column is initialised to `undefined` in the class body, so Object.keys()
36
- * is identical for every instance of a class (see OwnerOnlyColumn.ts).
37
- * Callers must treat the returned dictionary as read-only.
35
+ * Per-class cache, keyed on the constructor and built from a canonical
36
+ * instance of that class rather than from whichever instance asked first, so
37
+ * a caller that has deleted a column off its own instance cannot define what
38
+ * the class reports for the rest of the process. See
39
+ * CanonicalModelInstance.ts for the bug this prevents. Callers must treat the
40
+ * returned dictionary as read-only.
38
41
  */
39
42
  const billingAccessControlCache: WeakMap<
40
43
  { new (): BaseModel },
@@ -50,12 +53,14 @@ export const getColumnBillingAccessControlForAllColumns: GetColumnBillingAccessC
50
53
  billingAccessControlCache.get(modelClass);
51
54
 
52
55
  if (!cached) {
56
+ const canonical: T | null = getCanonicalModelInstance(target);
57
+ const metadataSource: T = canonical || target;
53
58
  const dictonary: Dictionary<ColumnBillingAccessControl> = {};
54
- const keys: Array<string> = Object.keys(target);
59
+ const keys: Array<string> = Object.keys(metadataSource);
55
60
 
56
61
  for (const key of keys) {
57
62
  const accessControl: ColumnBillingAccessControl | undefined =
58
- Reflect.getMetadata(accessControlSymbol, target, key) as
63
+ Reflect.getMetadata(accessControlSymbol, metadataSource, key) as
59
64
  | ColumnBillingAccessControl
60
65
  | undefined;
61
66
  if (accessControl) {
@@ -64,7 +69,14 @@ export const getColumnBillingAccessControlForAllColumns: GetColumnBillingAccessC
64
69
  }
65
70
 
66
71
  cached = dictonary;
67
- billingAccessControlCache.set(modelClass, cached);
72
+ /*
73
+ * No canonical instance (see CanonicalModelInstance): answer from the
74
+ * instance we were handed, but do NOT cache it for the class - that
75
+ * instance may be a mutilated one, and a cached answer outlives it.
76
+ */
77
+ if (canonical) {
78
+ billingAccessControlCache.set(modelClass, cached);
79
+ }
68
80
  }
69
81
 
70
82
  return cached;
@@ -1,4 +1,5 @@
1
1
  import BaseModel from "../../../Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel";
2
+ import getCanonicalModelInstance from "../CanonicalModelInstance";
2
3
  import { ReflectionMetadataType } from "../../Reflection";
3
4
  import "reflect-metadata";
4
5
 
@@ -66,10 +67,14 @@ type GetOwnerOnlyColumnsFunction = <T extends BaseModel>(
66
67
  ) => Array<string>;
67
68
 
68
69
  /**
69
- * Every owner-only column on this model. Enumerating requires the property to
70
- * exist on the instance, which it does for every declared column because model
71
- * columns are initialised to `undefined` in the class body - the same
72
- * assumption getTableColumns() already makes.
70
+ * Every owner-only column on this model. Which columns a MODEL marks is a
71
+ * property of the class, so the enumeration reads a canonical instance of the
72
+ * class rather than the caller's own instance: a caller that had deleted a
73
+ * key off its instance would otherwise get an answer that silently omits a
74
+ * marked column, and this list is what OwnerOnlyColumnPermission enforces
75
+ * against. See CanonicalModelInstance.ts. (Enumerating at all relies on every
76
+ * declared column being initialised to `undefined` in the class body - the
77
+ * same assumption getTableColumns() makes.)
73
78
  */
74
79
  export const getOwnerOnlyColumns: GetOwnerOnlyColumnsFunction = <
75
80
  T extends BaseModel,
@@ -77,9 +82,13 @@ export const getOwnerOnlyColumns: GetOwnerOnlyColumnsFunction = <
77
82
  target: T,
78
83
  ): Array<string> => {
79
84
  const columns: Array<string> = [];
85
+ // Nothing is cached here, so falling back to the caller's instance is safe.
86
+ const metadataSource: T = getCanonicalModelInstance(target) || target;
80
87
 
81
- for (const key of Object.keys(target)) {
82
- if (Reflect.getMetadata(ownerOnlyColumnSymbol, target, key) === true) {
88
+ for (const key of Object.keys(metadataSource)) {
89
+ if (
90
+ Reflect.getMetadata(ownerOnlyColumnSymbol, metadataSource, key) === true
91
+ ) {
83
92
  columns.push(key);
84
93
  }
85
94
  }
@@ -0,0 +1,102 @@
1
+ /*
2
+ * The one instance of a model class that column-metadata enumeration is
3
+ * allowed to look at.
4
+ *
5
+ * WHY THIS EXISTS.
6
+ *
7
+ * Every "which columns does this model have" lookup in this directory answers
8
+ * the question by enumerating an INSTANCE's own keys (Object.keys) and then
9
+ * caching the answer per CLASS. That is only sound while every instance of a
10
+ * class has the same own keys. The class bodies do guarantee that - each
11
+ * decorated column is initialised to `undefined` - right up until some caller
12
+ * deletes a key off a live instance.
13
+ *
14
+ * One caller did. BaseAPI.createItem used to `delete item._id` before handing
15
+ * the model to the service, and DatabaseService.create asks that very instance
16
+ * for its columns (generateDefaultValues). Whenever the mutilated instance was
17
+ * the first to ask, the class's cached column list was built WITHOUT `_id` -
18
+ * permanently, for the life of the process, for every later caller - and since
19
+ * DatabaseBaseModel.toJSONObject serialises a row by iterating exactly that
20
+ * list, every API response for that model silently lost its id. A single
21
+ * create was enough, including a create that was refused, because the columns
22
+ * are read before the permission check. Rows still carried their real `_id` in
23
+ * memory and in the SQL projection; it was dropped on the way out.
24
+ *
25
+ * So enumeration stopped reading the caller's instance. It reads a frozen,
26
+ * private instance of the caller's CLASS instead - constructed here, reachable
27
+ * by nobody, impossible to mutate - so what a class reports about itself can
28
+ * never depend on which instance happened to ask first, or on what anyone did
29
+ * to that instance. Reads already constructed a throwaway instance for exactly
30
+ * this purpose (SelectPermission, QueryPermission, ColumnPermission all do
31
+ * `new modelType()`), which is why a single read of a model was enough to make
32
+ * the same create harmless; this makes that the only behaviour.
33
+ *
34
+ * Every database model is no-arg constructible (Models/DatabaseModels/Index.ts
35
+ * relies on it already, in getModelTypeByName), and a fresh instance carries
36
+ * every declared column - both facts are asserted by
37
+ * Tests/Types/Database/CanonicalModelInstance.test.ts against all 400+ models.
38
+ */
39
+
40
+ type NoArgConstructor = new () => unknown;
41
+
42
+ const canonicalInstanceCache: WeakMap<NoArgConstructor, unknown> =
43
+ new WeakMap();
44
+
45
+ /*
46
+ * Classes whose canonical instance is being constructed right now. A model
47
+ * constructor that asked for its own columns would otherwise recurse forever;
48
+ * such a call gets the caller's instance instead, which is the old behaviour.
49
+ */
50
+ const beingConstructed: WeakSet<NoArgConstructor> = new WeakSet();
51
+
52
+ /**
53
+ * A frozen, shared instance of `target`'s class, safe to enumerate for
54
+ * metadata - or NULL when no such instance can be made: a class that needs
55
+ * constructor arguments, a class still being defined (circular imports), a
56
+ * constructor that throws, or a plain object with no useful constructor.
57
+ *
58
+ * Null, rather than falling back to `target`, because the two are NOT
59
+ * interchangeable and treating them as if they were is how this bug worked in
60
+ * the first place. A caller with no canonical instance may still answer from
61
+ * whatever instance it was handed - a metadata lookup must never be the reason
62
+ * a process fails to boot - but it must not then CACHE that answer for the
63
+ * class, because the instance it read may be a mutilated one and the cached
64
+ * answer would outlive it. Returning null forces each caller to make that
65
+ * decision in the open; the four caches in this directory all take the same
66
+ * route, and say so where they do it.
67
+ */
68
+ export default function getCanonicalModelInstance<T>(target: T): T | null {
69
+ const modelClass: NoArgConstructor | undefined = (
70
+ target as { constructor?: NoArgConstructor } | null | undefined
71
+ )?.constructor;
72
+
73
+ if (typeof modelClass !== "function") {
74
+ return null;
75
+ }
76
+
77
+ const cached: unknown = canonicalInstanceCache.get(modelClass);
78
+
79
+ if (cached) {
80
+ return cached as T;
81
+ }
82
+
83
+ if (beingConstructed.has(modelClass)) {
84
+ return null;
85
+ }
86
+
87
+ let canonical: T;
88
+
89
+ beingConstructed.add(modelClass);
90
+
91
+ try {
92
+ canonical = Object.freeze(new modelClass()) as T;
93
+ } catch {
94
+ return null;
95
+ } finally {
96
+ beingConstructed.delete(modelClass);
97
+ }
98
+
99
+ canonicalInstanceCache.set(modelClass, canonical);
100
+
101
+ return canonical;
102
+ }
@@ -1,4 +1,5 @@
1
1
  import BaseModel from "../../Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel";
2
+ import getCanonicalModelInstance from "./CanonicalModelInstance";
2
3
  import Dictionary from "../Dictionary";
3
4
  import { JSONObject } from "../JSON";
4
5
  import { ReflectionMetadataType } from "../Reflection";
@@ -99,9 +100,12 @@ type GetTableColumnsFunction = <T extends BaseModel>(
99
100
  ) => Dictionary<TableColumnMetadata>;
100
101
 
101
102
  /*
102
- * Per-class cache. Safe to key on the constructor because every decorated
103
- * column is initialised to `undefined` in the class body, so Object.keys()
104
- * is identical for every instance of a class (see OwnerOnlyColumn.ts).
103
+ * Per-class cache, keyed on the constructor and built from a canonical
104
+ * instance of that class - never from the instance that happened to ask
105
+ * first. A caller that had deleted a column off its own instance (BaseAPI's
106
+ * create path used to delete `_id`) would otherwise define the class's column
107
+ * list without that column for the whole process, and every response for that
108
+ * model would lose it. See CanonicalModelInstance.ts.
105
109
  */
106
110
  const tableColumnsCache: WeakMap<
107
111
  { new (): BaseModel },
@@ -118,13 +122,15 @@ export const getTableColumns: GetTableColumnsFunction = <T extends BaseModel>(
118
122
  tableColumnsCache.get(modelClass);
119
123
 
120
124
  if (!cached) {
125
+ const canonical: T | null = getCanonicalModelInstance(target);
126
+ const metadataSource: T = canonical || target;
121
127
  const dictonary: Dictionary<TableColumnMetadata> = {};
122
- const keys: Array<string> = Object.keys(target);
128
+ const keys: Array<string> = Object.keys(metadataSource);
123
129
 
124
130
  for (const key of keys) {
125
131
  const metadata: TableColumnMetadata | undefined = Reflect.getMetadata(
126
132
  tableColumn,
127
- target,
133
+ metadataSource,
128
134
  key,
129
135
  ) as TableColumnMetadata | undefined;
130
136
  if (metadata) {
@@ -133,7 +139,15 @@ export const getTableColumns: GetTableColumnsFunction = <T extends BaseModel>(
133
139
  }
134
140
 
135
141
  cached = dictonary;
136
- tableColumnsCache.set(modelClass, cached);
142
+
143
+ /*
144
+ * No canonical instance (see CanonicalModelInstance): answer from the
145
+ * instance we were handed, but do NOT cache it for the class - that
146
+ * instance may be a mutilated one, and a cached answer outlives it.
147
+ */
148
+ if (canonical) {
149
+ tableColumnsCache.set(modelClass, cached);
150
+ }
137
151
  }
138
152
 
139
153
  /*
@@ -0,0 +1,29 @@
1
+ /*
2
+ * The two periods a self-hosted Enterprise Edition install runs without a
3
+ * current license. They are different periods with different lengths, and
4
+ * the product must never call one by the other's name:
5
+ *
6
+ * trial an Enterprise install that has never had a license, counted from
7
+ * GlobalConfig.enterpriseEditionFirstSeenAt
8
+ * grace a license that expired (a verified license's signed expiry, or an
9
+ * unverified legacy license's stored expiry column), counted from
10
+ * its expiry
11
+ *
12
+ * Until either ends nothing changes; after it, enterprise configuration
13
+ * becomes read-only and SSO, SCIM and audit logging stop
14
+ * (EnterpriseEdition.isFeatureActive) until a license is activated.
15
+ *
16
+ * They live here, with no server dependency, so the copy that states them in
17
+ * the browser (the edition dialog, the enterprise banners) derives the
18
+ * numbers from the same place the license classifier does. Server code reads
19
+ * them through Common/Server/Enterprise/EnterpriseLicenseSnapshot.
20
+ */
21
+
22
+ // How long an expired license keeps working, counted from its expiry.
23
+ export const ENTERPRISE_LICENSE_GRACE_PERIOD_IN_DAYS: number = 30;
24
+
25
+ /*
26
+ * How long an Enterprise install with no license at all is on trial, counted
27
+ * from GlobalConfig.enterpriseEditionFirstSeenAt.
28
+ */
29
+ export const ENTERPRISE_LICENSE_TRIAL_PERIOD_IN_DAYS: number = 14;
package/Types/IP/IPv6.ts CHANGED
@@ -1,7 +1,12 @@
1
1
  import BadDataException from "../Exception/BadDataException";
2
2
  import IP from "./IP";
3
3
 
4
- export default class IPv4 extends IP {
4
+ /*
5
+ * The class used to be declared `class IPv4 extends IP` here — a copy-paste
6
+ * that the default export hid from every import site, while leaving
7
+ * IPv6.name === "IPv4" in error messages, serialized output and API docs.
8
+ */
9
+ export default class IPv6 extends IP {
5
10
  public constructor(ip: string) {
6
11
  super(ip);
7
12
 
@@ -25,7 +25,8 @@ export interface MetricBreachingSample {
25
25
 
26
26
  /**
27
27
  * Descriptor for one variable referenced by a formula, used to label
28
- * table columns and render the Metric Details section. Name is the
28
+ * each breaching sample's component values and render the Metric
29
+ * Details section. Name is the
29
30
  * metric display name (usually the metric name, sometimes the formula
30
31
  * expression for nested formulas) and unit is the variable's native
31
32
  * unit as configured.
@@ -103,8 +104,8 @@ export default interface MetricCriteriaContext {
103
104
  breachingSample?: MetricBreachingSample | undefined;
104
105
  /**
105
106
  * All samples in the evaluation window that breached the threshold,
106
- * in chronological order. Used to render a table of timestamps and
107
- * values on the incident root-cause page.
107
+ * in chronological order. Used to render the Breaching Samples list
108
+ * of timestamps and values on the incident root-cause page.
108
109
  */
109
110
  breachingSamples?: Array<MetricBreachingSample> | undefined;
110
111
  /**
@@ -116,8 +117,8 @@ export default interface MetricCriteriaContext {
116
117
  /**
117
118
  * For formulas: metadata for each variable the formula references,
118
119
  * in the order they appear in the expression. Consumers use this to
119
- * label breakdown columns and to surface underlying units/metric
120
- * names in the Metric Details section.
120
+ * label each breaching sample's component values and to surface
121
+ * underlying units/metric names in the Metric Details section.
121
122
  */
122
123
  components?: Array<MetricComponent> | undefined;
123
124
  }
@@ -13,7 +13,16 @@ export interface KubernetesAffectedResource {
13
13
  containerName?: string | undefined;
14
14
  workloadType?: string | undefined;
15
15
  workloadName?: string | undefined;
16
+ /** Highest sample seen for this resource in the monitoring window. */
16
17
  metricValue: number;
18
+ /**
19
+ * Lowest sample seen for this resource in the monitoring window. A
20
+ * criteria that fires when the metric FALLS (node Ready = 0, etcd has
21
+ * leader = 0) breached on this value, not on `metricValue`: a node that
22
+ * was NotReady for one scrape and Ready for the rest has a highest of 1.
23
+ * Absent on breakdowns built before this field existed.
24
+ */
25
+ lowestMetricValue?: number | undefined;
17
26
  }
18
27
 
19
28
  export interface KubernetesResourceBreakdown {
@@ -497,8 +497,13 @@ export default class MonitorStep extends DatabaseProperty {
497
497
  return this;
498
498
  }
499
499
 
500
+ /*
501
+ * `undefined` clears it. The form needs that: a destination that no longer
502
+ * parses must not leave the previously parsed one sitting in the step,
503
+ * where it would be saved as if the operator had meant it.
504
+ */
500
505
  public setMonitorDestination(
501
- monitorDestination: URL | IP | Hostname,
506
+ monitorDestination: URL | IP | Hostname | undefined,
502
507
  ): MonitorStep {
503
508
  this.data!.monitorDestination = monitorDestination;
504
509
  return this;
@@ -897,7 +897,7 @@ const guestNotBackedUpTemplate: ProxmoxAlertTemplate = {
897
897
  /*
898
898
  * Cluster-level gauge from the backup-info collector — one
899
899
  * series, no `id` label, so no groupBy: one incident per
900
- * cluster. Per-guest naming belongs to the breakdown table
900
+ * cluster. Per-guest naming belongs to the Affected Resources list
901
901
  * (pve_not_backed_up_info grouped by `id`), not the alert.
902
902
  */
903
903
  metricName: "pve_not_backed_up_total",
@@ -2018,6 +2018,18 @@ enum Permission {
2018
2018
  EditServiceLevelObjectiveOwnerTeam = "EditServiceLevelObjectiveOwnerTeam",
2019
2019
  ReadServiceLevelObjectiveOwnerTeam = "ReadServiceLevelObjectiveOwnerTeam",
2020
2020
 
2021
+ // Service Level Objective Owner Rule Permissions
2022
+ CreateServiceLevelObjectiveOwnerRule = "CreateServiceLevelObjectiveOwnerRule",
2023
+ DeleteServiceLevelObjectiveOwnerRule = "DeleteServiceLevelObjectiveOwnerRule",
2024
+ EditServiceLevelObjectiveOwnerRule = "EditServiceLevelObjectiveOwnerRule",
2025
+ ReadServiceLevelObjectiveOwnerRule = "ReadServiceLevelObjectiveOwnerRule",
2026
+
2027
+ // Service Level Objective Label Rule Permissions
2028
+ CreateServiceLevelObjectiveLabelRule = "CreateServiceLevelObjectiveLabelRule",
2029
+ DeleteServiceLevelObjectiveLabelRule = "DeleteServiceLevelObjectiveLabelRule",
2030
+ EditServiceLevelObjectiveLabelRule = "EditServiceLevelObjectiveLabelRule",
2031
+ ReadServiceLevelObjectiveLabelRule = "ReadServiceLevelObjectiveLabelRule",
2032
+
2021
2033
  /*
2022
2034
  * Wildcard permissions covering all models marked @OperationalResource().
2023
2035
  * These short-circuit table-level checks for that resource class. Scope on
@@ -16140,6 +16152,84 @@ export class PermissionHelper {
16140
16152
  group: PermissionGroup.SLO,
16141
16153
  },
16142
16154
 
16155
+ // Service Level Objective Owner Rule Permissions
16156
+ {
16157
+ permission: Permission.CreateServiceLevelObjectiveOwnerRule,
16158
+ title: "Create SLO Owner Rule",
16159
+ description:
16160
+ "Permission to create SLO Owner Rules, which add owner users and teams to matching SLOs, in this project.",
16161
+ isAssignableToTenant: true,
16162
+ isAccessControlPermission: false,
16163
+ isRolePermission: false,
16164
+ group: PermissionGroup.SLO,
16165
+ },
16166
+ {
16167
+ permission: Permission.DeleteServiceLevelObjectiveOwnerRule,
16168
+ title: "Delete SLO Owner Rule",
16169
+ description: "Permission to delete SLO Owner Rules of this project.",
16170
+ isAssignableToTenant: true,
16171
+ isAccessControlPermission: false,
16172
+ isRolePermission: false,
16173
+ group: PermissionGroup.SLO,
16174
+ },
16175
+ {
16176
+ permission: Permission.EditServiceLevelObjectiveOwnerRule,
16177
+ title: "Edit SLO Owner Rule",
16178
+ description: "Permission to edit SLO Owner Rules of this project.",
16179
+ isAssignableToTenant: true,
16180
+ isAccessControlPermission: false,
16181
+ isRolePermission: false,
16182
+ group: PermissionGroup.SLO,
16183
+ },
16184
+ {
16185
+ permission: Permission.ReadServiceLevelObjectiveOwnerRule,
16186
+ title: "Read SLO Owner Rule",
16187
+ description: "Permission to read SLO Owner Rules of this project.",
16188
+ isAssignableToTenant: true,
16189
+ isAccessControlPermission: false,
16190
+ isRolePermission: false,
16191
+ group: PermissionGroup.SLO,
16192
+ },
16193
+
16194
+ // Service Level Objective Label Rule Permissions
16195
+ {
16196
+ permission: Permission.CreateServiceLevelObjectiveLabelRule,
16197
+ title: "Create SLO Label Rule",
16198
+ description:
16199
+ "Permission to create SLO Label Rules, which attach labels to matching SLOs, in this project.",
16200
+ isAssignableToTenant: true,
16201
+ isAccessControlPermission: false,
16202
+ isRolePermission: false,
16203
+ group: PermissionGroup.SLO,
16204
+ },
16205
+ {
16206
+ permission: Permission.DeleteServiceLevelObjectiveLabelRule,
16207
+ title: "Delete SLO Label Rule",
16208
+ description: "Permission to delete SLO Label Rules of this project.",
16209
+ isAssignableToTenant: true,
16210
+ isAccessControlPermission: false,
16211
+ isRolePermission: false,
16212
+ group: PermissionGroup.SLO,
16213
+ },
16214
+ {
16215
+ permission: Permission.EditServiceLevelObjectiveLabelRule,
16216
+ title: "Edit SLO Label Rule",
16217
+ description: "Permission to edit SLO Label Rules of this project.",
16218
+ isAssignableToTenant: true,
16219
+ isAccessControlPermission: false,
16220
+ isRolePermission: false,
16221
+ group: PermissionGroup.SLO,
16222
+ },
16223
+ {
16224
+ permission: Permission.ReadServiceLevelObjectiveLabelRule,
16225
+ title: "Read SLO Label Rule",
16226
+ description: "Permission to read SLO Label Rules of this project.",
16227
+ isAssignableToTenant: true,
16228
+ isAccessControlPermission: false,
16229
+ isRolePermission: false,
16230
+ group: PermissionGroup.SLO,
16231
+ },
16232
+
16143
16233
  // Operational Resource Wildcard Permissions
16144
16234
  {
16145
16235
  permission: Permission.ReadAllOperationalResources,
@@ -379,11 +379,22 @@ export const RULE_CRITERIA_FIELDS_BY_MODEL: Readonly<
379
379
  "serviceNamePattern",
380
380
  "serviceDescriptionPattern",
381
381
  ],
382
+ ServiceLevelObjectiveLabelRule: [
383
+ "serviceLevelObjectiveLabels",
384
+ "serviceLevelObjectiveNamePattern",
385
+ "serviceLevelObjectiveDescriptionPattern",
386
+ ],
382
387
  ServiceLevelObjectiveMonitorRule: [
383
388
  "monitorLabels",
389
+ "monitorType",
384
390
  "monitorNamePattern",
385
391
  "monitorDescriptionPattern",
386
392
  ],
393
+ ServiceLevelObjectiveOwnerRule: [
394
+ "serviceLevelObjectiveLabels",
395
+ "serviceLevelObjectiveNamePattern",
396
+ "serviceLevelObjectiveDescriptionPattern",
397
+ ],
387
398
  ServiceOwnerRule: [
388
399
  "serviceLabels",
389
400
  "serviceNamePattern",
@@ -92,7 +92,9 @@ export enum RuleRunType {
92
92
  ServerlessFunctionLabelRule = "ServerlessFunctionLabelRule",
93
93
  ServerlessFunctionOwnerRule = "ServerlessFunctionOwnerRule",
94
94
  ServiceLabelRule = "ServiceLabelRule",
95
+ ServiceLevelObjectiveLabelRule = "ServiceLevelObjectiveLabelRule",
95
96
  ServiceLevelObjectiveMonitorRule = "ServiceLevelObjectiveMonitorRule",
97
+ ServiceLevelObjectiveOwnerRule = "ServiceLevelObjectiveOwnerRule",
96
98
  ServiceOwnerRule = "ServiceOwnerRule",
97
99
  StatusPageLabelRule = "StatusPageLabelRule",
98
100
  StatusPageOwnerRule = "StatusPageOwnerRule",
@@ -316,11 +318,13 @@ export const RULE_RUN_TYPE_METADATA: Readonly<
316
318
  "serverless functions",
317
319
  ),
318
320
  [RuleRunType.ServiceLabelRule]: metadata(Labels, "service", "services"),
321
+ [RuleRunType.ServiceLevelObjectiveLabelRule]: metadata(Labels, "SLO", "SLOs"),
319
322
  [RuleRunType.ServiceLevelObjectiveMonitorRule]: metadata(
320
323
  RuleRunAction.SyncSloMonitors,
321
324
  "monitor",
322
325
  "monitors",
323
326
  ),
327
+ [RuleRunType.ServiceLevelObjectiveOwnerRule]: metadata(Owners, "SLO", "SLOs"),
324
328
  [RuleRunType.ServiceOwnerRule]: metadata(Owners, "service", "services"),
325
329
  [RuleRunType.StatusPageLabelRule]: metadata(
326
330
  Labels,