@oneuptime/common 13.0.8 → 14.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (333) hide show
  1. package/Models/AnalyticsModels/AuditLog.ts +23 -15
  2. package/Models/DatabaseModels/GlobalConfig.ts +24 -0
  3. package/Models/DatabaseModels/Monitor.ts +3 -2
  4. package/Models/DatabaseModels/MonitorTemplate.ts +2 -1
  5. package/Scripts/generate-service-worker.js +65 -4
  6. package/Server/API/BaseAPI.ts +26 -5
  7. package/Server/API/GlobalConfigAPI.ts +228 -462
  8. package/Server/API/ProjectOIDC.ts +25 -16
  9. package/Server/API/ProjectSSO.ts +24 -16
  10. package/Server/API/StatusPageAPI.ts +100 -42
  11. package/Server/API/TeamMemberAPI.ts +10 -1
  12. package/Server/Enterprise/EnterpriseEdition.ts +649 -0
  13. package/Server/Enterprise/EnterpriseFeature.ts +48 -0
  14. package/Server/Enterprise/EnterpriseLicenseSnapshot.ts +192 -0
  15. package/Server/Enterprise/EnterpriseServerModule.ts +233 -0
  16. package/Server/EnvironmentConfig.ts +147 -2
  17. package/Server/Infrastructure/Postgres/SchemaMigrations/1793900000000-AddEnterpriseEditionFirstSeenAt.ts +25 -0
  18. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
  19. package/Server/Middleware/UserAuthorization.ts +38 -16
  20. package/Server/Services/AuditLogService.ts +84 -1079
  21. package/Server/Services/EnterpriseLicenseService.ts +38 -0
  22. package/Server/Services/GlobalConfigService.ts +80 -1
  23. package/Server/Services/MonitorProbeService.ts +116 -20
  24. package/Server/Services/MonitorService.ts +56 -4
  25. package/Server/Services/MonitorStatusTimelineService.ts +284 -0
  26. package/Server/Services/MonitorTemplateService.ts +26 -0
  27. package/Server/Services/ProjectService.ts +284 -0
  28. package/Server/Services/RumSessionPinService.ts +25 -6
  29. package/Server/Services/StatusPagePrivateUserService.ts +7 -3
  30. package/Server/Services/StatusPageService.ts +78 -1
  31. package/Server/Services/TeamMemberService.ts +11 -0
  32. package/Server/Services/TeamService.ts +10 -0
  33. package/Server/Services/UserService.ts +10 -17
  34. package/Server/Types/Database/Permissions/CreatePermission.ts +15 -0
  35. package/Server/Types/Database/Permissions/EditionPermission.ts +208 -18
  36. package/Server/Types/Database/Permissions/TablePermission.ts +10 -3
  37. package/Server/Types/Database/Permissions/UpdatePermission.ts +29 -0
  38. package/Server/Types/Markdown.ts +41 -0
  39. package/Server/Utils/CommunityEditionSsoReport.ts +361 -0
  40. package/Server/Utils/EditionEnforcement.ts +233 -0
  41. package/Server/Utils/FrontendEnvironment.ts +41 -2
  42. package/Server/Utils/InstanceHealth/RedisHealth.ts +12 -277
  43. package/Server/Utils/Monitor/AffectedResourceList.ts +190 -0
  44. package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +10 -1
  45. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +543 -333
  46. package/Server/Utils/Monitor/MonitoringIntervalValidator.ts +116 -0
  47. package/Server/Utils/Workspace/Slack/Slack.ts +423 -10
  48. package/Tests/App/Accounts/LoginPasskey.test.tsx +18 -0
  49. package/Tests/App/Accounts/LoginSsoEdition.test.tsx +616 -0
  50. package/Tests/App/AdminDashboard/AdminAuthenticationSsoEdition.test.tsx +217 -0
  51. package/Tests/App/AdminDashboard/AdminEnterprisePluginPage.test.tsx +357 -0
  52. package/Tests/App/AdminDashboard/EnterpriseLicensesShell.test.tsx +214 -0
  53. package/Tests/App/AdminDashboard/GlobalSSOEnterpriseShells.test.tsx +271 -0
  54. package/Tests/App/AdminDashboard/HealthShells.test.tsx +659 -0
  55. package/Tests/App/Dashboard/AuditLogsAndComplianceShells.test.tsx +572 -0
  56. package/Tests/App/Dashboard/EnterpriseFeatureUpgrade.test.tsx +547 -0
  57. package/Tests/App/Dashboard/EnterprisePluginPage.test.tsx +667 -0
  58. package/Tests/App/Dashboard/IdentityEnterpriseShells.test.tsx +319 -0
  59. package/Tests/App/Dashboard/OnboardingSsoEmptyState.test.tsx +185 -0
  60. package/Tests/App/Dashboard/SecurityEventConnectionDiagnostics.test.tsx +45 -9
  61. package/Tests/App/Dashboard/SecurityEventDetailPanel.test.tsx +399 -0
  62. package/Tests/App/Dashboard/SecurityEventListRow.test.tsx +214 -0
  63. package/Tests/App/Dashboard/SecurityEventsEmptyState.test.tsx +1 -83
  64. package/Tests/App/Dashboard/SecurityEventsNavTabs.test.tsx +248 -0
  65. package/Tests/App/Dashboard/SecurityEventsViewer.test.tsx +1203 -0
  66. package/Tests/App/Dashboard/UserEmailCallSites.test.tsx +11 -91
  67. package/Tests/App/StatusPage/StatusPageSsoEmptyState.test.tsx +319 -0
  68. package/Tests/Helpers/RefreshAwareApiScan.ts +757 -0
  69. package/Tests/Helpers/TenantScopedRequestScan.ts +515 -0
  70. package/Tests/Scripts/GenerateServiceWorker.test.ts +931 -0
  71. package/Tests/Server/API/BaseAPICreateItemDoesNotMutateModel.test.ts +130 -0
  72. package/Tests/Server/API/GlobalConfigLicense.test.ts +742 -497
  73. package/Tests/Server/API/OnCallReadinessAPI.test.ts +35 -909
  74. package/Tests/Server/API/SsoProviderListingsEdition.test.ts +432 -0
  75. package/Tests/Server/API/TeamMemberLeaveScimLockEdition.test.ts +252 -0
  76. package/Tests/Server/Enterprise/EnterpriseEdition.test.ts +824 -0
  77. package/Tests/Server/Enterprise/EnterpriseFeatureActive.test.ts +643 -0
  78. package/Tests/Server/Enterprise/EnterpriseLicenseSnapshot.test.ts +294 -0
  79. package/Tests/Server/Enterprise/EnterpriseModelFeatureMap.test.ts +93 -0
  80. package/Tests/Server/Enterprise/EnterpriseOnlyModulesLiveInEe.test.ts +582 -0
  81. package/Tests/Server/Enterprise/EnterpriseServerModule.test.ts +247 -0
  82. package/Tests/Server/Enterprise/FakeEnterpriseModule.ts +502 -0
  83. package/Tests/Server/Enterprise/TestBillingFlag.ts +70 -0
  84. package/Tests/Server/EnvironmentConfigEnterpriseEdition.test.ts +314 -0
  85. package/Tests/Server/Infrastructure/ContainerBootConfiguration.test.ts +289 -0
  86. package/Tests/Server/Infrastructure/E2EClickHouseFixtureAccess.test.ts +5 -1
  87. package/Tests/Server/Middleware/UserAuthorization.test.ts +37 -2
  88. package/Tests/Server/Middleware/UserAuthorizationEditionEnforcement.test.ts +516 -0
  89. package/Tests/Server/Services/AuditLogService.test.ts +460 -990
  90. package/Tests/Server/Services/CreateAndReadResponsesKeepIds.test.ts +263 -0
  91. package/Tests/Server/Services/EnterpriseLicenseServiceKeyGeneration.test.ts +151 -0
  92. package/Tests/Server/Services/GlobalConfigServiceLicenseColumns.test.ts +357 -0
  93. package/Tests/Server/Services/MonitorDestinationInfoIPv6.test.ts +101 -0
  94. package/Tests/Server/Services/MonitorProbeServiceIntervalScheduling.test.ts +333 -0
  95. package/Tests/Server/Services/MonitorStatusTimelineDailyAggregates.test.ts +303 -0
  96. package/Tests/Server/Services/ProjectServiceAuditLogLicense.test.ts +701 -0
  97. package/Tests/Server/Services/ProjectServiceAuditLogSettingsCache.test.ts +31 -35
  98. package/Tests/Server/Services/ScimPushGroupsTeamLocksEdition.test.ts +431 -0
  99. package/Tests/Server/Services/SsoRequirementReadMasking.test.ts +419 -0
  100. package/Tests/Server/Services/SsoRequirementWriteGuard.test.ts +769 -0
  101. package/Tests/Server/Services/StatusPagePrivateUserInvitationPolicy.test.ts +94 -0
  102. package/Tests/Server/Services/UserAuthenticationService.test.ts +35 -0
  103. package/Tests/Server/Services/UserServiceSeatLimit.test.ts +94 -56
  104. package/Tests/Server/Types/Database/Permissions/EditionPermission.test.ts +1823 -0
  105. package/Tests/Server/Types/Markdown.test.ts +181 -0
  106. package/Tests/Server/Utils/CommunityEditionSsoReport.test.ts +565 -0
  107. package/Tests/Server/Utils/EditionEnforcement.test.ts +303 -0
  108. package/Tests/Server/Utils/FrontendEnvironment.test.ts +367 -0
  109. package/Tests/Server/Utils/InstanceHealth/RedisHealth.test.ts +38 -418
  110. package/Tests/Server/Utils/Monitor/AffectedResourceList.test.ts +518 -0
  111. package/Tests/Server/Utils/Monitor/Criteria/EvaluateOverTime.test.ts +24 -4
  112. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +934 -96
  113. package/Tests/Server/Utils/Monitor/MonitoringIntervalValidator.test.ts +188 -0
  114. package/Tests/Server/Utils/Workspace/Slack/SlackMarkdownSectionSplit.test.ts +1209 -0
  115. package/Tests/Types/API/HostnameFromAuthority.test.ts +20 -10
  116. package/Tests/Types/API/HostnameIPv6.test.ts +149 -0
  117. package/Tests/Types/Database/CanonicalModelInstance.test.ts +190 -0
  118. package/Tests/UI/Components/EditionLabelLapseCopy.ts +104 -0
  119. package/Tests/UI/Components/EditionLabelLicenseManagerWiring.test.tsx +254 -0
  120. package/Tests/UI/Components/EditionLabelLicenseRefresh.test.tsx +84 -178
  121. package/Tests/UI/Components/EditionLabelLicenseStatus.test.tsx +1586 -0
  122. package/Tests/UI/Components/EditionLabelLicenseWritesGuard.test.tsx +157 -0
  123. package/Tests/UI/Components/Graphs/DayUptimeGraph.test.tsx +49 -2
  124. package/Tests/UI/Components/MarkdownConverters.test.ts +684 -0
  125. package/Tests/UI/Components/ModelListEmptyState.test.tsx +289 -0
  126. package/Tests/UI/Components/TelemetryViewer/TelemetryViewerEmptyContent.test.tsx +131 -0
  127. package/Tests/UI/EsbuildEnterpriseAlias.test.ts +1127 -0
  128. package/Tests/Utils/HostAddressUtil.test.ts +138 -0
  129. package/Tests/Utils/Monitor/MonitorDestinationUtil.test.ts +313 -0
  130. package/Tests/Utils/Monitor/MonitoringIntervalUtil.test.ts +304 -0
  131. package/Tests/Utils/StatusPage/UptimeDailyAggregateUtil.test.ts +248 -0
  132. package/Types/API/Hostname.ts +63 -16
  133. package/Types/Database/AccessControl/ColumnAccessControl.ts +19 -7
  134. package/Types/Database/AccessControl/ColumnBillingAccessControl.ts +19 -7
  135. package/Types/Database/AccessControl/OwnerOnlyColumn.ts +15 -6
  136. package/Types/Database/CanonicalModelInstance.ts +102 -0
  137. package/Types/Database/TableColumn.ts +20 -6
  138. package/Types/EnterpriseLicense/EnterpriseLicensePeriods.ts +29 -0
  139. package/Types/IP/IPv6.ts +6 -1
  140. package/Types/Monitor/MonitorStep.ts +6 -1
  141. package/Types/Monitor/ProxmoxAlertTemplates.ts +1 -1
  142. package/Types/StatusPage/UptimeDailyAggregate.ts +110 -0
  143. package/UI/Components/EditionLabel/EditionLabel.tsx +796 -1195
  144. package/UI/Components/EditionLabel/LicenseManager.ts +119 -0
  145. package/UI/Components/Graphs/DayUptimeGraph.tsx +123 -15
  146. package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
  147. package/UI/Components/ModelList/ModelList.tsx +11 -1
  148. package/UI/Components/MonitorGraphs/Uptime.tsx +69 -0
  149. package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +28 -12
  150. package/UI/esbuild-enterprise.js +263 -0
  151. package/Utils/EnterpriseLicense/EnterpriseLicenseUsage.ts +7 -2
  152. package/Utils/HostAddressUtil.ts +94 -0
  153. package/Utils/Monitor/MonitorDestinationUtil.ts +157 -0
  154. package/Utils/Monitor/MonitoringIntervalUtil.ts +436 -0
  155. package/Utils/StatusPage/UptimeDailyAggregateUtil.ts +192 -0
  156. package/build/dist/Models/AnalyticsModels/AuditLog.js +23 -15
  157. package/build/dist/Models/AnalyticsModels/AuditLog.js.map +1 -1
  158. package/build/dist/Models/DatabaseModels/GlobalConfig.js +25 -0
  159. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  160. package/build/dist/Models/DatabaseModels/Monitor.js +2 -2
  161. package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
  162. package/build/dist/Models/DatabaseModels/MonitorTemplate.js +2 -1
  163. package/build/dist/Models/DatabaseModels/MonitorTemplate.js.map +1 -1
  164. package/build/dist/Server/API/BaseAPI.js +26 -5
  165. package/build/dist/Server/API/BaseAPI.js.map +1 -1
  166. package/build/dist/Server/API/GlobalConfigAPI.js +148 -344
  167. package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
  168. package/build/dist/Server/API/ProjectOIDC.js +24 -16
  169. package/build/dist/Server/API/ProjectOIDC.js.map +1 -1
  170. package/build/dist/Server/API/ProjectSSO.js +24 -16
  171. package/build/dist/Server/API/ProjectSSO.js.map +1 -1
  172. package/build/dist/Server/API/StatusPageAPI.js +93 -43
  173. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  174. package/build/dist/Server/API/TeamMemberAPI.js +8 -1
  175. package/build/dist/Server/API/TeamMemberAPI.js.map +1 -1
  176. package/build/dist/Server/Enterprise/EnterpriseEdition.js +466 -0
  177. package/build/dist/Server/Enterprise/EnterpriseEdition.js.map +1 -0
  178. package/build/dist/Server/Enterprise/EnterpriseFeature.js +39 -0
  179. package/build/dist/Server/Enterprise/EnterpriseFeature.js.map +1 -0
  180. package/build/dist/Server/Enterprise/EnterpriseLicenseSnapshot.js +70 -0
  181. package/build/dist/Server/Enterprise/EnterpriseLicenseSnapshot.js.map +1 -0
  182. package/build/dist/Server/Enterprise/EnterpriseServerModule.js +84 -0
  183. package/build/dist/Server/Enterprise/EnterpriseServerModule.js.map +1 -0
  184. package/build/dist/Server/EnvironmentConfig.js +84 -2
  185. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  186. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793900000000-AddEnterpriseEditionFirstSeenAt.js +18 -0
  187. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793900000000-AddEnterpriseEditionFirstSeenAt.js.map +1 -0
  188. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -0
  189. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  190. package/build/dist/Server/Middleware/UserAuthorization.js +30 -11
  191. package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
  192. package/build/dist/Server/Services/AuditLogService.js +71 -740
  193. package/build/dist/Server/Services/AuditLogService.js.map +1 -1
  194. package/build/dist/Server/Services/EnterpriseLicenseService.js +34 -0
  195. package/build/dist/Server/Services/EnterpriseLicenseService.js.map +1 -1
  196. package/build/dist/Server/Services/GlobalConfigService.js +63 -0
  197. package/build/dist/Server/Services/GlobalConfigService.js.map +1 -1
  198. package/build/dist/Server/Services/MonitorProbeService.js +90 -17
  199. package/build/dist/Server/Services/MonitorProbeService.js.map +1 -1
  200. package/build/dist/Server/Services/MonitorService.js +45 -4
  201. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  202. package/build/dist/Server/Services/MonitorStatusTimelineService.js +242 -0
  203. package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
  204. package/build/dist/Server/Services/MonitorTemplateService.js +16 -0
  205. package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
  206. package/build/dist/Server/Services/ProjectService.js +214 -0
  207. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  208. package/build/dist/Server/Services/RumSessionPinService.js +24 -6
  209. package/build/dist/Server/Services/RumSessionPinService.js.map +1 -1
  210. package/build/dist/Server/Services/StatusPagePrivateUserService.js +7 -3
  211. package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
  212. package/build/dist/Server/Services/StatusPageService.js +71 -0
  213. package/build/dist/Server/Services/StatusPageService.js.map +1 -1
  214. package/build/dist/Server/Services/TeamMemberService.js +10 -0
  215. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  216. package/build/dist/Server/Services/TeamService.js +9 -0
  217. package/build/dist/Server/Services/TeamService.js.map +1 -1
  218. package/build/dist/Server/Services/UserService.js +10 -16
  219. package/build/dist/Server/Services/UserService.js.map +1 -1
  220. package/build/dist/Server/Types/Database/Permissions/CreatePermission.js +10 -0
  221. package/build/dist/Server/Types/Database/Permissions/CreatePermission.js.map +1 -1
  222. package/build/dist/Server/Types/Database/Permissions/EditionPermission.js +154 -14
  223. package/build/dist/Server/Types/Database/Permissions/EditionPermission.js.map +1 -1
  224. package/build/dist/Server/Types/Database/Permissions/TablePermission.js +10 -3
  225. package/build/dist/Server/Types/Database/Permissions/TablePermission.js.map +1 -1
  226. package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js +17 -0
  227. package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js.map +1 -1
  228. package/build/dist/Server/Types/Markdown.js +31 -0
  229. package/build/dist/Server/Types/Markdown.js.map +1 -1
  230. package/build/dist/Server/Utils/CommunityEditionSsoReport.js +223 -0
  231. package/build/dist/Server/Utils/CommunityEditionSsoReport.js.map +1 -0
  232. package/build/dist/Server/Utils/EditionEnforcement.js +187 -0
  233. package/build/dist/Server/Utils/EditionEnforcement.js.map +1 -0
  234. package/build/dist/Server/Utils/FrontendEnvironment.js +31 -2
  235. package/build/dist/Server/Utils/FrontendEnvironment.js.map +1 -1
  236. package/build/dist/Server/Utils/InstanceHealth/RedisHealth.js +6 -193
  237. package/build/dist/Server/Utils/InstanceHealth/RedisHealth.js.map +1 -1
  238. package/build/dist/Server/Utils/Monitor/AffectedResourceList.js +96 -0
  239. package/build/dist/Server/Utils/Monitor/AffectedResourceList.js.map +1 -0
  240. package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +8 -1
  241. package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
  242. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +449 -261
  243. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  244. package/build/dist/Server/Utils/Monitor/MonitoringIntervalValidator.js +88 -0
  245. package/build/dist/Server/Utils/Monitor/MonitoringIntervalValidator.js.map +1 -0
  246. package/build/dist/Server/Utils/Workspace/Slack/Slack.js +331 -11
  247. package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
  248. package/build/dist/Types/API/Hostname.js +59 -11
  249. package/build/dist/Types/API/Hostname.js.map +1 -1
  250. package/build/dist/Types/Database/AccessControl/ColumnAccessControl.js +19 -7
  251. package/build/dist/Types/Database/AccessControl/ColumnAccessControl.js.map +1 -1
  252. package/build/dist/Types/Database/AccessControl/ColumnBillingAccessControl.js +19 -7
  253. package/build/dist/Types/Database/AccessControl/ColumnBillingAccessControl.js.map +1 -1
  254. package/build/dist/Types/Database/AccessControl/OwnerOnlyColumn.js +13 -6
  255. package/build/dist/Types/Database/AccessControl/OwnerOnlyColumn.js.map +1 -1
  256. package/build/dist/Types/Database/CanonicalModelInstance.js +88 -0
  257. package/build/dist/Types/Database/CanonicalModelInstance.js.map +1 -0
  258. package/build/dist/Types/Database/TableColumn.js +19 -6
  259. package/build/dist/Types/Database/TableColumn.js.map +1 -1
  260. package/build/dist/Types/EnterpriseLicense/EnterpriseLicensePeriods.js +28 -0
  261. package/build/dist/Types/EnterpriseLicense/EnterpriseLicensePeriods.js.map +1 -0
  262. package/build/dist/Types/IP/IPv6.js +6 -1
  263. package/build/dist/Types/IP/IPv6.js.map +1 -1
  264. package/build/dist/Types/Monitor/MonitorStep.js +5 -0
  265. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  266. package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js +1 -1
  267. package/build/dist/Types/StatusPage/UptimeDailyAggregate.js +32 -0
  268. package/build/dist/Types/StatusPage/UptimeDailyAggregate.js.map +1 -0
  269. package/build/dist/UI/Components/EditionLabel/EditionLabel.js +414 -585
  270. package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
  271. package/build/dist/UI/Components/EditionLabel/LicenseManager.js +2 -0
  272. package/build/dist/UI/Components/EditionLabel/LicenseManager.js.map +1 -0
  273. package/build/dist/UI/Components/Graphs/DayUptimeGraph.js +90 -17
  274. package/build/dist/UI/Components/Graphs/DayUptimeGraph.js.map +1 -1
  275. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
  276. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
  277. package/build/dist/UI/Components/ModelList/ModelList.js +4 -1
  278. package/build/dist/UI/Components/ModelList/ModelList.js.map +1 -1
  279. package/build/dist/UI/Components/MonitorGraphs/Uptime.js +42 -1
  280. package/build/dist/UI/Components/MonitorGraphs/Uptime.js.map +1 -1
  281. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +2 -2
  282. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
  283. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js +6 -2
  284. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js.map +1 -1
  285. package/build/dist/Utils/HostAddressUtil.js +80 -0
  286. package/build/dist/Utils/HostAddressUtil.js.map +1 -0
  287. package/build/dist/Utils/Monitor/MonitorDestinationUtil.js +127 -0
  288. package/build/dist/Utils/Monitor/MonitorDestinationUtil.js.map +1 -0
  289. package/build/dist/Utils/Monitor/MonitoringIntervalUtil.js +374 -0
  290. package/build/dist/Utils/Monitor/MonitoringIntervalUtil.js.map +1 -0
  291. package/build/dist/Utils/StatusPage/UptimeDailyAggregateUtil.js +148 -0
  292. package/build/dist/Utils/StatusPage/UptimeDailyAggregateUtil.js.map +1 -0
  293. package/jest.config.json +3 -1
  294. package/package.json +1 -1
  295. package/test-setup.sh +103 -34
  296. package/tsconfig.json +13 -0
  297. package/Server/API/EnterpriseLicenseAPI.ts +0 -925
  298. package/Server/API/TeamComplianceAPI.ts +0 -158
  299. package/Server/Middleware/SCIMAuthorization.ts +0 -141
  300. package/Server/Services/TeamComplianceService.ts +0 -733
  301. package/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.ts +0 -186
  302. package/Server/Utils/InstanceHealth/PostgresHealth.ts +0 -286
  303. package/Tests/App/AdminDashboard/EnterpriseLicenseInstanceActivity.test.tsx +0 -451
  304. package/Tests/App/Dashboard/AuditLogsTable.test.tsx +0 -598
  305. package/Tests/App/Dashboard/SecurityEventsExplorer.test.tsx +0 -761
  306. package/Tests/App/Dashboard/SecurityEventsSideMenu.test.tsx +0 -247
  307. package/Tests/App/Dashboard/SecurityEventsTableColumns.test.tsx +0 -382
  308. package/Tests/App/Dashboard/SecurityEventsVolumeChart.test.tsx +0 -321
  309. package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +0 -1851
  310. package/Tests/Server/Middleware/SCIMAuthorization.test.ts +0 -525
  311. package/Tests/Server/Services/TeamComplianceServiceBehaviour.test.ts +0 -1845
  312. package/Tests/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.test.ts +0 -495
  313. package/Tests/Server/Utils/InstanceHealth/PostgresHealth.test.ts +0 -337
  314. package/Tests/Utils/EnterpriseLicenseSeats.test.ts +0 -576
  315. package/Tests/Utils/EnterpriseLicenseSync.test.ts +0 -568
  316. package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +0 -287
  317. package/Utils/EnterpriseLicense/EnterpriseLicenseSync.ts +0 -244
  318. package/build/dist/Server/API/EnterpriseLicenseAPI.js +0 -646
  319. package/build/dist/Server/API/EnterpriseLicenseAPI.js.map +0 -1
  320. package/build/dist/Server/API/TeamComplianceAPI.js +0 -111
  321. package/build/dist/Server/API/TeamComplianceAPI.js.map +0 -1
  322. package/build/dist/Server/Middleware/SCIMAuthorization.js +0 -124
  323. package/build/dist/Server/Middleware/SCIMAuthorization.js.map +0 -1
  324. package/build/dist/Server/Services/TeamComplianceService.js +0 -537
  325. package/build/dist/Server/Services/TeamComplianceService.js.map +0 -1
  326. package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js +0 -145
  327. package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js.map +0 -1
  328. package/build/dist/Server/Utils/InstanceHealth/PostgresHealth.js +0 -194
  329. package/build/dist/Server/Utils/InstanceHealth/PostgresHealth.js.map +0 -1
  330. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +0 -168
  331. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +0 -1
  332. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSync.js +0 -174
  333. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSync.js.map +0 -1
@@ -0,0 +1,214 @@
1
+ import "@testing-library/jest-dom";
2
+ import {
3
+ afterEach,
4
+ beforeEach,
5
+ describe,
6
+ expect,
7
+ jest,
8
+ test,
9
+ } from "@jest/globals";
10
+ import { cleanup, render, screen } from "@testing-library/react";
11
+ import React, { FunctionComponent, ReactElement, ReactNode } from "react";
12
+
13
+ /*
14
+ * Settings > Enterprise Licenses and one license: the core shells left at the
15
+ * old page paths after the license server's screens moved to
16
+ * ee/AdminDashboard/EnterpriseLicenses.
17
+ *
18
+ * The screens belong to the OneUptime Cloud license server, so the shells
19
+ * render the Enterprise plugin only when billing is enabled, and otherwise
20
+ * keep the "Only available on OneUptime Cloud" state the page has always shown
21
+ * on self-hosted installs. A Cloud deployment whose Admin Dashboard was built
22
+ * without the Enterprise plugin says so instead.
23
+ *
24
+ * Billing is pinned in every test (CI's config.env sets BILLING_ENABLED=true).
25
+ * The plugins are the Community stub unless a test hands in a fake - this is
26
+ * core, and must pass with ee/ deleted.
27
+ */
28
+
29
+ let billingEnabledForTest: boolean = false;
30
+
31
+ jest.mock("../../../UI/Config", () => {
32
+ const actual: Record<string, unknown> = jest.requireActual(
33
+ "../../../UI/Config",
34
+ ) as Record<string, unknown>;
35
+
36
+ const mocked: Record<string, unknown> = { ...actual };
37
+
38
+ Object.defineProperty(mocked, "BILLING_ENABLED", {
39
+ get: (): boolean => {
40
+ return billingEnabledForTest;
41
+ },
42
+ });
43
+
44
+ return mocked;
45
+ });
46
+
47
+ jest.mock("react-i18next", () => {
48
+ return {
49
+ useTranslation: () => {
50
+ return {
51
+ t: (key: string): string => {
52
+ return key;
53
+ },
54
+ };
55
+ },
56
+ };
57
+ });
58
+
59
+ // The page frame is not what this suite is about; keep its title and children.
60
+ jest.mock("../../../UI/Components/Page/Page", () => {
61
+ return {
62
+ __esModule: true,
63
+ default: (props: { title?: string; children: ReactNode }): ReactElement => {
64
+ return (
65
+ <div data-testid="page" data-title={props.title}>
66
+ {props.children}
67
+ </div>
68
+ );
69
+ },
70
+ };
71
+ });
72
+
73
+ /*
74
+ * The plugin door, pointed at whatever the test sets. Starts as the real
75
+ * Community stub (what "@oneuptime/ee-admin-dashboard" is in core).
76
+ */
77
+ let mockPluginsForTest: Record<string, unknown> = {};
78
+
79
+ jest.mock(
80
+ "../../../../App/FeatureSet/AdminDashboard/src/Enterprise/Plugins",
81
+ () => {
82
+ return {
83
+ getAdminDashboardPlugins: (): Record<string, unknown> => {
84
+ return mockPluginsForTest;
85
+ },
86
+ };
87
+ },
88
+ );
89
+
90
+ import CommunityPlugins from "../../../../App/FeatureSet/AdminDashboard/src/Enterprise/CommunityPlugins";
91
+ import EnterpriseLicenses from "../../../../App/FeatureSet/AdminDashboard/src/Pages/EnterpriseLicenses/Index";
92
+ import EnterpriseLicenseView from "../../../../App/FeatureSet/AdminDashboard/src/Pages/EnterpriseLicenses/View/Index";
93
+
94
+ const FakeLicensesList: FunctionComponent = (): ReactElement => {
95
+ return <div data-testid="ee-licenses-list" />;
96
+ };
97
+
98
+ const FakeLicenseView: FunctionComponent = (): ReactElement => {
99
+ return <div data-testid="ee-license-view" />;
100
+ };
101
+
102
+ const CLOUD_ONLY_TITLE: string = "Only available on OneUptime Cloud";
103
+ const ENTERPRISE_BUILD_TITLE: string =
104
+ "Requires the OneUptime Enterprise Edition";
105
+
106
+ interface ShellCase {
107
+ name: string;
108
+ Shell: FunctionComponent;
109
+ pluginKey: "EnterpriseLicensesList" | "EnterpriseLicenseView";
110
+ Fake: FunctionComponent;
111
+ testId: string;
112
+ }
113
+
114
+ const SHELLS: Array<ShellCase> = [
115
+ {
116
+ name: "the license list",
117
+ Shell: EnterpriseLicenses,
118
+ pluginKey: "EnterpriseLicensesList",
119
+ Fake: FakeLicensesList,
120
+ testId: "ee-licenses-list",
121
+ },
122
+ {
123
+ name: "one license",
124
+ Shell: EnterpriseLicenseView,
125
+ pluginKey: "EnterpriseLicenseView",
126
+ Fake: FakeLicenseView,
127
+ testId: "ee-license-view",
128
+ },
129
+ ];
130
+
131
+ beforeEach(() => {
132
+ billingEnabledForTest = false;
133
+ mockPluginsForTest = CommunityPlugins as unknown as Record<string, unknown>;
134
+ });
135
+
136
+ afterEach(() => {
137
+ cleanup();
138
+ });
139
+
140
+ describe.each(SHELLS)(
141
+ "Enterprise Licenses shell: $name",
142
+ (shell: ShellCase) => {
143
+ test("the Community build has no license screens at all", () => {
144
+ expect(CommunityPlugins).toEqual({});
145
+ });
146
+
147
+ test("self-hosted Community Edition: the Cloud-only empty state", () => {
148
+ const { Shell } = shell;
149
+
150
+ render(<Shell />);
151
+
152
+ expect(screen.getByText(CLOUD_ONLY_TITLE)).toBeInTheDocument();
153
+ expect(
154
+ screen.getByText(
155
+ "Enterprise licenses are issued and tracked on the hosted oneuptime.com, where billing is enabled. This self-hosted instance does not manage licenses.",
156
+ ),
157
+ ).toBeInTheDocument();
158
+ expect(screen.getByTestId("page")).toHaveAttribute(
159
+ "data-title",
160
+ "pages.enterpriseLicenses.title",
161
+ );
162
+ });
163
+
164
+ test("self-hosted Enterprise Edition: still the Cloud-only empty state - the plugin is never rendered", () => {
165
+ const { Shell, Fake } = shell;
166
+
167
+ mockPluginsForTest = { [shell.pluginKey]: Fake };
168
+
169
+ render(<Shell />);
170
+
171
+ expect(screen.getByText(CLOUD_ONLY_TITLE)).toBeInTheDocument();
172
+ expect(screen.queryByTestId(shell.testId)).not.toBeInTheDocument();
173
+ });
174
+
175
+ test("OneUptime Cloud with the Enterprise plugin: the Enterprise screen", () => {
176
+ const { Shell, Fake } = shell;
177
+
178
+ billingEnabledForTest = true;
179
+ mockPluginsForTest = { [shell.pluginKey]: Fake };
180
+
181
+ render(<Shell />);
182
+
183
+ expect(screen.getByTestId(shell.testId)).toBeInTheDocument();
184
+ expect(screen.queryByText(CLOUD_ONLY_TITLE)).not.toBeInTheDocument();
185
+ });
186
+
187
+ test("OneUptime Cloud built without the plugin: says the Enterprise Edition is required", () => {
188
+ const { Shell } = shell;
189
+
190
+ billingEnabledForTest = true;
191
+
192
+ render(<Shell />);
193
+
194
+ expect(screen.getByText(ENTERPRISE_BUILD_TITLE)).toBeInTheDocument();
195
+ expect(screen.queryByText(CLOUD_ONLY_TITLE)).not.toBeInTheDocument();
196
+ });
197
+
198
+ test("reads only its own plugin key", () => {
199
+ const { Shell, Fake } = shell;
200
+ const otherKey: string =
201
+ shell.pluginKey === "EnterpriseLicensesList"
202
+ ? "EnterpriseLicenseView"
203
+ : "EnterpriseLicensesList";
204
+
205
+ billingEnabledForTest = true;
206
+ mockPluginsForTest = { [otherKey]: Fake };
207
+
208
+ render(<Shell />);
209
+
210
+ expect(screen.queryByTestId(shell.testId)).not.toBeInTheDocument();
211
+ expect(screen.getByText(ENTERPRISE_BUILD_TITLE)).toBeInTheDocument();
212
+ });
213
+ },
214
+ );
@@ -0,0 +1,271 @@
1
+ import "@testing-library/jest-dom";
2
+ import {
3
+ afterEach,
4
+ beforeEach,
5
+ describe,
6
+ expect,
7
+ jest,
8
+ test,
9
+ } from "@jest/globals";
10
+ import { cleanup, render, screen } from "@testing-library/react";
11
+ import React, { FunctionComponent, ReactElement, ReactNode } from "react";
12
+
13
+ /*
14
+ * Settings > Global SSO and Global OIDC (the provider lists and one
15
+ * provider's page) are Enterprise Edition screens
16
+ * (ee/AdminDashboard/GlobalSSO). Core keeps a shell at each page's original
17
+ * path, so App.tsx and its routes never changed: the shell renders the
18
+ * Enterprise screen on the Enterprise Edition when the bundle includes it,
19
+ * and otherwise the upsell card the page used to show, inside the settings
20
+ * layout.
21
+ *
22
+ * "@oneuptime/ee-admin-dashboard" is replaced by a plugin object the tests
23
+ * fill in, standing in for the Enterprise bundle; left empty it is the
24
+ * Community bundle. Billing and the edition are pinned in every test: CI's
25
+ * config.env sets BILLING_ENABLED=true, and the admin rule must not depend
26
+ * on it. The page chrome (Page, the settings side menu) is replaced by a
27
+ * plain wrapper that shows the side menu and breadcrumbs.
28
+ */
29
+
30
+ let billingEnabledForTest: boolean = false;
31
+ let enterpriseEditionForTest: boolean = false;
32
+
33
+ jest.mock("../../../UI/Config", () => {
34
+ const actual: Record<string, unknown> = jest.requireActual(
35
+ "../../../UI/Config",
36
+ ) as Record<string, unknown>;
37
+
38
+ const mocked: Record<string, unknown> = { ...actual };
39
+
40
+ Object.defineProperty(mocked, "BILLING_ENABLED", {
41
+ get: (): boolean => {
42
+ return billingEnabledForTest;
43
+ },
44
+ });
45
+
46
+ Object.defineProperty(mocked, "IS_ENTERPRISE_EDITION", {
47
+ get: (): boolean => {
48
+ return enterpriseEditionForTest;
49
+ },
50
+ });
51
+
52
+ return mocked;
53
+ });
54
+
55
+ jest.mock("../../../UI/Components/Page/Page", () => {
56
+ return {
57
+ __esModule: true,
58
+ default: (props: {
59
+ title?: string;
60
+ breadcrumbLinks?: Array<{ title: string }>;
61
+ sideMenu?: ReactNode;
62
+ children?: ReactNode;
63
+ }): ReactElement => {
64
+ return (
65
+ <div data-testid="settings-page">
66
+ {props.sideMenu}
67
+ <div data-testid="settings-page-breadcrumbs">
68
+ {(props.breadcrumbLinks || [])
69
+ .map((link: { title: string }) => {
70
+ return link.title;
71
+ })
72
+ .join(" > ")}
73
+ </div>
74
+ {props.children}
75
+ </div>
76
+ );
77
+ },
78
+ };
79
+ });
80
+
81
+ jest.mock(
82
+ "../../../../App/FeatureSet/AdminDashboard/src/Pages/Settings/SideMenu",
83
+ () => {
84
+ return {
85
+ __esModule: true,
86
+ default: (): ReactElement => {
87
+ return <nav data-testid="settings-side-menu" />;
88
+ },
89
+ };
90
+ },
91
+ );
92
+
93
+ /*
94
+ * What getAdminDashboardPlugins() returns in this suite. The shells read it
95
+ * on every render, so each test fills it in after the shells were imported.
96
+ */
97
+ const mockAdminEnterprisePlugins: Record<string, unknown> = {};
98
+
99
+ jest.mock("@oneuptime/ee-admin-dashboard", () => {
100
+ return { __esModule: true, default: mockAdminEnterprisePlugins };
101
+ });
102
+
103
+ import SettingsGlobalOIDC from "../../../../App/FeatureSet/AdminDashboard/src/Pages/Settings/GlobalOIDC/Index";
104
+ import SettingsGlobalOIDCView from "../../../../App/FeatureSet/AdminDashboard/src/Pages/Settings/GlobalOIDC/View";
105
+ import SettingsGlobalSSO from "../../../../App/FeatureSet/AdminDashboard/src/Pages/Settings/GlobalSSO/Index";
106
+ import SettingsGlobalSSOView from "../../../../App/FeatureSet/AdminDashboard/src/Pages/Settings/GlobalSSO/View";
107
+ import { AdminDashboardEnterprisePluginKey } from "../../../../App/FeatureSet/AdminDashboard/src/Enterprise/EnterprisePlugins";
108
+
109
+ interface ShellCase {
110
+ name: string;
111
+ Shell: FunctionComponent;
112
+ pluginKey: AdminDashboardEnterprisePluginKey;
113
+ // The upsell copy (and breadcrumb) the page showed before it moved to ee/.
114
+ provider: "Global SSO" | "Global OIDC";
115
+ upsellDescription: string;
116
+ }
117
+
118
+ const GLOBAL_SSO_DESCRIPTION: string =
119
+ "Instance-wide SAML 2.0 identity providers that can be connected to any project on this OneUptime server.";
120
+ const GLOBAL_OIDC_DESCRIPTION: string =
121
+ "Instance-wide OpenID Connect identity providers that can be connected to any project on this OneUptime server.";
122
+
123
+ const SHELLS: Array<ShellCase> = [
124
+ {
125
+ name: "Global SSO list",
126
+ Shell: SettingsGlobalSSO,
127
+ pluginKey: "GlobalSSOList",
128
+ provider: "Global SSO",
129
+ upsellDescription: GLOBAL_SSO_DESCRIPTION,
130
+ },
131
+ {
132
+ name: "Global SSO provider",
133
+ Shell: SettingsGlobalSSOView,
134
+ pluginKey: "GlobalSSOView",
135
+ provider: "Global SSO",
136
+ upsellDescription: GLOBAL_SSO_DESCRIPTION,
137
+ },
138
+ {
139
+ name: "Global OIDC list",
140
+ Shell: SettingsGlobalOIDC,
141
+ pluginKey: "GlobalOIDCList",
142
+ provider: "Global OIDC",
143
+ upsellDescription: GLOBAL_OIDC_DESCRIPTION,
144
+ },
145
+ {
146
+ name: "Global OIDC provider",
147
+ Shell: SettingsGlobalOIDCView,
148
+ pluginKey: "GlobalOIDCView",
149
+ provider: "Global OIDC",
150
+ upsellDescription: GLOBAL_OIDC_DESCRIPTION,
151
+ },
152
+ ];
153
+
154
+ const makeFakeScreen: (pluginKey: string) => FunctionComponent = (
155
+ pluginKey: string,
156
+ ): FunctionComponent => {
157
+ const FakeScreen: FunctionComponent = (): ReactElement => {
158
+ return <div data-testid="enterprise-screen">{pluginKey}</div>;
159
+ };
160
+
161
+ return FakeScreen;
162
+ };
163
+
164
+ const installPlugins: (
165
+ keys: Array<AdminDashboardEnterprisePluginKey>,
166
+ ) => void = (keys: Array<AdminDashboardEnterprisePluginKey>): void => {
167
+ for (const key of keys) {
168
+ mockAdminEnterprisePlugins[key] = makeFakeScreen(key);
169
+ }
170
+ };
171
+
172
+ const clearPlugins: () => void = (): void => {
173
+ for (const key of Object.keys(mockAdminEnterprisePlugins)) {
174
+ delete mockAdminEnterprisePlugins[key];
175
+ }
176
+ };
177
+
178
+ beforeEach(() => {
179
+ billingEnabledForTest = false;
180
+ enterpriseEditionForTest = false;
181
+ clearPlugins();
182
+ });
183
+
184
+ afterEach(() => {
185
+ cleanup();
186
+ clearPlugins();
187
+ });
188
+
189
+ describe.each(SHELLS)("$name shell", (shell: ShellCase) => {
190
+ test.each([false, true])(
191
+ "Community Edition (billing=%s): the upsell inside the settings layout, even when a plugin is present",
192
+ (billing: boolean) => {
193
+ billingEnabledForTest = billing;
194
+ installPlugins([shell.pluginKey]);
195
+
196
+ render(<shell.Shell />);
197
+
198
+ expect(screen.getByTestId("settings-page")).toBeInTheDocument();
199
+ expect(screen.getByTestId("settings-side-menu")).toBeInTheDocument();
200
+ expect(screen.getByTestId("settings-page-breadcrumbs")).toHaveTextContent(
201
+ shell.provider,
202
+ );
203
+ expect(screen.getByText(shell.upsellDescription)).toBeInTheDocument();
204
+ expect(
205
+ screen.getAllByText("Learn about Enterprise Edition").length,
206
+ ).toBeGreaterThan(0);
207
+ expect(screen.queryByTestId("enterprise-screen")).not.toBeInTheDocument();
208
+ },
209
+ );
210
+
211
+ test.each([false, true])(
212
+ "Enterprise Edition (billing=%s): the Enterprise screen, on its own",
213
+ (billing: boolean) => {
214
+ billingEnabledForTest = billing;
215
+ enterpriseEditionForTest = true;
216
+ installPlugins([shell.pluginKey]);
217
+
218
+ render(<shell.Shell />);
219
+
220
+ expect(screen.getByTestId("enterprise-screen")).toHaveTextContent(
221
+ shell.pluginKey,
222
+ );
223
+ // The Enterprise screen brings its own layout.
224
+ expect(screen.queryByTestId("settings-page")).not.toBeInTheDocument();
225
+ expect(
226
+ screen.queryByText(shell.upsellDescription),
227
+ ).not.toBeInTheDocument();
228
+ },
229
+ );
230
+
231
+ test("Enterprise Edition on a Community bundle: the upsell", () => {
232
+ enterpriseEditionForTest = true;
233
+
234
+ render(<shell.Shell />);
235
+
236
+ expect(screen.getByText(shell.upsellDescription)).toBeInTheDocument();
237
+ expect(screen.queryByTestId("enterprise-screen")).not.toBeInTheDocument();
238
+ });
239
+
240
+ test("renders its own plugin key when every Global SSO screen is present", () => {
241
+ enterpriseEditionForTest = true;
242
+ installPlugins(
243
+ SHELLS.map((each: ShellCase) => {
244
+ return each.pluginKey;
245
+ }),
246
+ );
247
+
248
+ render(<shell.Shell />);
249
+
250
+ expect(screen.getByTestId("enterprise-screen")).toHaveTextContent(
251
+ shell.pluginKey,
252
+ );
253
+ expect(screen.getAllByTestId("enterprise-screen")).toHaveLength(1);
254
+ });
255
+
256
+ test("ignores the other Global SSO screens", () => {
257
+ enterpriseEditionForTest = true;
258
+ installPlugins(
259
+ SHELLS.map((each: ShellCase) => {
260
+ return each.pluginKey;
261
+ }).filter((key: AdminDashboardEnterprisePluginKey) => {
262
+ return key !== shell.pluginKey;
263
+ }),
264
+ );
265
+
266
+ render(<shell.Shell />);
267
+
268
+ expect(screen.queryByTestId("enterprise-screen")).not.toBeInTheDocument();
269
+ expect(screen.getByText(shell.upsellDescription)).toBeInTheDocument();
270
+ });
271
+ });