@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
@@ -3,19 +3,27 @@ import Response from "../Utils/Response";
3
3
  import BaseAPI from "./BaseAPI";
4
4
  import GlobalConfig from "../../Models/DatabaseModels/GlobalConfig";
5
5
  import ObjectID from "../../Types/ObjectID";
6
- import BadDataException from "../../Types/Exception/BadDataException";
7
- import API from "../../Utils/API";
8
- import HTTPErrorResponse from "../../Types/API/HTTPErrorResponse";
9
- import { AppVersion, DisableUpdateCheck, EnterpriseLicenseValidationUrl, Host, } from "../EnvironmentConfig";
6
+ import { AppVersion, DisableUpdateCheck } from "../EnvironmentConfig";
10
7
  import VersionUtil from "../../Utils/VersionUtil";
11
8
  import UserMiddleware from "../Middleware/UserAuthorization";
12
9
  import NotAuthenticatedException from "../../Types/Exception/NotAuthenticatedException";
13
- import MasterAdminAuthorization from "../Middleware/MasterAdminAuthorization";
14
- import EnterpriseLicenseSeatUtil from "../Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil";
15
- import UserService from "../Services/UserService";
10
+ import EnterpriseEdition from "../Enterprise/EnterpriseEdition";
11
+ import { EnterpriseLicenseSnapshotUtil, } from "../Enterprise/EnterpriseLicenseSnapshot";
12
+ // Everything buildLicenseResponse reads off the GlobalConfig row.
13
+ export const LICENSE_RESPONSE_CONFIG_SELECT = {
14
+ enterpriseLicenseKey: true,
15
+ enterpriseLicenseToken: true,
16
+ enterpriseLicenseCurrentUserCount: true,
17
+ enterpriseLicenseUserCountUpdatedAt: true,
18
+ enterpriseLicenseInstances: true,
19
+ instanceId: true,
20
+ latestReleaseVersion: true,
21
+ latestReleasePublishedAt: true,
22
+ latestReleaseCheckedAt: true,
23
+ };
16
24
  export default class GlobalConfigAPI extends BaseAPI {
17
25
  constructor() {
18
- var _a, _b, _c, _d;
26
+ var _a, _b;
19
27
  super(GlobalConfig, GlobalConfigService);
20
28
  this.router.get(`${(_a = new this.entityType().getCrudApiPath()) === null || _a === void 0 ? void 0 : _a.toString()}/vars`, async (req, res, next) => {
21
29
  try {
@@ -36,8 +44,21 @@ export default class GlobalConfigAPI extends BaseAPI {
36
44
  next(err);
37
45
  }
38
46
  });
47
+ /*
48
+ * The license state of this installation, for the edition pill and the
49
+ * license dialog.
50
+ *
51
+ * This route stays in core so the Community Edition can still serve the
52
+ * version and update-check half of the dialog. The license half comes
53
+ * from the Enterprise license client through EnterpriseEdition; activating
54
+ * and refreshing a license (the POSTs on this path) are served by the
55
+ * Enterprise module itself (ee/Server/License).
56
+ *
57
+ * This route also serves the login page (before sign-in), so it cannot
58
+ * require authentication outright. Anybody but a master admin gets only
59
+ * what the edition pill shows - see buildLicenseResponse.
60
+ */
39
61
  this.router.get(`${(_b = new this.entityType().getCrudApiPath()) === null || _b === void 0 ? void 0 : _b.toString()}/license`, UserMiddleware.getUserMiddleware, async (req, res, next) => {
40
- var _a;
41
62
  try {
42
63
  /*
43
64
  * This route also serves the login page, so a caller with no session
@@ -50,161 +71,34 @@ export default class GlobalConfigAPI extends BaseAPI {
50
71
  UserMiddleware.isAnonymousRequest(req)) {
51
72
  throw new NotAuthenticatedException(UserMiddleware.AUTHENTICATION_REQUIRED_MESSAGE);
52
73
  }
53
- const config = await GlobalConfigService.findOneById({
54
- id: ObjectID.getZeroObjectID(),
55
- select: {
56
- enterpriseCompanyName: true,
57
- enterpriseLicenseExpiresAt: true,
58
- enterpriseLicenseKey: true,
59
- enterpriseLicenseToken: true,
60
- enterpriseLicenseIsEvaluation: true,
61
- enterpriseLicenseUserLimit: true,
62
- enterpriseLicenseCurrentUserCount: true,
63
- enterpriseLicenseUserCountUpdatedAt: true,
64
- enterpriseLicenseInstances: true,
65
- instanceId: true,
66
- latestReleaseVersion: true,
67
- latestReleasePublishedAt: true,
68
- latestReleaseCheckedAt: true,
69
- },
70
- props: {
71
- isRoot: true,
72
- },
73
- });
74
- /*
75
- * This route also serves the login page (before sign-in), so it
76
- * cannot require authentication outright. Anonymous callers only
77
- * get enough to render the edition pill — the license key, token
78
- * and instance topology require a signed-in user.
79
- */
80
- const isAuthenticatedUser = Boolean((_a = req.userAuthorization) === null || _a === void 0 ? void 0 : _a.userId);
81
- const licenseValid = Boolean((config === null || config === void 0 ? void 0 : config.enterpriseLicenseToken) &&
82
- (config === null || config === void 0 ? void 0 : config.enterpriseLicenseExpiresAt) &&
83
- config.enterpriseLicenseExpiresAt.getTime() > Date.now());
74
+ const audience = GlobalConfigAPI.getLicenseResponseAudience(req);
75
+ const isEnterpriseEditionLoaded = EnterpriseEdition.isLoaded();
76
+ const snapshot = isEnterpriseEditionLoaded
77
+ ? await EnterpriseEdition.getLicenseSnapshot()
78
+ : null;
84
79
  /*
85
- * What the seat limit actually means on this installation right now,
86
- * as opposed to what oneuptime.com last reported. Only for signed-in
87
- * callers: it is derived from the live User table, and an anonymous
88
- * visitor on the login page has no business being told how close this
89
- * server is to refusing new accounts.
80
+ * Only a master admin's response carries anything read from the row
81
+ * or derived from the live User table, so nobody else costs a read.
90
82
  */
91
- const seatUsage = isAuthenticatedUser
92
- ? await EnterpriseLicenseSeatUtil.getSeatUsageForLoadedGlobalConfig({
93
- config: config,
94
- getLocalUserCount: GlobalConfigAPI.getLocalUserCount,
83
+ const config = audience === "master-admin"
84
+ ? await GlobalConfigService.findOneById({
85
+ id: ObjectID.getZeroObjectID(),
86
+ select: LICENSE_RESPONSE_CONFIG_SELECT,
87
+ props: {
88
+ isRoot: true,
89
+ },
95
90
  })
96
91
  : null;
97
- const responseBody = Object.assign({ companyName: (config === null || config === void 0 ? void 0 : config.enterpriseCompanyName) || null, expiresAt: (config === null || config === void 0 ? void 0 : config.enterpriseLicenseExpiresAt)
98
- ? config.enterpriseLicenseExpiresAt.toISOString()
99
- : null, licenseKey: isAuthenticatedUser
100
- ? (config === null || config === void 0 ? void 0 : config.enterpriseLicenseKey) || null
101
- : null, token: isAuthenticatedUser
102
- ? (config === null || config === void 0 ? void 0 : config.enterpriseLicenseToken) || null
103
- : null, licenseValid: licenseValid,
104
- /*
105
- * Whether this is an evaluation/testing license. Benign like the
106
- * company name and expiry, so it is not gated behind sign-in — the
107
- * edition modal shows the evaluation notice to anyone who opens it.
108
- */
109
- isEvaluationLicense: Boolean(config === null || config === void 0 ? void 0 : config.enterpriseLicenseIsEvaluation), userLimit: typeof (config === null || config === void 0 ? void 0 : config.enterpriseLicenseUserLimit) === "number"
110
- ? config.enterpriseLicenseUserLimit
111
- : null, currentUserCount: typeof (config === null || config === void 0 ? void 0 : config.enterpriseLicenseCurrentUserCount) === "number"
112
- ? config.enterpriseLicenseCurrentUserCount
113
- : null, userCountUpdatedAt: (config === null || config === void 0 ? void 0 : config.enterpriseLicenseUserCountUpdatedAt)
114
- ? config.enterpriseLicenseUserCountUpdatedAt.toISOString()
115
- : null, instances: isAuthenticatedUser &&
116
- Array.isArray(config === null || config === void 0 ? void 0 : config.enterpriseLicenseInstances)
117
- ? config.enterpriseLicenseInstances
118
- : [], instanceId: isAuthenticatedUser && (config === null || config === void 0 ? void 0 : config.instanceId)
119
- ? config.instanceId.toString()
120
- : null,
121
- /*
122
- * Which build this installation runs, and whether a newer one has
123
- * been released, are gated the same way as the instance topology:
124
- * telling an anonymous visitor on the login page that this server
125
- * is behind on patches advertises an unpatched target.
126
- */
127
- currentVersion: isAuthenticatedUser ? AppVersion : null, latestVersion: isAuthenticatedUser
128
- ? (config === null || config === void 0 ? void 0 : config.latestReleaseVersion) || null
129
- : null, latestVersionPublishedAt: isAuthenticatedUser && (config === null || config === void 0 ? void 0 : config.latestReleasePublishedAt)
130
- ? config.latestReleasePublishedAt.toISOString()
131
- : null, latestVersionCheckedAt: isAuthenticatedUser && (config === null || config === void 0 ? void 0 : config.latestReleaseCheckedAt)
132
- ? config.latestReleaseCheckedAt.toISOString()
133
- : null, isUpdateAvailable: isAuthenticatedUser
134
- ? VersionUtil.isUpdateAvailable({
135
- currentVersion: AppVersion,
136
- latestVersion: config === null || config === void 0 ? void 0 : config.latestReleaseVersion,
137
- })
138
- : false,
139
- /*
140
- * Lets the modal say "update checks are off" instead of "has not
141
- * checked yet", which would be a promise the installation is never
142
- * going to keep.
143
- */
144
- isUpdateCheckDisabled: isAuthenticatedUser
145
- ? DisableUpdateCheck
146
- : false }, GlobalConfigAPI.getSeatUsageResponseFields(seatUsage));
147
- return Response.sendJsonObjectResponse(req, res, responseBody);
148
- }
149
- catch (err) {
150
- next(err);
151
- }
152
- });
153
- /*
154
- * Activating (or replacing) the license key for the whole installation.
155
- *
156
- * Master admin only. This writes the terms that bound how many users the
157
- * installation may have, so anyone who can reach it can change the seat
158
- * limit UserService now enforces. It used to run on
159
- * UserMiddleware.getUserMiddleware, which lets anonymous callers through
160
- * (it has to — the GET above serves the signed-out login page), so the
161
- * route was in practice unauthenticated.
162
- */
163
- this.router.post(`${(_c = new this.entityType().getCrudApiPath()) === null || _c === void 0 ? void 0 : _c.toString()}/license`, MasterAdminAuthorization.isAuthorizedMasterAdminMiddleware, async (req, res, next) => {
164
- var _a;
165
- try {
166
- const licenseKey = ((_a = req.body["licenseKey"]) === null || _a === void 0 ? void 0 : _a.trim()) || "";
167
- if (!licenseKey) {
168
- throw new BadDataException("License key is required");
169
- }
170
- const responseBody = await this.validateAndStoreLicenseKey(licenseKey);
171
- return Response.sendJsonObjectResponse(req, res, responseBody);
172
- }
173
- catch (err) {
174
- next(err);
175
- }
176
- });
177
- /*
178
- * Re-fetch the license this installation already holds.
179
- *
180
- * The seat limit and the expiry live on oneuptime.com and can change on
181
- * any day — a customer buys ten more seats at noon. The daily report job
182
- * picks that up eventually; this is the button an administrator presses
183
- * when "eventually" is not good enough, and it is the only way to apply a
184
- * change without re-typing the key.
185
- *
186
- * Deliberately takes no license key: it uses the stored one. A refresh
187
- * that accepted a key would be an activation with a friendlier name, and
188
- * would let a mistyped key replace a working license by accident.
189
- */
190
- this.router.post(`${(_d = new this.entityType().getCrudApiPath()) === null || _d === void 0 ? void 0 : _d.toString()}/license/refresh`, MasterAdminAuthorization.isAuthorizedMasterAdminMiddleware, async (req, res, next) => {
191
- var _a;
192
- try {
193
- const config = await GlobalConfigService.findOneById({
194
- id: ObjectID.getZeroObjectID(),
195
- select: {
196
- enterpriseLicenseKey: true,
197
- },
198
- props: {
199
- isRoot: true,
200
- },
201
- });
202
- const licenseKey = ((_a = config === null || config === void 0 ? void 0 : config.enterpriseLicenseKey) === null || _a === void 0 ? void 0 : _a.trim()) || "";
203
- if (!licenseKey) {
204
- throw new BadDataException("This installation does not have an enterprise license key yet. Enter a license key to activate it first.");
205
- }
206
- const responseBody = await this.validateAndStoreLicenseKey(licenseKey);
207
- return Response.sendJsonObjectResponse(req, res, responseBody);
92
+ const seatUsage = audience === "master-admin" && isEnterpriseEditionLoaded
93
+ ? await EnterpriseEdition.getSeatUsage()
94
+ : null;
95
+ return Response.sendJsonObjectResponse(req, res, GlobalConfigAPI.buildLicenseResponse({
96
+ audience,
97
+ isEnterpriseEditionLoaded,
98
+ snapshot,
99
+ config,
100
+ seatUsage,
101
+ }));
208
102
  }
209
103
  catch (err) {
210
104
  next(err);
@@ -212,199 +106,99 @@ export default class GlobalConfigAPI extends BaseAPI {
212
106
  });
213
107
  }
214
108
  /*
215
- * Ask oneuptime.com what this license key is worth today, and mirror the
216
- * answer into GlobalConfig.
109
+ * A master admin is recognised from the verified access token that
110
+ * UserMiddleware.getUserMiddleware decoded. Anything else - no token, an
111
+ * API key, a status-page user, a signed-in project member - is "public".
112
+ */
113
+ static getLicenseResponseAudience(req) {
114
+ var _a;
115
+ return ((_a = req.userAuthorization) === null || _a === void 0 ? void 0 : _a.isMasterAdmin) === true
116
+ ? "master-admin"
117
+ : "public";
118
+ }
119
+ /*
120
+ * The body of GET /global-config/license, and of the Enterprise license
121
+ * client's activation and refresh responses, so the three can never
122
+ * disagree on a field.
217
123
  *
218
- * Shared by activation and refresh so the two cannot drift: the whole point
219
- * of refresh is that it applies exactly what activation would have applied,
220
- * and a second hand-written copy of this mapping is how the seat limit came
221
- * to be dropped on the floor by the daily report job before.
124
+ * licenseValid is true for a valid license AND one in its grace period:
125
+ * grace means nothing has changed yet, and the dialog must not tell an
126
+ * administrator the license is gone while everything still works.
222
127
  */
223
- async validateAndStoreLicenseKey(licenseKey) {
224
- var _a, _b;
225
- const globalConfigId = ObjectID.getZeroObjectID();
226
- const existingConfig = await GlobalConfigService.findOneById({
227
- id: globalConfigId,
228
- select: {
229
- _id: true,
230
- instanceId: true,
231
- },
232
- props: {
233
- isRoot: true,
234
- ignoreHooks: true,
235
- },
236
- });
237
- /*
238
- * Send this instance's id and host along with the key so the
239
- * license server registers this instance against the license and
240
- * it shows up in the instance list on all instances that share
241
- * the license.
242
- */
243
- const instanceId = (existingConfig === null || existingConfig === void 0 ? void 0 : existingConfig.instanceId) || ObjectID.generate();
244
- const validationResponse = await API.post({
245
- url: EnterpriseLicenseValidationUrl,
246
- data: {
247
- licenseKey,
248
- instanceId: instanceId.toString(),
249
- host: Host,
250
- /*
251
- * Sent here as well as from the daily report job so the version
252
- * lands on the license server the moment the key is validated,
253
- * rather than up to 24 hours later.
254
- */
255
- version: AppVersion,
256
- },
257
- });
258
- if (!validationResponse.isSuccess()) {
259
- const errorMessage = validationResponse instanceof HTTPErrorResponse
260
- ? validationResponse.message || "Failed to validate license key."
261
- : "Failed to validate license key.";
262
- throw new BadDataException(errorMessage);
263
- }
264
- const payload = validationResponse.data;
265
- const companyNameRaw = ((_a = payload["companyName"]) === null || _a === void 0 ? void 0 : _a.trim()) || "";
266
- const expiresAtRaw = payload["expiresAt"] || "";
267
- const licenseKeyRaw = ((_b = payload["licenseKey"]) === null || _b === void 0 ? void 0 : _b.trim()) || licenseKey;
268
- const licenseToken = payload["token"] || "";
269
- let licenseExpiry = undefined;
270
- if (expiresAtRaw) {
271
- const parsedDate = new Date(expiresAtRaw);
272
- if (Number.isNaN(parsedDate.getTime())) {
273
- throw new BadDataException("License expiration returned from server is invalid.");
274
- }
275
- licenseExpiry = parsedDate;
276
- }
277
- const userLimitRaw = payload["userLimit"];
278
- const userLimit = typeof userLimitRaw === "number" && Number.isFinite(userLimitRaw)
279
- ? userLimitRaw
280
- : null;
281
- const currentUserCountRaw = payload["currentUserCount"];
282
- const currentUserCount = typeof currentUserCountRaw === "number" &&
283
- Number.isFinite(currentUserCountRaw)
284
- ? currentUserCountRaw
285
- : null;
286
- const userCountUpdatedAtRaw = payload["userCountUpdatedAt"];
287
- let userCountUpdatedAt = null;
288
- if (userCountUpdatedAtRaw) {
289
- const parsedReportedAt = new Date(userCountUpdatedAtRaw);
290
- if (!Number.isNaN(parsedReportedAt.getTime())) {
291
- userCountUpdatedAt = parsedReportedAt;
292
- }
293
- }
294
- const isEvaluationLicense = payload["isEvaluationLicense"] === true;
295
- const instances = Array.isArray(payload["instances"])
296
- ? payload["instances"]
297
- : [];
298
- const updatePayload = {
299
- enterpriseCompanyName: companyNameRaw || null,
300
- enterpriseLicenseKey: licenseKeyRaw || null,
301
- enterpriseLicenseExpiresAt: licenseExpiry || null,
302
- enterpriseLicenseToken: licenseToken || null,
303
- enterpriseLicenseIsEvaluation: isEvaluationLicense,
304
- enterpriseLicenseUserLimit: userLimit,
305
- enterpriseLicenseCurrentUserCount: currentUserCount,
306
- enterpriseLicenseUserCountUpdatedAt: userCountUpdatedAt,
307
- enterpriseLicenseInstances: instances,
128
+ static buildLicenseResponse(data) {
129
+ const snapshot = data.isEnterpriseEditionLoaded ? data.snapshot : null;
130
+ const publicFields = {
131
+ edition: data.isEnterpriseEditionLoaded ? "enterprise" : "community",
132
+ status: snapshot ? snapshot.status : null,
133
+ verification: snapshot ? snapshot.verification : null,
134
+ graceReason: (snapshot === null || snapshot === void 0 ? void 0 : snapshot.graceReason) || null,
135
+ licenseValid: EnterpriseLicenseSnapshotUtil.isUsable(snapshot),
136
+ companyName: (snapshot === null || snapshot === void 0 ? void 0 : snapshot.companyName) || null,
137
+ expiresAt: GlobalConfigAPI.toIsoString(snapshot === null || snapshot === void 0 ? void 0 : snapshot.expiresAt),
138
+ graceEndsAt: GlobalConfigAPI.toIsoString(snapshot === null || snapshot === void 0 ? void 0 : snapshot.graceEndsAt),
139
+ isEvaluation: Boolean(snapshot === null || snapshot === void 0 ? void 0 : snapshot.isEvaluation),
140
+ // The name older dialogs read; same value as isEvaluation.
141
+ isEvaluationLicense: Boolean(snapshot === null || snapshot === void 0 ? void 0 : snapshot.isEvaluation),
142
+ /*
143
+ * Which enterprise features the license covers: "all", or the
144
+ * EnterpriseFeature values it lists (null on the Community Edition).
145
+ * A valid license that leaves a feature out stops that feature (see
146
+ * EnterpriseEdition.isFeatureActive), which licenseValid alone cannot
147
+ * tell a screen.
148
+ */
149
+ features: GlobalConfigAPI.toFeaturesResponse(snapshot),
308
150
  };
309
- if (!(existingConfig === null || existingConfig === void 0 ? void 0 : existingConfig.instanceId)) {
310
- // Installs that predate instance ids: persist the one we generated.
311
- updatePayload.instanceId = instanceId;
312
- }
313
- if (existingConfig) {
314
- await GlobalConfigService.updateOneById({
315
- id: globalConfigId,
316
- data: updatePayload,
317
- props: {
318
- isRoot: true,
319
- ignoreHooks: true,
320
- },
321
- });
322
- }
323
- else {
324
- const newConfig = new GlobalConfig();
325
- newConfig.id = globalConfigId;
326
- if (companyNameRaw) {
327
- newConfig.enterpriseCompanyName = companyNameRaw;
328
- }
329
- if (licenseKeyRaw) {
330
- newConfig.enterpriseLicenseKey = licenseKeyRaw;
331
- }
332
- if (licenseToken) {
333
- newConfig.enterpriseLicenseToken = licenseToken;
334
- }
335
- newConfig.enterpriseLicenseIsEvaluation = isEvaluationLicense;
336
- if (licenseExpiry) {
337
- newConfig.enterpriseLicenseExpiresAt = licenseExpiry;
338
- }
339
- if (userLimit !== null) {
340
- newConfig.enterpriseLicenseUserLimit = userLimit;
341
- }
342
- if (currentUserCount !== null) {
343
- newConfig.enterpriseLicenseCurrentUserCount = currentUserCount;
344
- }
345
- if (userCountUpdatedAt) {
346
- newConfig.enterpriseLicenseUserCountUpdatedAt = userCountUpdatedAt;
347
- }
348
- newConfig.enterpriseLicenseInstances = instances;
349
- newConfig.instanceId = instanceId;
350
- await GlobalConfigService.create({
351
- data: newConfig,
352
- props: {
353
- isRoot: true,
354
- ignoreHooks: true,
355
- },
356
- });
151
+ if (data.audience !== "master-admin") {
152
+ return publicFields;
357
153
  }
154
+ const config = data.config;
358
155
  /*
359
- * Seat usage recomputed from what was just stored, so the dialog that
360
- * triggered this can show the new limit against the real user count
361
- * without a second round trip - and so an administrator who just bought
362
- * seats sees them land.
156
+ * The license columns mean nothing on the Community Edition (a leftover
157
+ * key from an earlier Enterprise image licenses nothing here), so only
158
+ * the version half of the dialog is filled in there.
363
159
  */
364
- const seatUsage = await GlobalConfigAPI.getSeatUsageForResponse({
365
- userLimit: userLimit,
366
- currentUserCount: currentUserCount,
367
- instances: instances,
368
- instanceId: instanceId,
369
- });
370
- return Object.assign({ companyName: companyNameRaw || null, expiresAt: licenseExpiry ? licenseExpiry.toISOString() : null, licenseKey: licenseKeyRaw || null, token: licenseToken || null, isEvaluationLicense: isEvaluationLicense, userLimit: userLimit, currentUserCount: currentUserCount, userCountUpdatedAt: userCountUpdatedAt
371
- ? userCountUpdatedAt.toISOString()
372
- : null, instances: instances, instanceId: instanceId.toString() }, GlobalConfigAPI.getSeatUsageResponseFields(seatUsage));
160
+ const licenseConfig = snapshot ? config : null;
161
+ const licenseToken = (licenseConfig === null || licenseConfig === void 0 ? void 0 : licenseConfig.enterpriseLicenseToken) || null;
162
+ const licenseKey = (licenseConfig === null || licenseConfig === void 0 ? void 0 : licenseConfig.enterpriseLicenseKey) || null;
163
+ return Object.assign(Object.assign(Object.assign({}, publicFields), { message: (snapshot === null || snapshot === void 0 ? void 0 : snapshot.message) || null, licenseKey: licenseKey, token: licenseToken,
164
+ /*
165
+ * "offline" when the license was activated by pasting a signed token:
166
+ * such an installation holds no license key and never calls home.
167
+ */
168
+ activationMode: licenseToken ? (licenseKey ? "online" : "offline") : null,
169
+ // From the signed claims for a verified license, else the stored column.
170
+ userLimit: typeof (snapshot === null || snapshot === void 0 ? void 0 : snapshot.userLimit) === "number" ? snapshot.userLimit : null, currentUserCount: typeof (licenseConfig === null || licenseConfig === void 0 ? void 0 : licenseConfig.enterpriseLicenseCurrentUserCount) === "number"
171
+ ? licenseConfig.enterpriseLicenseCurrentUserCount
172
+ : null, userCountUpdatedAt: GlobalConfigAPI.toIsoString(licenseConfig === null || licenseConfig === void 0 ? void 0 : licenseConfig.enterpriseLicenseUserCountUpdatedAt), instances: Array.isArray(licenseConfig === null || licenseConfig === void 0 ? void 0 : licenseConfig.enterpriseLicenseInstances)
173
+ ? licenseConfig === null || licenseConfig === void 0 ? void 0 : licenseConfig.enterpriseLicenseInstances
174
+ : [], instanceId: (licenseConfig === null || licenseConfig === void 0 ? void 0 : licenseConfig.instanceId)
175
+ ? licenseConfig.instanceId.toString()
176
+ : null,
177
+ /*
178
+ * Which build this installation runs, and whether a newer one has been
179
+ * released. Master admins only: telling anybody else that this server
180
+ * is behind on patches advertises an unpatched target.
181
+ */
182
+ currentVersion: AppVersion, latestVersion: (config === null || config === void 0 ? void 0 : config.latestReleaseVersion) || null, latestVersionPublishedAt: GlobalConfigAPI.toIsoString(config === null || config === void 0 ? void 0 : config.latestReleasePublishedAt), latestVersionCheckedAt: GlobalConfigAPI.toIsoString(config === null || config === void 0 ? void 0 : config.latestReleaseCheckedAt), isUpdateAvailable: VersionUtil.isUpdateAvailable({
183
+ currentVersion: AppVersion,
184
+ latestVersion: config === null || config === void 0 ? void 0 : config.latestReleaseVersion,
185
+ }),
186
+ /*
187
+ * Lets the dialog say "update checks are off" instead of "has not
188
+ * checked yet", which would be a promise the installation is never
189
+ * going to keep.
190
+ */
191
+ isUpdateCheckDisabled: DisableUpdateCheck }), GlobalConfigAPI.getSeatUsageResponseFields(snapshot ? data.seatUsage : null));
373
192
  }
374
- /*
375
- * Seat usage built from license terms held in memory rather than re-read
376
- * from the database. Used right after a write, where re-reading would race
377
- * the write it is describing.
378
- */
379
- static async getSeatUsageForResponse(data) {
380
- const config = new GlobalConfig();
381
- config.instanceId = data.instanceId;
382
- config.enterpriseLicenseInstances = data.instances;
383
- if (data.userLimit !== null) {
384
- config.enterpriseLicenseUserLimit = data.userLimit;
193
+ // The license's features for a response: "all", a copy of the list, or null.
194
+ static toFeaturesResponse(snapshot) {
195
+ if (!snapshot) {
196
+ return null;
385
197
  }
386
- if (data.currentUserCount !== null) {
387
- config.enterpriseLicenseCurrentUserCount = data.currentUserCount;
198
+ if (snapshot.features === "all") {
199
+ return "all";
388
200
  }
389
- return EnterpriseLicenseSeatUtil.getSeatUsageForLoadedGlobalConfig({
390
- config: config,
391
- getLocalUserCount: GlobalConfigAPI.getLocalUserCount,
392
- });
393
- }
394
- /*
395
- * How many users exist on this installation right now. Deliberately the live
396
- * count rather than the last reported one: the number an administrator is
397
- * about to act on is the number that decides whether the next invitation
398
- * goes through.
399
- */
400
- static async getLocalUserCount() {
401
- const userCount = await UserService.countBy({
402
- query: {},
403
- props: {
404
- isRoot: true,
405
- },
406
- });
407
- return userCount.toNumber();
201
+ return Array.isArray(snapshot.features) ? [...snapshot.features] : [];
408
202
  }
409
203
  /*
410
204
  * The seat-enforcement half of a license response. Always the same keys, so
@@ -428,5 +222,15 @@ export default class GlobalConfigAPI extends BaseAPI {
428
222
  canAddMoreUsers: seatUsage.hasSeatForNewUser,
429
223
  };
430
224
  }
225
+ static toIsoString(value) {
226
+ if (!value) {
227
+ return null;
228
+ }
229
+ const date = value instanceof Date ? value : new Date(value);
230
+ if (Number.isNaN(date.getTime())) {
231
+ return null;
232
+ }
233
+ return date.toISOString();
234
+ }
431
235
  }
432
236
  //# sourceMappingURL=GlobalConfigAPI.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GlobalConfigAPI.js","sourceRoot":"","sources":["../../../../Server/API/GlobalConfigAPI.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GlobalConfigAPI.js","sourceRoot":"","sources":["../../../../Server/API/GlobalConfigAPI.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import ProjectOidcService from "../Services/ProjectOidcService";
2
+ import EditionEnforcement from "../Utils/EditionEnforcement";
2
3
  import Response from "../Utils/Response";
3
4
  import BaseAPI from "./BaseAPI";
4
5
  import { LIMIT_PER_PROJECT } from "../../Types/Database/LimitMax";
@@ -18,22 +19,29 @@ export default class ProjectOidcAPI extends BaseAPI {
18
19
  if (!projectId) {
19
20
  return Response.sendErrorResponse(req, res, new BadDataException("Invalid project id."));
20
21
  }
21
- const oidc = await this.service.findBy({
22
- query: {
23
- projectId: projectId,
24
- isEnabled: true,
25
- },
26
- limit: LIMIT_PER_PROJECT,
27
- skip: 0,
28
- select: {
29
- name: true,
30
- description: true,
31
- _id: true,
32
- },
33
- props: {
34
- isRoot: true,
35
- },
36
- });
22
+ /*
23
+ * Only list providers a user can actually sign in with: the
24
+ * Community Edition serves no OIDC login routes, so it lists none
25
+ * rather than send the user to a 404.
26
+ */
27
+ const oidc = EditionEnforcement.areSsoRoutesServed()
28
+ ? await this.service.findBy({
29
+ query: {
30
+ projectId: projectId,
31
+ isEnabled: true,
32
+ },
33
+ limit: LIMIT_PER_PROJECT,
34
+ skip: 0,
35
+ select: {
36
+ name: true,
37
+ description: true,
38
+ _id: true,
39
+ },
40
+ props: {
41
+ isRoot: true,
42
+ },
43
+ })
44
+ : [];
37
45
  return Response.sendEntityArrayResponse(req, res, oidc, new PositiveNumber(oidc.length), ProjectOIDC);
38
46
  }
39
47
  catch (err) {