@oneuptime/common 13.0.8 → 14.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/AnalyticsModels/AuditLog.ts +23 -15
- package/Models/DatabaseModels/GlobalConfig.ts +24 -0
- package/Models/DatabaseModels/Index.ts +4 -0
- package/Models/DatabaseModels/Monitor.ts +3 -2
- package/Models/DatabaseModels/MonitorTemplate.ts +2 -1
- package/Models/DatabaseModels/ServiceLevelObjectiveFeed.ts +2 -0
- package/Models/DatabaseModels/ServiceLevelObjectiveLabelRule.ts +522 -0
- package/Models/DatabaseModels/ServiceLevelObjectiveMonitorRule.ts +38 -4
- package/Models/DatabaseModels/ServiceLevelObjectiveOwnerRule.ts +603 -0
- package/Scripts/generate-service-worker.js +65 -4
- package/Server/API/BaseAPI.ts +26 -5
- package/Server/API/GlobalConfigAPI.ts +228 -462
- package/Server/API/ProjectOIDC.ts +25 -16
- package/Server/API/ProjectSSO.ts +24 -16
- package/Server/API/StatusPageAPI.ts +100 -42
- package/Server/API/TeamMemberAPI.ts +10 -1
- package/Server/Enterprise/EnterpriseEdition.ts +649 -0
- package/Server/Enterprise/EnterpriseFeature.ts +48 -0
- package/Server/Enterprise/EnterpriseLicenseSnapshot.ts +192 -0
- package/Server/Enterprise/EnterpriseServerModule.ts +233 -0
- package/Server/EnvironmentConfig.ts +147 -2
- package/Server/Infrastructure/Postgres/SchemaMigrations/1793900000000-AddEnterpriseEditionFirstSeenAt.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1794100000000-AddSloLabelAndOwnerRules.ts +248 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1794200000000-AddSloMonitorRuleMonitorType.ts +19 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
- package/Server/Middleware/UserAuthorization.ts +38 -16
- package/Server/Services/AuditLogService.ts +84 -1079
- package/Server/Services/DatabaseService.ts +10 -0
- package/Server/Services/EnterpriseLicenseService.ts +38 -0
- package/Server/Services/GlobalConfigService.ts +80 -1
- package/Server/Services/Index.ts +4 -0
- package/Server/Services/MonitorProbeService.ts +116 -20
- package/Server/Services/MonitorService.ts +59 -6
- package/Server/Services/MonitorStatusTimelineService.ts +284 -0
- package/Server/Services/MonitorTemplateService.ts +26 -0
- package/Server/Services/ProjectService.ts +284 -0
- package/Server/Services/RumSessionPinService.ts +25 -6
- package/Server/Services/ServiceLevelObjectiveLabelRuleEngineService.ts +385 -0
- package/Server/Services/ServiceLevelObjectiveLabelRuleService.ts +51 -0
- package/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.ts +92 -16
- package/Server/Services/ServiceLevelObjectiveMonitorRuleService.ts +36 -1
- package/Server/Services/ServiceLevelObjectiveOwnerRuleEngineService.ts +521 -0
- package/Server/Services/ServiceLevelObjectiveOwnerRuleService.ts +51 -0
- package/Server/Services/ServiceLevelObjectiveService.ts +28 -0
- package/Server/Services/StatusPagePrivateUserService.ts +7 -3
- package/Server/Services/StatusPageService.ts +78 -1
- package/Server/Services/TeamMemberService.ts +11 -0
- package/Server/Services/TeamService.ts +10 -0
- package/Server/Services/UserService.ts +10 -17
- package/Server/Types/Database/Permissions/CreatePermission.ts +15 -0
- package/Server/Types/Database/Permissions/EditionPermission.ts +208 -18
- package/Server/Types/Database/Permissions/TablePermission.ts +10 -3
- package/Server/Types/Database/Permissions/UpdatePermission.ts +29 -0
- package/Server/Types/Markdown.ts +41 -0
- package/Server/Types/Workflow/Components/Telegram/SendMessageToChat.ts +27 -1
- package/Server/Utils/AI/Toolbox/SloTools.ts +1 -0
- package/Server/Utils/CommunityEditionSsoReport.ts +361 -0
- package/Server/Utils/EditionEnforcement.ts +233 -0
- package/Server/Utils/FrontendEnvironment.ts +41 -2
- package/Server/Utils/InstanceHealth/RedisHealth.ts +12 -277
- package/Server/Utils/Monitor/AffectedResourceList.ts +148 -0
- package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +1 -1
- package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +10 -1
- package/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.ts +1 -1
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +720 -465
- package/Server/Utils/Monitor/MonitoringIntervalValidator.ts +116 -0
- package/Server/Utils/Monitor/RootCauseList.ts +139 -0
- package/Server/Utils/Rules/RuleRun/RuleRunRegistry.ts +28 -0
- package/Server/Utils/Slo/SloRulePatternValidator.ts +42 -0
- package/Server/Utils/Workspace/Slack/Slack.ts +423 -10
- package/Tests/App/Accounts/LoginPasskey.test.tsx +18 -0
- package/Tests/App/Accounts/LoginSsoEdition.test.tsx +616 -0
- package/Tests/App/AdminDashboard/AdminAuthenticationSsoEdition.test.tsx +217 -0
- package/Tests/App/AdminDashboard/AdminEnterprisePluginPage.test.tsx +357 -0
- package/Tests/App/AdminDashboard/EnterpriseLicensesShell.test.tsx +214 -0
- package/Tests/App/AdminDashboard/GlobalSSOEnterpriseShells.test.tsx +271 -0
- package/Tests/App/AdminDashboard/HealthShells.test.tsx +659 -0
- package/Tests/App/Dashboard/AuditLogsAndComplianceShells.test.tsx +572 -0
- package/Tests/App/Dashboard/EnterpriseFeatureUpgrade.test.tsx +547 -0
- package/Tests/App/Dashboard/EnterprisePluginPage.test.tsx +667 -0
- package/Tests/App/Dashboard/FeedFilterSortIntegration.test.tsx +1632 -0
- package/Tests/App/Dashboard/FeedOptionsLocales.test.ts +250 -0
- package/Tests/App/Dashboard/FeedOrdering.test.ts +279 -9
- package/Tests/App/Dashboard/IdentityEnterpriseShells.test.tsx +319 -0
- package/Tests/App/Dashboard/InvestigationFeedRefresh.test.tsx +60 -1
- package/Tests/App/Dashboard/InvestigationPanel.test.tsx +594 -3
- package/Tests/App/Dashboard/OnboardingSsoEmptyState.test.tsx +185 -0
- package/Tests/App/Dashboard/ProductOrientation.test.tsx +646 -0
- package/Tests/App/Dashboard/ResourceFeed.test.tsx +612 -2
- package/Tests/App/Dashboard/ResourceFeedPageWiring.test.ts +30 -0
- package/Tests/App/Dashboard/ResourceFeedPagesFilterSort.test.tsx +1202 -0
- package/Tests/App/Dashboard/ScheduledMaintenanceFeedRefresh.test.tsx +52 -1
- package/Tests/App/Dashboard/SecurityEventConnectionDiagnostics.test.tsx +45 -9
- package/Tests/App/Dashboard/SecurityEventDetailPanel.test.tsx +399 -0
- package/Tests/App/Dashboard/SecurityEventListRow.test.tsx +214 -0
- package/Tests/App/Dashboard/SecurityEventsEmptyState.test.tsx +1 -83
- package/Tests/App/Dashboard/SecurityEventsNavTabs.test.tsx +248 -0
- package/Tests/App/Dashboard/SecurityEventsViewer.test.tsx +1203 -0
- package/Tests/App/Dashboard/SloFeed.test.tsx +106 -1
- package/Tests/App/Dashboard/SloMonitorRuleCriteria.test.tsx +566 -0
- package/Tests/App/Dashboard/SloNavigationWiring.test.tsx +6 -4
- package/Tests/App/Dashboard/SloNoticeBanner.test.tsx +186 -0
- package/Tests/App/Dashboard/SloOverviewKpiStrip.test.tsx +388 -44
- package/Tests/App/Dashboard/SloOverviewLayout.test.tsx +613 -0
- package/Tests/App/Dashboard/UserEmailCallSites.test.tsx +11 -91
- package/Tests/App/StatusPage/StatusPageSsoEmptyState.test.tsx +319 -0
- package/Tests/Helpers/RefreshAwareApiScan.ts +757 -0
- package/Tests/Helpers/TenantScopedRequestScan.ts +515 -0
- package/Tests/Models/DatabaseModels/ResourceFeedModels.test.ts +0 -8
- package/Tests/Models/DatabaseModels/SloLabelAndOwnerRuleModels.test.ts +404 -0
- package/Tests/Models/DatabaseModels/SloOverhaulModels.test.ts +17 -1
- package/Tests/Models/DatabaseModels/StaticRuleCriteriaInheritance.test.ts +4 -2
- package/Tests/Scripts/GenerateServiceWorker.test.ts +931 -0
- package/Tests/Server/API/BaseAPICreateItemDoesNotMutateModel.test.ts +130 -0
- package/Tests/Server/API/GlobalConfigLicense.test.ts +742 -497
- package/Tests/Server/API/OnCallReadinessAPI.test.ts +35 -909
- package/Tests/Server/API/SsoProviderListingsEdition.test.ts +432 -0
- package/Tests/Server/API/TeamMemberLeaveScimLockEdition.test.ts +252 -0
- package/Tests/Server/Enterprise/EnterpriseEdition.test.ts +824 -0
- package/Tests/Server/Enterprise/EnterpriseFeatureActive.test.ts +643 -0
- package/Tests/Server/Enterprise/EnterpriseLicenseSnapshot.test.ts +294 -0
- package/Tests/Server/Enterprise/EnterpriseModelFeatureMap.test.ts +93 -0
- package/Tests/Server/Enterprise/EnterpriseOnlyModulesLiveInEe.test.ts +582 -0
- package/Tests/Server/Enterprise/EnterpriseServerModule.test.ts +247 -0
- package/Tests/Server/Enterprise/FakeEnterpriseModule.ts +502 -0
- package/Tests/Server/Enterprise/TestBillingFlag.ts +70 -0
- package/Tests/Server/EnvironmentConfigEnterpriseEdition.test.ts +314 -0
- package/Tests/Server/Infrastructure/ContainerBootConfiguration.test.ts +289 -0
- package/Tests/Server/Infrastructure/E2EClickHouseFixtureAccess.test.ts +5 -1
- package/Tests/Server/Infrastructure/Postgres/AddConfigurableRuleCriteriaMigration.test.ts +3 -0
- package/Tests/Server/Infrastructure/Postgres/AddSloLabelAndOwnerRulesMigration.test.ts +407 -0
- package/Tests/Server/Infrastructure/Postgres/AddSloMonitorRuleMonitorTypeMigration.test.ts +171 -0
- package/Tests/Server/Infrastructure/Postgres/SloProductOverhaulMigration.test.ts +88 -4
- package/Tests/Server/Middleware/UserAuthorization.test.ts +37 -2
- package/Tests/Server/Middleware/UserAuthorizationEditionEnforcement.test.ts +516 -0
- package/Tests/Server/Services/AuditLogService.test.ts +460 -990
- package/Tests/Server/Services/CreateAndReadResponsesKeepIds.test.ts +263 -0
- package/Tests/Server/Services/DatabaseServiceRuleCriteriaValidation.test.ts +104 -0
- package/Tests/Server/Services/EnterpriseLicenseServiceKeyGeneration.test.ts +151 -0
- package/Tests/Server/Services/GlobalConfigServiceLicenseColumns.test.ts +357 -0
- package/Tests/Server/Services/MonitorDestinationInfoIPv6.test.ts +101 -0
- package/Tests/Server/Services/MonitorProbeServiceIntervalScheduling.test.ts +333 -0
- package/Tests/Server/Services/MonitorStatusTimelineDailyAggregates.test.ts +303 -0
- package/Tests/Server/Services/ProjectServiceAuditLogLicense.test.ts +701 -0
- package/Tests/Server/Services/ProjectServiceAuditLogSettingsCache.test.ts +31 -35
- package/Tests/Server/Services/RuleRun/LabelRuleEnginesGroupBRun.test.ts +48 -1
- package/Tests/Server/Services/RuleRun/OwnerRuleEnginesGroupBRun.test.ts +30 -0
- package/Tests/Server/Services/ScimPushGroupsTeamLocksEdition.test.ts +431 -0
- package/Tests/Server/Services/ServiceLevelObjectiveLabelAndOwnerRuleEngines.test.ts +1170 -0
- package/Tests/Server/Services/ServiceLevelObjectiveLabelAndOwnerRuleServices.test.ts +172 -0
- package/Tests/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.test.ts +323 -0
- package/Tests/Server/Services/ServiceLevelObjectiveMonitorRuleService.test.ts +115 -0
- package/Tests/Server/Services/ServiceLevelObjectiveMonitorRuleTriggers.test.ts +21 -2
- package/Tests/Server/Services/ServiceLevelObjectiveMonitorTypePostgres.test.ts +480 -0
- package/Tests/Server/Services/ServiceLevelObjectiveService.test.ts +162 -0
- package/Tests/Server/Services/SsoRequirementReadMasking.test.ts +419 -0
- package/Tests/Server/Services/SsoRequirementWriteGuard.test.ts +769 -0
- package/Tests/Server/Services/StaticRuleCriteriaRuntimeCoverage.test.ts +45 -6
- package/Tests/Server/Services/StatusPagePrivateUserInvitationPolicy.test.ts +94 -0
- package/Tests/Server/Services/UserAuthenticationService.test.ts +35 -0
- package/Tests/Server/Services/UserServiceSeatLimit.test.ts +94 -56
- package/Tests/Server/Types/Database/FeedEventTypeFilterQuery.test.ts +745 -0
- package/Tests/Server/Types/Database/Permissions/EditionPermission.test.ts +1823 -0
- package/Tests/Server/Types/Markdown.test.ts +183 -1
- package/Tests/Server/Types/Workflow/Components/ApiComponentSsrf.test.ts +49 -0
- package/Tests/Server/Types/Workflow/Components/TelegramSendMessageToChat.test.ts +331 -0
- package/Tests/Server/Utils/AI/SloTools.test.ts +10 -0
- package/Tests/Server/Utils/CommunityEditionSsoReport.test.ts +565 -0
- package/Tests/Server/Utils/EditionEnforcement.test.ts +303 -0
- package/Tests/Server/Utils/FrontendEnvironment.test.ts +367 -0
- package/Tests/Server/Utils/InstanceHealth/RedisHealth.test.ts +38 -418
- package/Tests/Server/Utils/Monitor/AffectedResourceList.test.ts +518 -0
- package/Tests/Server/Utils/Monitor/Criteria/EvaluateOverTime.test.ts +24 -4
- package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteriaAnomalyUnits.test.ts +1 -1
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +1339 -96
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorBreachingSamples.test.ts +1101 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorMetricUnits.test.ts +106 -80
- package/Tests/Server/Utils/Monitor/MonitoringIntervalValidator.test.ts +188 -0
- package/Tests/Server/Utils/Monitor/RootCauseList.test.ts +252 -0
- package/Tests/Server/Utils/Rules/RuleRun/RuleRunPermission.test.ts +154 -0
- package/Tests/Server/Utils/SSRFProtection.test.ts +111 -0
- package/Tests/Server/Utils/Slo/SloRulePatternValidator.test.ts +67 -0
- package/Tests/Server/Utils/VM/VMRunnerSsrf.test.ts +213 -0
- package/Tests/Server/Utils/Workspace/Slack/SlackMarkdownSectionSplit.test.ts +1209 -0
- package/Tests/Types/API/HostnameFromAuthority.test.ts +20 -10
- package/Tests/Types/API/HostnameIPv6.test.ts +149 -0
- package/Tests/Types/API/Route.test.ts +56 -0
- package/Tests/Types/API/URLSchemeLikePath.test.ts +304 -0
- package/Tests/Types/Database/CanonicalModelInstance.test.ts +190 -0
- package/Tests/UI/Components/EditionLabelLapseCopy.ts +104 -0
- package/Tests/UI/Components/EditionLabelLicenseManagerWiring.test.tsx +254 -0
- package/Tests/UI/Components/EditionLabelLicenseRefresh.test.tsx +84 -178
- package/Tests/UI/Components/EditionLabelLicenseStatus.test.tsx +1586 -0
- package/Tests/UI/Components/EditionLabelLicenseWritesGuard.test.tsx +157 -0
- package/Tests/UI/Components/FeedOptions.test.ts +1404 -0
- package/Tests/UI/Components/FeedOptionsButton.test.tsx +2603 -0
- package/Tests/UI/Components/Graphs/DayUptimeGraph.test.tsx +49 -2
- package/Tests/UI/Components/Icon.test.tsx +26 -0
- package/Tests/UI/Components/MarkdownConverters.test.ts +684 -0
- package/Tests/UI/Components/ModelListEmptyState.test.tsx +289 -0
- package/Tests/UI/Components/RuleCriteria/RuleCriteriaModelTable.test.tsx +3 -3
- package/Tests/UI/Components/TelemetryViewer/TelemetryViewerEmptyContent.test.tsx +131 -0
- package/Tests/UI/Components/useFeedItemsViewKey.test.tsx +1017 -0
- package/Tests/UI/Components/useFeedOptions.test.tsx +1107 -0
- package/Tests/UI/EsbuildEnterpriseAlias.test.ts +1127 -0
- package/Tests/Utils/HostAddressUtil.test.ts +138 -0
- package/Tests/Utils/LabelRuleImportExport.test.ts +102 -0
- package/Tests/Utils/Monitor/MonitorDestinationUtil.test.ts +313 -0
- package/Tests/Utils/Monitor/MonitoringIntervalUtil.test.ts +304 -0
- package/Tests/Utils/Slo/SloDuration.test.ts +115 -24
- package/Tests/Utils/Slo/SloHealth.test.ts +93 -10
- package/Tests/Utils/Slo/SloMonitorRuleCriteria.test.ts +109 -0
- package/Tests/Utils/Slo/SloOverviewText.test.ts +64 -0
- package/Tests/Utils/StatusPage/UptimeDailyAggregateUtil.test.ts +248 -0
- package/Types/API/Hostname.ts +63 -16
- package/Types/API/Route.ts +19 -2
- package/Types/API/URL.ts +26 -2
- package/Types/Database/AccessControl/ColumnAccessControl.ts +19 -7
- package/Types/Database/AccessControl/ColumnBillingAccessControl.ts +19 -7
- package/Types/Database/AccessControl/OwnerOnlyColumn.ts +15 -6
- package/Types/Database/CanonicalModelInstance.ts +102 -0
- package/Types/Database/TableColumn.ts +20 -6
- package/Types/EnterpriseLicense/EnterpriseLicensePeriods.ts +29 -0
- package/Types/IP/IPv6.ts +6 -1
- package/Types/Monitor/MetricMonitor/MetricCriteriaContext.ts +6 -5
- package/Types/Monitor/MetricMonitor/MetricMonitorResponse.ts +9 -0
- package/Types/Monitor/MonitorStep.ts +6 -1
- package/Types/Monitor/ProxmoxAlertTemplates.ts +1 -1
- package/Types/Permission.ts +90 -0
- package/Types/Rules/RuleCriteriaFieldRegistry.ts +11 -0
- package/Types/Rules/RuleRun.ts +4 -0
- package/Types/StatusPage/UptimeDailyAggregate.ts +110 -0
- package/UI/Components/EditionLabel/EditionLabel.tsx +796 -1195
- package/UI/Components/EditionLabel/LicenseManager.ts +119 -0
- package/UI/Components/Feed/FeedOptions.ts +427 -0
- package/UI/Components/Feed/FeedOptionsButton.tsx +692 -0
- package/UI/Components/Feed/useFeedItems.ts +28 -9
- package/UI/Components/Feed/useFeedOptions.ts +225 -0
- package/UI/Components/Graphs/DayUptimeGraph.tsx +123 -15
- package/UI/Components/Icon/Icon.tsx +1 -1
- package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
- package/UI/Components/ModelList/ModelList.tsx +11 -1
- package/UI/Components/MonitorGraphs/Uptime.tsx +69 -0
- package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +28 -12
- package/UI/esbuild-enterprise.js +263 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseUsage.ts +7 -2
- package/Utils/HostAddressUtil.ts +94 -0
- package/Utils/LabelRuleImportExport.ts +27 -9
- package/Utils/Monitor/MetricValueFormatter.ts +2 -2
- package/Utils/Monitor/MonitorDestinationUtil.ts +157 -0
- package/Utils/Monitor/MonitoringIntervalUtil.ts +436 -0
- package/Utils/Rules/MonitorTypeRuleCriteria.ts +31 -0
- package/Utils/Slo/SloDuration.ts +22 -6
- package/Utils/Slo/SloHealth.ts +8 -7
- package/Utils/Slo/SloMonitorRuleCriteria.ts +33 -1
- package/Utils/Slo/SloOverviewText.ts +33 -0
- package/Utils/Slo/SloProjection.ts +4 -3
- package/Utils/StatusPage/UptimeDailyAggregateUtil.ts +192 -0
- package/build/dist/Models/AnalyticsModels/AuditLog.js +23 -15
- package/build/dist/Models/AnalyticsModels/AuditLog.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalConfig.js +25 -0
- package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +4 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Monitor.js +2 -2
- package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorTemplate.js +2 -1
- package/build/dist/Models/DatabaseModels/MonitorTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveFeed.js +2 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveFeed.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveLabelRule.js +530 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveLabelRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveMonitorRule.js +39 -4
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveMonitorRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerRule.js +612 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerRule.js.map +1 -0
- package/build/dist/Server/API/BaseAPI.js +26 -5
- package/build/dist/Server/API/BaseAPI.js.map +1 -1
- package/build/dist/Server/API/GlobalConfigAPI.js +148 -344
- package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
- package/build/dist/Server/API/ProjectOIDC.js +24 -16
- package/build/dist/Server/API/ProjectOIDC.js.map +1 -1
- package/build/dist/Server/API/ProjectSSO.js +24 -16
- package/build/dist/Server/API/ProjectSSO.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +93 -43
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/API/TeamMemberAPI.js +8 -1
- package/build/dist/Server/API/TeamMemberAPI.js.map +1 -1
- package/build/dist/Server/Enterprise/EnterpriseEdition.js +466 -0
- package/build/dist/Server/Enterprise/EnterpriseEdition.js.map +1 -0
- package/build/dist/Server/Enterprise/EnterpriseFeature.js +39 -0
- package/build/dist/Server/Enterprise/EnterpriseFeature.js.map +1 -0
- package/build/dist/Server/Enterprise/EnterpriseLicenseSnapshot.js +70 -0
- package/build/dist/Server/Enterprise/EnterpriseLicenseSnapshot.js.map +1 -0
- package/build/dist/Server/Enterprise/EnterpriseServerModule.js +84 -0
- package/build/dist/Server/Enterprise/EnterpriseServerModule.js.map +1 -0
- package/build/dist/Server/EnvironmentConfig.js +84 -2
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793900000000-AddEnterpriseEditionFirstSeenAt.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793900000000-AddEnterpriseEditionFirstSeenAt.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794100000000-AddSloLabelAndOwnerRules.js +93 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794100000000-AddSloLabelAndOwnerRules.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794200000000-AddSloMonitorRuleMonitorType.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794200000000-AddSloMonitorRuleMonitorType.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/UserAuthorization.js +30 -11
- package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
- package/build/dist/Server/Services/AuditLogService.js +71 -740
- package/build/dist/Server/Services/AuditLogService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +7 -0
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/EnterpriseLicenseService.js +34 -0
- package/build/dist/Server/Services/EnterpriseLicenseService.js.map +1 -1
- package/build/dist/Server/Services/GlobalConfigService.js +63 -0
- package/build/dist/Server/Services/GlobalConfigService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +4 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/MonitorProbeService.js +90 -17
- package/build/dist/Server/Services/MonitorProbeService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +48 -6
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorStatusTimelineService.js +242 -0
- package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorTemplateService.js +16 -0
- package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +214 -0
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/RumSessionPinService.js +24 -6
- package/build/dist/Server/Services/RumSessionPinService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveLabelRuleEngineService.js +295 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveLabelRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveLabelRuleService.js +56 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveLabelRuleService.js.map +1 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.js +59 -14
- package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleService.js +22 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveOwnerRuleEngineService.js +400 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveOwnerRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveOwnerRuleService.js +56 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveOwnerRuleService.js.map +1 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveService.js +21 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveService.js.map +1 -1
- package/build/dist/Server/Services/StatusPagePrivateUserService.js +7 -3
- package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageService.js +71 -0
- package/build/dist/Server/Services/StatusPageService.js.map +1 -1
- package/build/dist/Server/Services/TeamMemberService.js +10 -0
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/TeamService.js +9 -0
- package/build/dist/Server/Services/TeamService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +10 -16
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/CreatePermission.js +10 -0
- package/build/dist/Server/Types/Database/Permissions/CreatePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/EditionPermission.js +154 -14
- package/build/dist/Server/Types/Database/Permissions/EditionPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/TablePermission.js +10 -3
- package/build/dist/Server/Types/Database/Permissions/TablePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js +17 -0
- package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js.map +1 -1
- package/build/dist/Server/Types/Markdown.js +31 -0
- package/build/dist/Server/Types/Markdown.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/Telegram/SendMessageToChat.js +20 -1
- package/build/dist/Server/Types/Workflow/Components/Telegram/SendMessageToChat.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/SloTools.js +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/SloTools.js.map +1 -1
- package/build/dist/Server/Utils/CommunityEditionSsoReport.js +223 -0
- package/build/dist/Server/Utils/CommunityEditionSsoReport.js.map +1 -0
- package/build/dist/Server/Utils/EditionEnforcement.js +187 -0
- package/build/dist/Server/Utils/EditionEnforcement.js.map +1 -0
- package/build/dist/Server/Utils/FrontendEnvironment.js +31 -2
- package/build/dist/Server/Utils/FrontendEnvironment.js.map +1 -1
- package/build/dist/Server/Utils/InstanceHealth/RedisHealth.js +6 -193
- package/build/dist/Server/Utils/InstanceHealth/RedisHealth.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/AffectedResourceList.js +67 -0
- package/build/dist/Server/Utils/Monitor/AffectedResourceList.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +8 -1
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +585 -367
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitoringIntervalValidator.js +88 -0
- package/build/dist/Server/Utils/Monitor/MonitoringIntervalValidator.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/RootCauseList.js +101 -0
- package/build/dist/Server/Utils/Monitor/RootCauseList.js.map +1 -0
- package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js +28 -0
- package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js.map +1 -1
- package/build/dist/Server/Utils/Slo/SloRulePatternValidator.js +28 -0
- package/build/dist/Server/Utils/Slo/SloRulePatternValidator.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js +331 -11
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
- package/build/dist/Types/API/Hostname.js +59 -11
- package/build/dist/Types/API/Hostname.js.map +1 -1
- package/build/dist/Types/API/Route.js +18 -2
- package/build/dist/Types/API/Route.js.map +1 -1
- package/build/dist/Types/API/URL.js +23 -2
- package/build/dist/Types/API/URL.js.map +1 -1
- package/build/dist/Types/Database/AccessControl/ColumnAccessControl.js +19 -7
- package/build/dist/Types/Database/AccessControl/ColumnAccessControl.js.map +1 -1
- package/build/dist/Types/Database/AccessControl/ColumnBillingAccessControl.js +19 -7
- package/build/dist/Types/Database/AccessControl/ColumnBillingAccessControl.js.map +1 -1
- package/build/dist/Types/Database/AccessControl/OwnerOnlyColumn.js +13 -6
- package/build/dist/Types/Database/AccessControl/OwnerOnlyColumn.js.map +1 -1
- package/build/dist/Types/Database/CanonicalModelInstance.js +88 -0
- package/build/dist/Types/Database/CanonicalModelInstance.js.map +1 -0
- package/build/dist/Types/Database/TableColumn.js +19 -6
- package/build/dist/Types/Database/TableColumn.js.map +1 -1
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicensePeriods.js +28 -0
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicensePeriods.js.map +1 -0
- package/build/dist/Types/IP/IPv6.js +6 -1
- package/build/dist/Types/IP/IPv6.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +5 -0
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js +1 -1
- package/build/dist/Types/Permission.js +84 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js +11 -0
- package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js.map +1 -1
- package/build/dist/Types/Rules/RuleRun.js +4 -0
- package/build/dist/Types/Rules/RuleRun.js.map +1 -1
- package/build/dist/Types/StatusPage/UptimeDailyAggregate.js +32 -0
- package/build/dist/Types/StatusPage/UptimeDailyAggregate.js.map +1 -0
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js +414 -585
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/LicenseManager.js +2 -0
- package/build/dist/UI/Components/EditionLabel/LicenseManager.js.map +1 -0
- package/build/dist/UI/Components/Feed/FeedOptions.js +235 -0
- package/build/dist/UI/Components/Feed/FeedOptions.js.map +1 -0
- package/build/dist/UI/Components/Feed/FeedOptionsButton.js +346 -0
- package/build/dist/UI/Components/Feed/FeedOptionsButton.js.map +1 -0
- package/build/dist/UI/Components/Feed/useFeedItems.js +17 -7
- package/build/dist/UI/Components/Feed/useFeedItems.js.map +1 -1
- package/build/dist/UI/Components/Feed/useFeedOptions.js +130 -0
- package/build/dist/UI/Components/Feed/useFeedOptions.js.map +1 -0
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js +90 -17
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js.map +1 -1
- package/build/dist/UI/Components/Icon/Icon.js +1 -1
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
- package/build/dist/UI/Components/ModelList/ModelList.js +4 -1
- package/build/dist/UI/Components/ModelList/ModelList.js.map +1 -1
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js +42 -1
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +2 -2
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js +6 -2
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js.map +1 -1
- package/build/dist/Utils/HostAddressUtil.js +80 -0
- package/build/dist/Utils/HostAddressUtil.js.map +1 -0
- package/build/dist/Utils/LabelRuleImportExport.js +22 -6
- package/build/dist/Utils/LabelRuleImportExport.js.map +1 -1
- package/build/dist/Utils/Monitor/MetricValueFormatter.js +2 -2
- package/build/dist/Utils/Monitor/MonitorDestinationUtil.js +127 -0
- package/build/dist/Utils/Monitor/MonitorDestinationUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitoringIntervalUtil.js +374 -0
- package/build/dist/Utils/Monitor/MonitoringIntervalUtil.js.map +1 -0
- package/build/dist/Utils/Rules/MonitorTypeRuleCriteria.js +18 -0
- package/build/dist/Utils/Rules/MonitorTypeRuleCriteria.js.map +1 -0
- package/build/dist/Utils/Slo/SloDuration.js +13 -5
- package/build/dist/Utils/Slo/SloDuration.js.map +1 -1
- package/build/dist/Utils/Slo/SloHealth.js +8 -7
- package/build/dist/Utils/Slo/SloHealth.js.map +1 -1
- package/build/dist/Utils/Slo/SloMonitorRuleCriteria.js +16 -1
- package/build/dist/Utils/Slo/SloMonitorRuleCriteria.js.map +1 -1
- package/build/dist/Utils/Slo/SloOverviewText.js +16 -0
- package/build/dist/Utils/Slo/SloOverviewText.js.map +1 -1
- package/build/dist/Utils/Slo/SloProjection.js.map +1 -1
- package/build/dist/Utils/StatusPage/UptimeDailyAggregateUtil.js +148 -0
- package/build/dist/Utils/StatusPage/UptimeDailyAggregateUtil.js.map +1 -0
- package/jest.config.json +3 -1
- package/package.json +1 -1
- package/test-setup.sh +103 -34
- package/tsconfig.json +13 -0
- package/Server/API/EnterpriseLicenseAPI.ts +0 -925
- package/Server/API/TeamComplianceAPI.ts +0 -158
- package/Server/Middleware/SCIMAuthorization.ts +0 -141
- package/Server/Services/TeamComplianceService.ts +0 -733
- package/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.ts +0 -186
- package/Server/Utils/InstanceHealth/PostgresHealth.ts +0 -286
- package/Tests/App/AdminDashboard/EnterpriseLicenseInstanceActivity.test.tsx +0 -451
- package/Tests/App/Dashboard/AuditLogsTable.test.tsx +0 -598
- package/Tests/App/Dashboard/SecurityEventsExplorer.test.tsx +0 -761
- package/Tests/App/Dashboard/SecurityEventsSideMenu.test.tsx +0 -247
- package/Tests/App/Dashboard/SecurityEventsTableColumns.test.tsx +0 -382
- package/Tests/App/Dashboard/SecurityEventsVolumeChart.test.tsx +0 -321
- package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +0 -1851
- package/Tests/Server/Middleware/SCIMAuthorization.test.ts +0 -525
- package/Tests/Server/Services/TeamComplianceServiceBehaviour.test.ts +0 -1845
- package/Tests/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.test.ts +0 -495
- package/Tests/Server/Utils/InstanceHealth/PostgresHealth.test.ts +0 -337
- package/Tests/Utils/EnterpriseLicenseSeats.test.ts +0 -576
- package/Tests/Utils/EnterpriseLicenseSync.test.ts +0 -568
- package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +0 -287
- package/Utils/EnterpriseLicense/EnterpriseLicenseSync.ts +0 -244
- package/build/dist/Server/API/EnterpriseLicenseAPI.js +0 -646
- package/build/dist/Server/API/EnterpriseLicenseAPI.js.map +0 -1
- package/build/dist/Server/API/TeamComplianceAPI.js +0 -111
- package/build/dist/Server/API/TeamComplianceAPI.js.map +0 -1
- package/build/dist/Server/Middleware/SCIMAuthorization.js +0 -124
- package/build/dist/Server/Middleware/SCIMAuthorization.js.map +0 -1
- package/build/dist/Server/Services/TeamComplianceService.js +0 -537
- package/build/dist/Server/Services/TeamComplianceService.js.map +0 -1
- package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js +0 -145
- package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js.map +0 -1
- package/build/dist/Server/Utils/InstanceHealth/PostgresHealth.js +0 -194
- package/build/dist/Server/Utils/InstanceHealth/PostgresHealth.js.map +0 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +0 -168
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +0 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSync.js +0 -174
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSync.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TeamMemberAPI.js","sourceRoot":"","sources":["../../../../Server/API/TeamMemberAPI.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,cAAc,MAAM,iCAAiC,CAAC;AAC7D,OAAO,kBAAkB,MAAM,gCAAgC,CAAC;AAChE,OAAO,iBAEN,MAAM,+BAA+B,CAAC;AACvC,OAAO,WAAW,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"TeamMemberAPI.js","sourceRoot":"","sources":["../../../../Server/API/TeamMemberAPI.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,466 @@
|
|
|
1
|
+
import EnterpriseFeature from "./EnterpriseFeature";
|
|
2
|
+
import { ENTERPRISE_LICENSE_TRIAL_PERIOD_IN_DAYS, EnterpriseLicenseSnapshotUtil, } from "./EnterpriseLicenseSnapshot";
|
|
3
|
+
/*
|
|
4
|
+
* EnvironmentConfig never imports anything under Server/Enterprise, so this
|
|
5
|
+
* import cannot form a cycle. IsBillingEnabled is only ever read inside a
|
|
6
|
+
* function body: the compiled CommonJS reads the live module binding at call
|
|
7
|
+
* time, which is what lets a test pin billing by mocking EnvironmentConfig.
|
|
8
|
+
*/
|
|
9
|
+
import { IsBillingEnabled } from "../EnvironmentConfig";
|
|
10
|
+
import logger from "../Utils/Logger";
|
|
11
|
+
import PaymentRequiredException from "../../Types/Exception/PaymentRequiredException";
|
|
12
|
+
/*
|
|
13
|
+
* Which enterprise feature each enterprise configuration model belongs to,
|
|
14
|
+
* keyed by table name. Kept here so the model files themselves stay unchanged;
|
|
15
|
+
* a model marked requiresEnterprise that is missing from this map is caught by
|
|
16
|
+
* the facade's test.
|
|
17
|
+
*/
|
|
18
|
+
const ENTERPRISE_FEATURE_BY_TABLE_NAME = new Map([
|
|
19
|
+
["GlobalSSO", EnterpriseFeature.SSO],
|
|
20
|
+
["GlobalOIDC", EnterpriseFeature.SSO],
|
|
21
|
+
["GlobalSSOProject", EnterpriseFeature.SSO],
|
|
22
|
+
["GlobalOIDCProject", EnterpriseFeature.SSO],
|
|
23
|
+
["ProjectSSO", EnterpriseFeature.SSO],
|
|
24
|
+
["ProjectOIDC", EnterpriseFeature.SSO],
|
|
25
|
+
["StatusPageSSO", EnterpriseFeature.SSO],
|
|
26
|
+
["StatusPageOIDC", EnterpriseFeature.SSO],
|
|
27
|
+
["ProjectSCIM", EnterpriseFeature.SCIM],
|
|
28
|
+
["StatusPageSCIM", EnterpriseFeature.SCIM],
|
|
29
|
+
["TeamComplianceSetting", EnterpriseFeature.TeamCompliance],
|
|
30
|
+
]);
|
|
31
|
+
/*
|
|
32
|
+
* The features whose RUNTIME behaviour stops when a self-hosted license
|
|
33
|
+
* lapses (see isFeatureActive), in the order the lapse log names them.
|
|
34
|
+
*/
|
|
35
|
+
export const RUNTIME_ENTERPRISE_FEATURES = [
|
|
36
|
+
EnterpriseFeature.SSO,
|
|
37
|
+
EnterpriseFeature.SCIM,
|
|
38
|
+
EnterpriseFeature.AuditLogs,
|
|
39
|
+
];
|
|
40
|
+
// How the lapse log names each feature.
|
|
41
|
+
const FEATURE_NAMES = new Map([
|
|
42
|
+
[EnterpriseFeature.SSO, "single sign-on (SSO)"],
|
|
43
|
+
[EnterpriseFeature.SCIM, "SCIM provisioning"],
|
|
44
|
+
[EnterpriseFeature.AuditLogs, "audit logging"],
|
|
45
|
+
[EnterpriseFeature.TeamCompliance, "team compliance"],
|
|
46
|
+
[EnterpriseFeature.InstanceHealth, "the OneUptime Health dashboards"],
|
|
47
|
+
]);
|
|
48
|
+
/*
|
|
49
|
+
* The one place core asks "which edition is this, and what may it do?".
|
|
50
|
+
*
|
|
51
|
+
* Three questions, on purpose:
|
|
52
|
+
*
|
|
53
|
+
* isLoaded() the ee code is present in this process, whatever the
|
|
54
|
+
* license says. Decides which enterprise routers and
|
|
55
|
+
* jobs exist and which edition operators are told they
|
|
56
|
+
* run.
|
|
57
|
+
* isFeatureActive() the ee code is present AND the feature is licensed
|
|
58
|
+
* right now. Governs RUNTIME behaviour: SSO sign-in
|
|
59
|
+
* and "Require SSO for login" enforcement, SCIM
|
|
60
|
+
* provisioning and its team locks, audit-log
|
|
61
|
+
* recording. When a self-hosted license lapses these
|
|
62
|
+
* stop, exactly as on the Community Edition, and they
|
|
63
|
+
* resume without a restart when a license is
|
|
64
|
+
* activated. An UNKNOWN license state counts as
|
|
65
|
+
* active (see isFeatureActive).
|
|
66
|
+
* isFeatureAvailable() the license, failing closed. Governs creating and
|
|
67
|
+
* updating enterprise configuration, the enterprise
|
|
68
|
+
* admin Health dashboards and the query console.
|
|
69
|
+
*
|
|
70
|
+
* "Lapsed" means what isFeatureAvailableSync treats as unavailable with
|
|
71
|
+
* billing off: no license after the trial
|
|
72
|
+
* (ENTERPRISE_LICENSE_TRIAL_PERIOD_IN_DAYS, counted from
|
|
73
|
+
* GlobalConfig.enterpriseEditionFirstSeenAt), a license that expired more
|
|
74
|
+
* than the grace period (ENTERPRISE_LICENSE_GRACE_PERIOD_IN_DAYS, counted
|
|
75
|
+
* from its expiry) ago, an invalid license, or a license whose
|
|
76
|
+
* feature list leaves the feature out. During the trial and the grace period
|
|
77
|
+
* nothing stops. With billing on (OneUptime Cloud) both license questions
|
|
78
|
+
* answer yes whenever ee is loaded: plan tiers gate the features there.
|
|
79
|
+
*/
|
|
80
|
+
class EnterpriseEdition {
|
|
81
|
+
static register(enterpriseModule) {
|
|
82
|
+
if (!enterpriseModule) {
|
|
83
|
+
throw new Error("EnterpriseEdition.register needs a module.");
|
|
84
|
+
}
|
|
85
|
+
if (EnterpriseEdition.module) {
|
|
86
|
+
throw new Error("An enterprise module is already registered. The enterprise module is loaded once per process.");
|
|
87
|
+
}
|
|
88
|
+
EnterpriseEdition.module = enterpriseModule;
|
|
89
|
+
}
|
|
90
|
+
static isLoaded() {
|
|
91
|
+
return EnterpriseEdition.module !== null;
|
|
92
|
+
}
|
|
93
|
+
static getModule() {
|
|
94
|
+
return EnterpriseEdition.module;
|
|
95
|
+
}
|
|
96
|
+
/*
|
|
97
|
+
* Test suites only: forget the registered module, the feature states seen so
|
|
98
|
+
* far, the one-time warnings and the listeners, so the next test starts on
|
|
99
|
+
* a fresh Community Edition process.
|
|
100
|
+
*/
|
|
101
|
+
static resetForTests() {
|
|
102
|
+
EnterpriseEdition.module = null;
|
|
103
|
+
EnterpriseEdition.lastKnownFeatureState.clear();
|
|
104
|
+
EnterpriseEdition.hasWarnedAboutUnreadLicense = false;
|
|
105
|
+
EnterpriseEdition.hasWarnedAboutUnreadableLicense = false;
|
|
106
|
+
EnterpriseEdition.hasWarnedAboutUnknownTrialStart = false;
|
|
107
|
+
EnterpriseEdition.featureStateListeners = [];
|
|
108
|
+
}
|
|
109
|
+
/*
|
|
110
|
+
* Whether the feature's runtime behaviour runs right now: SSO sign-in and
|
|
111
|
+
* "Require SSO for login" enforcement (SSO), SCIM provisioning and its team
|
|
112
|
+
* locks (SCIM), audit-log recording (AuditLogs). Synchronous, because it is
|
|
113
|
+
* asked on every request that could need it; the license changes at runtime
|
|
114
|
+
* and routers are mounted once, so callers ask per request.
|
|
115
|
+
*
|
|
116
|
+
* no enterprise module false (the Community Edition)
|
|
117
|
+
* billing on true (OneUptime Cloud: plan tiers gate)
|
|
118
|
+
* license state UNKNOWN true: the first snapshot has not loaded yet,
|
|
119
|
+
* reading the cached one threw, or it says no
|
|
120
|
+
* license is installed but not when the trial
|
|
121
|
+
* started (the first-run stamp could not be
|
|
122
|
+
* read or written yet, so whether the trial
|
|
123
|
+
* is over is not known; see
|
|
124
|
+
* EnterpriseLicenseSnapshotUtil.isTrialStartUnknown).
|
|
125
|
+
* An unknown state must never lock anyone out
|
|
126
|
+
* or switch SSO enforcement off. The loader
|
|
127
|
+
* waits (bounded) for the first snapshot
|
|
128
|
+
* before any router is mounted, so the window
|
|
129
|
+
* is small. Warned about once per process.
|
|
130
|
+
* otherwise the license entitles the feature (valid or
|
|
131
|
+
* grace, feature included)
|
|
132
|
+
*
|
|
133
|
+
* A change of answer from a known state is logged once per change (a
|
|
134
|
+
* warning when features stop, info when they resume) and reported to the
|
|
135
|
+
* onFeatureStateChange listeners.
|
|
136
|
+
*/
|
|
137
|
+
static isFeatureActive(feature) {
|
|
138
|
+
const enterpriseModule = EnterpriseEdition.module;
|
|
139
|
+
if (!enterpriseModule) {
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
if (IsBillingEnabled) {
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
145
|
+
let snapshot = null;
|
|
146
|
+
try {
|
|
147
|
+
snapshot = enterpriseModule.licensing.getCachedSnapshot();
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
if (!EnterpriseEdition.hasWarnedAboutUnreadableLicense) {
|
|
151
|
+
EnterpriseEdition.hasWarnedAboutUnreadableLicense = true;
|
|
152
|
+
logger.warn("EnterpriseEdition: could not read the cached license snapshot. Until it can be read, SSO, SCIM and audit logging keep running as if licensed. This warning is logged once per process.");
|
|
153
|
+
logger.warn(err);
|
|
154
|
+
}
|
|
155
|
+
return true;
|
|
156
|
+
}
|
|
157
|
+
if (!snapshot) {
|
|
158
|
+
if (!EnterpriseEdition.hasWarnedAboutUnreadLicense) {
|
|
159
|
+
EnterpriseEdition.hasWarnedAboutUnreadLicense = true;
|
|
160
|
+
logger.warn("EnterpriseEdition: the license has not been read yet. Until it is, SSO, SCIM and audit logging keep running as if licensed. This warning is logged once per process.");
|
|
161
|
+
}
|
|
162
|
+
return true;
|
|
163
|
+
}
|
|
164
|
+
if (EnterpriseLicenseSnapshotUtil.isTrialStartUnknown(snapshot)) {
|
|
165
|
+
if (!EnterpriseEdition.hasWarnedAboutUnknownTrialStart) {
|
|
166
|
+
EnterpriseEdition.hasWarnedAboutUnknownTrialStart = true;
|
|
167
|
+
logger.warn(
|
|
168
|
+
/*
|
|
169
|
+
* Reachable both with no license at all and WITH one installed: a
|
|
170
|
+
* license whose expiry was never recorded falls back to this same
|
|
171
|
+
* trial (LicenseToken's classifyUnverifiedWithoutExpiry), so this
|
|
172
|
+
* must not assert that nothing is installed.
|
|
173
|
+
*/
|
|
174
|
+
`EnterpriseEdition: there is no license this installation can date, and the start of the ${ENTERPRISE_LICENSE_TRIAL_PERIOD_IN_DAYS}-day trial has not been recorded yet, so it is not known whether the trial is over. Until it is recorded, SSO, SCIM and audit logging keep running as if licensed. This warning is logged once per process.`);
|
|
175
|
+
}
|
|
176
|
+
return true;
|
|
177
|
+
}
|
|
178
|
+
const isActive = EnterpriseLicenseSnapshotUtil.entitles(snapshot, feature);
|
|
179
|
+
if (EnterpriseEdition.getLastKnownFeatureState(feature) !== isActive) {
|
|
180
|
+
EnterpriseEdition.recordFeatureStateChange(snapshot, feature);
|
|
181
|
+
}
|
|
182
|
+
return isActive;
|
|
183
|
+
}
|
|
184
|
+
/*
|
|
185
|
+
* Registers a listener for changes in which features are active (see
|
|
186
|
+
* isFeatureActive). Called synchronously, from inside isFeatureActive, once
|
|
187
|
+
* per change; a listener that throws is logged and never breaks the caller.
|
|
188
|
+
* Returns a function that removes the listener.
|
|
189
|
+
*/
|
|
190
|
+
static onFeatureStateChange(listener) {
|
|
191
|
+
EnterpriseEdition.featureStateListeners.push(listener);
|
|
192
|
+
return () => {
|
|
193
|
+
EnterpriseEdition.featureStateListeners =
|
|
194
|
+
EnterpriseEdition.featureStateListeners.filter((registered) => {
|
|
195
|
+
return registered !== listener;
|
|
196
|
+
});
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
/*
|
|
200
|
+
* Synchronous availability, for synchronous permission checks. Reads the
|
|
201
|
+
* module's cached snapshot; no snapshot yet, or any error, means false (fail
|
|
202
|
+
* closed: an enterprise configuration write is refused, never allowed by
|
|
203
|
+
* accident).
|
|
204
|
+
*/
|
|
205
|
+
static isFeatureAvailableSync(feature) {
|
|
206
|
+
const enterpriseModule = EnterpriseEdition.module;
|
|
207
|
+
if (!enterpriseModule) {
|
|
208
|
+
return false;
|
|
209
|
+
}
|
|
210
|
+
if (IsBillingEnabled) {
|
|
211
|
+
return true;
|
|
212
|
+
}
|
|
213
|
+
let snapshot = null;
|
|
214
|
+
try {
|
|
215
|
+
snapshot = enterpriseModule.licensing.getCachedSnapshot();
|
|
216
|
+
}
|
|
217
|
+
catch (err) {
|
|
218
|
+
logger.warn("EnterpriseEdition: could not read the cached license snapshot; treating the feature as unavailable.");
|
|
219
|
+
logger.warn(err);
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
return EnterpriseLicenseSnapshotUtil.entitles(snapshot, feature);
|
|
223
|
+
}
|
|
224
|
+
static async isFeatureAvailable(feature) {
|
|
225
|
+
const enterpriseModule = EnterpriseEdition.module;
|
|
226
|
+
if (!enterpriseModule) {
|
|
227
|
+
return false;
|
|
228
|
+
}
|
|
229
|
+
if (IsBillingEnabled) {
|
|
230
|
+
return true;
|
|
231
|
+
}
|
|
232
|
+
const snapshot = await EnterpriseEdition.getLicenseSnapshot();
|
|
233
|
+
return EnterpriseLicenseSnapshotUtil.entitles(snapshot, feature);
|
|
234
|
+
}
|
|
235
|
+
static assertFeatureAvailableSync(feature) {
|
|
236
|
+
if (EnterpriseEdition.isFeatureAvailableSync(feature)) {
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
throw EnterpriseEdition.createUnavailableException();
|
|
240
|
+
}
|
|
241
|
+
static async assertFeatureAvailable(feature) {
|
|
242
|
+
if (await EnterpriseEdition.isFeatureAvailable(feature)) {
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
throw EnterpriseEdition.createUnavailableException();
|
|
246
|
+
}
|
|
247
|
+
/*
|
|
248
|
+
* The license snapshot, or null on the Community Edition. A failed read falls
|
|
249
|
+
* back to the cached snapshot (the provider's last good one), then to null.
|
|
250
|
+
*/
|
|
251
|
+
static async getLicenseSnapshot() {
|
|
252
|
+
const enterpriseModule = EnterpriseEdition.module;
|
|
253
|
+
if (!enterpriseModule) {
|
|
254
|
+
return null;
|
|
255
|
+
}
|
|
256
|
+
try {
|
|
257
|
+
return await enterpriseModule.licensing.getSnapshot();
|
|
258
|
+
}
|
|
259
|
+
catch (err) {
|
|
260
|
+
logger.warn("EnterpriseEdition: could not load the license snapshot; falling back to the cached one.");
|
|
261
|
+
logger.warn(err);
|
|
262
|
+
}
|
|
263
|
+
try {
|
|
264
|
+
return enterpriseModule.licensing.getCachedSnapshot();
|
|
265
|
+
}
|
|
266
|
+
catch (err) {
|
|
267
|
+
logger.warn(err);
|
|
268
|
+
return null;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
// Seat usage for display, or null on the Community Edition or on error.
|
|
272
|
+
static async getSeatUsage() {
|
|
273
|
+
const enterpriseModule = EnterpriseEdition.module;
|
|
274
|
+
if (!enterpriseModule) {
|
|
275
|
+
return null;
|
|
276
|
+
}
|
|
277
|
+
try {
|
|
278
|
+
return await enterpriseModule.licensing.getSeatUsage();
|
|
279
|
+
}
|
|
280
|
+
catch (err) {
|
|
281
|
+
logger.warn("EnterpriseEdition: could not compute seat usage.");
|
|
282
|
+
logger.warn(err);
|
|
283
|
+
return null;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
/*
|
|
287
|
+
* Throws when the license has no seat left for one more user. The Community
|
|
288
|
+
* Edition has no seat limit, so this is a no-op there. Errors from the
|
|
289
|
+
* provider propagate: refusing the new user IS the provider's answer.
|
|
290
|
+
*/
|
|
291
|
+
static async assertSeatAvailableForNewUser() {
|
|
292
|
+
const enterpriseModule = EnterpriseEdition.module;
|
|
293
|
+
if (!enterpriseModule) {
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
await enterpriseModule.licensing.assertSeatAvailableForNewUser();
|
|
297
|
+
}
|
|
298
|
+
/*
|
|
299
|
+
* The ee audit-log recorder, or null when there is none (CE). Handed out
|
|
300
|
+
* whatever the license says: the recorder itself asks
|
|
301
|
+
* isFeatureActive(AuditLogs) before recording each entry, so recording
|
|
302
|
+
* stops while the license is lapsed and resumes when it is renewed.
|
|
303
|
+
*/
|
|
304
|
+
static getAuditLogRecorder() {
|
|
305
|
+
const enterpriseModule = EnterpriseEdition.module;
|
|
306
|
+
if (!enterpriseModule) {
|
|
307
|
+
return null;
|
|
308
|
+
}
|
|
309
|
+
try {
|
|
310
|
+
return enterpriseModule.getAuditLogRecorder();
|
|
311
|
+
}
|
|
312
|
+
catch (err) {
|
|
313
|
+
logger.error("EnterpriseEdition: the enterprise module failed to provide its audit log recorder.");
|
|
314
|
+
logger.error(err);
|
|
315
|
+
return null;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
static getModelFeature(modelType) {
|
|
319
|
+
let tableName = null;
|
|
320
|
+
try {
|
|
321
|
+
tableName = new modelType().tableName;
|
|
322
|
+
}
|
|
323
|
+
catch (err) {
|
|
324
|
+
logger.warn(err);
|
|
325
|
+
return null;
|
|
326
|
+
}
|
|
327
|
+
return EnterpriseEdition.getFeatureForTableName(tableName);
|
|
328
|
+
}
|
|
329
|
+
static getFeatureForTableName(tableName) {
|
|
330
|
+
if (!tableName) {
|
|
331
|
+
return null;
|
|
332
|
+
}
|
|
333
|
+
return ENTERPRISE_FEATURE_BY_TABLE_NAME.get(tableName) || null;
|
|
334
|
+
}
|
|
335
|
+
// Every table name the facade maps to a feature (for guard tests).
|
|
336
|
+
static getMappedTableNames() {
|
|
337
|
+
return Array.from(ENTERPRISE_FEATURE_BY_TABLE_NAME.keys());
|
|
338
|
+
}
|
|
339
|
+
// How the lapse log names a feature.
|
|
340
|
+
static getFeatureName(feature) {
|
|
341
|
+
return FEATURE_NAMES.get(feature) || feature;
|
|
342
|
+
}
|
|
343
|
+
/*
|
|
344
|
+
* The log line for features that stopped, or null when none did. Public so
|
|
345
|
+
* the wording can be tested without driving a lapse.
|
|
346
|
+
*/
|
|
347
|
+
static describeStoppedFeatures(stopped, snapshot) {
|
|
348
|
+
if (stopped.length === 0) {
|
|
349
|
+
return null;
|
|
350
|
+
}
|
|
351
|
+
const names = EnterpriseEdition.joinFeatureNames(stopped);
|
|
352
|
+
const verb = stopped.length === 1 ? "has" : "have";
|
|
353
|
+
const isUsable = EnterpriseLicenseSnapshotUtil.isUsable(snapshot);
|
|
354
|
+
const parts = [
|
|
355
|
+
isUsable
|
|
356
|
+
? `The OneUptime Enterprise license does not include ${names}: ${stopped.length === 1 ? "it" : "they"} ${verb} stopped until a license that includes ${stopped.length === 1 ? "it" : "them"} is activated.`
|
|
357
|
+
: `The OneUptime Enterprise license has lapsed (status: ${snapshot.status}): ${names} ${verb} stopped until a license is activated.`,
|
|
358
|
+
];
|
|
359
|
+
if (stopped.includes(EnterpriseFeature.SSO)) {
|
|
360
|
+
parts.push('"Require SSO for login" is not enforced meanwhile: users sign in with their password, and users who only ever signed in with SSO can reset their password.');
|
|
361
|
+
}
|
|
362
|
+
if (snapshot.message) {
|
|
363
|
+
parts.push(`License status: ${snapshot.message}`);
|
|
364
|
+
}
|
|
365
|
+
parts.push("A master admin can activate or renew the license from the edition label in the Admin Dashboard header.");
|
|
366
|
+
return parts.join(" ");
|
|
367
|
+
}
|
|
368
|
+
// The log line for features that resumed, or null when none did.
|
|
369
|
+
static describeResumedFeatures(resumed) {
|
|
370
|
+
if (resumed.length === 0) {
|
|
371
|
+
return null;
|
|
372
|
+
}
|
|
373
|
+
return `The OneUptime Enterprise license covers ${EnterpriseEdition.joinFeatureNames(resumed)} again: ${resumed.length === 1 ? "it has" : "they have"} resumed.`;
|
|
374
|
+
}
|
|
375
|
+
static getLastKnownFeatureState(feature) {
|
|
376
|
+
const known = EnterpriseEdition.lastKnownFeatureState.get(feature);
|
|
377
|
+
return known === undefined ? true : known;
|
|
378
|
+
}
|
|
379
|
+
/*
|
|
380
|
+
* Called only when `trigger` changed state. Re-reads every runtime feature
|
|
381
|
+
* from the same snapshot, so a lapse that stops several of them is logged
|
|
382
|
+
* as one line and the others are not reported again on their next check.
|
|
383
|
+
*/
|
|
384
|
+
static recordFeatureStateChange(snapshot, trigger) {
|
|
385
|
+
const features = [...RUNTIME_ENTERPRISE_FEATURES];
|
|
386
|
+
if (!features.includes(trigger)) {
|
|
387
|
+
features.push(trigger);
|
|
388
|
+
}
|
|
389
|
+
const stopped = [];
|
|
390
|
+
const resumed = [];
|
|
391
|
+
for (const feature of features) {
|
|
392
|
+
const wasActive = EnterpriseEdition.getLastKnownFeatureState(feature);
|
|
393
|
+
const isActive = EnterpriseLicenseSnapshotUtil.entitles(snapshot, feature);
|
|
394
|
+
EnterpriseEdition.lastKnownFeatureState.set(feature, isActive);
|
|
395
|
+
if (wasActive && !isActive) {
|
|
396
|
+
stopped.push(feature);
|
|
397
|
+
}
|
|
398
|
+
if (!wasActive && isActive) {
|
|
399
|
+
resumed.push(feature);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
try {
|
|
403
|
+
const stoppedMessage = EnterpriseEdition.describeStoppedFeatures(stopped, snapshot);
|
|
404
|
+
if (stoppedMessage) {
|
|
405
|
+
logger.warn(stoppedMessage);
|
|
406
|
+
}
|
|
407
|
+
const resumedMessage = EnterpriseEdition.describeResumedFeatures(resumed);
|
|
408
|
+
if (resumedMessage) {
|
|
409
|
+
logger.info(resumedMessage);
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
catch (_a) {
|
|
413
|
+
// Logging must never change the answer isFeatureActive gives.
|
|
414
|
+
}
|
|
415
|
+
const change = {
|
|
416
|
+
stopped,
|
|
417
|
+
resumed,
|
|
418
|
+
snapshot,
|
|
419
|
+
};
|
|
420
|
+
for (const listener of [...EnterpriseEdition.featureStateListeners]) {
|
|
421
|
+
try {
|
|
422
|
+
listener(change);
|
|
423
|
+
}
|
|
424
|
+
catch (err) {
|
|
425
|
+
logger.error("EnterpriseEdition: a listener for enterprise feature state changes failed.");
|
|
426
|
+
logger.error(err);
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
static joinFeatureNames(features) {
|
|
431
|
+
const names = features.map((feature) => {
|
|
432
|
+
return EnterpriseEdition.getFeatureName(feature);
|
|
433
|
+
});
|
|
434
|
+
if (names.length <= 1) {
|
|
435
|
+
return names.join("");
|
|
436
|
+
}
|
|
437
|
+
return `${names.slice(0, -1).join(", ")} and ${names[names.length - 1]}`;
|
|
438
|
+
}
|
|
439
|
+
static createUnavailableException() {
|
|
440
|
+
if (!EnterpriseEdition.isLoaded()) {
|
|
441
|
+
return new PaymentRequiredException(EnterpriseEdition.COMMUNITY_EDITION_MESSAGE);
|
|
442
|
+
}
|
|
443
|
+
return new PaymentRequiredException(EnterpriseEdition.LICENSE_REQUIRED_MESSAGE);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
EnterpriseEdition.COMMUNITY_EDITION_MESSAGE = "This is a OneUptime Enterprise Edition feature and is not available in the Community Edition. " +
|
|
447
|
+
"Run the OneUptime Enterprise Edition image to use it. " +
|
|
448
|
+
"See https://oneuptime.com/enterprise/overview for details.";
|
|
449
|
+
EnterpriseEdition.LICENSE_REQUIRED_MESSAGE = "This OneUptime Enterprise feature needs a valid Enterprise license that includes it. " +
|
|
450
|
+
"Enterprise configuration you already have is kept and can still be viewed or deleted, " +
|
|
451
|
+
"but it cannot be created or changed until a master admin adds or renews the license " +
|
|
452
|
+
"from the edition label in the Admin Dashboard header.";
|
|
453
|
+
EnterpriseEdition.module = null;
|
|
454
|
+
/*
|
|
455
|
+
* The last active/stopped answer isFeatureActive gave per feature, from a
|
|
456
|
+
* KNOWN license state. A feature never seen here counts as active: that is
|
|
457
|
+
* how the process starts (an unknown license state is active), so a license
|
|
458
|
+
* that is already lapsed at boot is reported like any other lapse.
|
|
459
|
+
*/
|
|
460
|
+
EnterpriseEdition.lastKnownFeatureState = new Map();
|
|
461
|
+
EnterpriseEdition.hasWarnedAboutUnreadLicense = false;
|
|
462
|
+
EnterpriseEdition.hasWarnedAboutUnreadableLicense = false;
|
|
463
|
+
EnterpriseEdition.hasWarnedAboutUnknownTrialStart = false;
|
|
464
|
+
EnterpriseEdition.featureStateListeners = [];
|
|
465
|
+
export default EnterpriseEdition;
|
|
466
|
+
//# sourceMappingURL=EnterpriseEdition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnterpriseEdition.js","sourceRoot":"","sources":["../../../../Server/Enterprise/EnterpriseEdition.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACL,uCAAuC,EAEvC,6BAA6B,GAE9B,MAAM,6BAA6B,CAAC;AAIrC;;;;;GAKG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAErC,OAAO,wBAAwB,MAAM,gDAAgD,CAAC;AAEtF;;;;;GAKG;AACH,MAAM,gCAAgC,GACpC,IAAI,GAAG,CAA4B;IACjC,CAAC,WAAW,EAAE,iBAAiB,CAAC,GAAG,CAAC;IACpC,CAAC,YAAY,EAAE,iBAAiB,CAAC,GAAG,CAAC;IACrC,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,GAAG,CAAC;IAC3C,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,GAAG,CAAC;IAC5C,CAAC,YAAY,EAAE,iBAAiB,CAAC,GAAG,CAAC;IACrC,CAAC,aAAa,EAAE,iBAAiB,CAAC,GAAG,CAAC;IACtC,CAAC,eAAe,EAAE,iBAAiB,CAAC,GAAG,CAAC;IACxC,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,GAAG,CAAC;IACzC,CAAC,aAAa,EAAE,iBAAiB,CAAC,IAAI,CAAC;IACvC,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,IAAI,CAAC;IAC1C,CAAC,uBAAuB,EAAE,iBAAiB,CAAC,cAAc,CAAC;CAC5D,CAAC,CAAC;AAEL;;;GAGG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAqC;IAC3E,iBAAiB,CAAC,GAAG;IACrB,iBAAiB,CAAC,IAAI;IACtB,iBAAiB,CAAC,SAAS;CAC5B,CAAC;AAEF,wCAAwC;AACxC,MAAM,aAAa,GAA2C,IAAI,GAAG,CAGnE;IACA,CAAC,iBAAiB,CAAC,GAAG,EAAE,sBAAsB,CAAC;IAC/C,CAAC,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,CAAC;IAC7C,CAAC,iBAAiB,CAAC,SAAS,EAAE,eAAe,CAAC;IAC9C,CAAC,iBAAiB,CAAC,cAAc,EAAE,iBAAiB,CAAC;IACrD,CAAC,iBAAiB,CAAC,cAAc,EAAE,iCAAiC,CAAC;CACtE,CAAC,CAAC;AAoBH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAqB,iBAAiB;IAgC7B,MAAM,CAAC,QAAQ,CAAC,gBAAwC;QAC7D,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,iBAAiB,CAAC,MAAM,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CACb,+FAA+F,CAChG,CAAC;QACJ,CAAC;QAED,iBAAiB,CAAC,MAAM,GAAG,gBAAgB,CAAC;IAC9C,CAAC;IAEM,MAAM,CAAC,QAAQ;QACpB,OAAO,iBAAiB,CAAC,MAAM,KAAK,IAAI,CAAC;IAC3C,CAAC;IAEM,MAAM,CAAC,SAAS;QACrB,OAAO,iBAAiB,CAAC,MAAM,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,aAAa;QACzB,iBAAiB,CAAC,MAAM,GAAG,IAAI,CAAC;QAChC,iBAAiB,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;QAChD,iBAAiB,CAAC,2BAA2B,GAAG,KAAK,CAAC;QACtD,iBAAiB,CAAC,+BAA+B,GAAG,KAAK,CAAC;QAC1D,iBAAiB,CAAC,+BAA+B,GAAG,KAAK,CAAC;QAC1D,iBAAiB,CAAC,qBAAqB,GAAG,EAAE,CAAC;IAC/C,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACI,MAAM,CAAC,eAAe,CAAC,OAA0B;QACtD,MAAM,gBAAgB,GACpB,iBAAiB,CAAC,MAAM,CAAC;QAE3B,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,QAAQ,GAAqC,IAAI,CAAC;QAEtD,IAAI,CAAC;YACH,QAAQ,GAAG,gBAAgB,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC;QAC5D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,iBAAiB,CAAC,+BAA+B,EAAE,CAAC;gBACvD,iBAAiB,CAAC,+BAA+B,GAAG,IAAI,CAAC;gBACzD,MAAM,CAAC,IAAI,CACT,wLAAwL,CACzL,CAAC;gBACF,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC,iBAAiB,CAAC,2BAA2B,EAAE,CAAC;gBACnD,iBAAiB,CAAC,2BAA2B,GAAG,IAAI,CAAC;gBACrD,MAAM,CAAC,IAAI,CACT,sKAAsK,CACvK,CAAC;YACJ,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,6BAA6B,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChE,IAAI,CAAC,iBAAiB,CAAC,+BAA+B,EAAE,CAAC;gBACvD,iBAAiB,CAAC,+BAA+B,GAAG,IAAI,CAAC;gBACzD,MAAM,CAAC,IAAI;gBACT;;;;;mBAKG;gBACH,2FAA2F,uCAAuC,6MAA6M,CAChV,CAAC;YACJ,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAY,6BAA6B,CAAC,QAAQ,CAC9D,QAAQ,EACR,OAAO,CACR,CAAC;QAEF,IAAI,iBAAiB,CAAC,wBAAwB,CAAC,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YACrE,iBAAiB,CAAC,wBAAwB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChE,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,oBAAoB,CAChC,QAAwC;QAExC,iBAAiB,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEvD,OAAO,GAAS,EAAE;YAChB,iBAAiB,CAAC,qBAAqB;gBACrC,iBAAiB,CAAC,qBAAqB,CAAC,MAAM,CAC5C,CAAC,UAA0C,EAAW,EAAE;oBACtD,OAAO,UAAU,KAAK,QAAQ,CAAC;gBACjC,CAAC,CACF,CAAC;QACN,CAAC,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,sBAAsB,CAAC,OAA0B;QAC7D,MAAM,gBAAgB,GACpB,iBAAiB,CAAC,MAAM,CAAC;QAE3B,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,QAAQ,GAAqC,IAAI,CAAC;QAEtD,IAAI,CAAC;YACH,QAAQ,GAAG,gBAAgB,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC;QAC5D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CACT,qGAAqG,CACtG,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,6BAA6B,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnE,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,kBAAkB,CACpC,OAA0B;QAE1B,MAAM,gBAAgB,GACpB,iBAAiB,CAAC,MAAM,CAAC;QAE3B,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GACZ,MAAM,iBAAiB,CAAC,kBAAkB,EAAE,CAAC;QAE/C,OAAO,6BAA6B,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnE,CAAC;IAEM,MAAM,CAAC,0BAA0B,CAAC,OAA0B;QACjE,IAAI,iBAAiB,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC;YACtD,OAAO;QACT,CAAC;QAED,MAAM,iBAAiB,CAAC,0BAA0B,EAAE,CAAC;IACvD,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,sBAAsB,CACxC,OAA0B;QAE1B,IAAI,MAAM,iBAAiB,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;YACxD,OAAO;QACT,CAAC;QAED,MAAM,iBAAiB,CAAC,0BAA0B,EAAE,CAAC;IACvD,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,KAAK,CAAC,kBAAkB;QACpC,MAAM,gBAAgB,GACpB,iBAAiB,CAAC,MAAM,CAAC;QAE3B,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,OAAO,MAAM,gBAAgB,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;QACxD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CACT,yFAAyF,CAC1F,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;QAED,IAAI,CAAC;YACH,OAAO,gBAAgB,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC;QACxD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,wEAAwE;IACjE,MAAM,CAAC,KAAK,CAAC,YAAY;QAC9B,MAAM,gBAAgB,GACpB,iBAAiB,CAAC,MAAM,CAAC;QAE3B,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,OAAO,MAAM,gBAAgB,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;QACzD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;YAChE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,KAAK,CAAC,6BAA6B;QAC/C,MAAM,gBAAgB,GACpB,iBAAiB,CAAC,MAAM,CAAC;QAE3B,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,MAAM,gBAAgB,CAAC,SAAS,CAAC,6BAA6B,EAAE,CAAC;IACnE,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,mBAAmB;QAC/B,MAAM,gBAAgB,GACpB,iBAAiB,CAAC,MAAM,CAAC;QAE3B,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,OAAO,gBAAgB,CAAC,mBAAmB,EAAE,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CACV,oFAAoF,CACrF,CAAC;YACF,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,eAAe,CAC3B,SAAgC;QAEhC,IAAI,SAAS,GAAkB,IAAI,CAAC;QAEpC,IAAI,CAAC;YACH,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC,SAAS,CAAC;QACxC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,iBAAiB,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAC7D,CAAC;IAEM,MAAM,CAAC,sBAAsB,CAClC,SAAoC;QAEpC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,gCAAgC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IACjE,CAAC;IAED,mEAAmE;IAC5D,MAAM,CAAC,mBAAmB;QAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,qCAAqC;IAC9B,MAAM,CAAC,cAAc,CAAC,OAA0B;QACrD,OAAO,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC;IAC/C,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,uBAAuB,CACnC,OAAiC,EACjC,QAAmC;QAEnC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAW,iBAAiB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAClE,MAAM,IAAI,GAAW,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3D,MAAM,QAAQ,GAAY,6BAA6B,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAE3E,MAAM,KAAK,GAAkB;YAC3B,QAAQ;gBACN,CAAC,CAAC,qDAAqD,KAAK,KAAK,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,0CAA0C,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,gBAAgB;gBAC3M,CAAC,CAAC,wDAAwD,QAAQ,CAAC,MAAM,MAAM,KAAK,IAAI,IAAI,wCAAwC;SACvI,CAAC;QAEF,IAAI,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CACR,4JAA4J,CAC7J,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,mBAAmB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,CAAC;QAED,KAAK,CAAC,IAAI,CACR,wGAAwG,CACzG,CAAC;QAEF,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,iEAAiE;IAC1D,MAAM,CAAC,uBAAuB,CACnC,OAAiC;QAEjC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,2CAA2C,iBAAiB,CAAC,gBAAgB,CAAC,OAAO,CAAC,WAAW,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,WAAW,CAAC;IACnK,CAAC;IAEO,MAAM,CAAC,wBAAwB,CAAC,OAA0B;QAChE,MAAM,KAAK,GACT,iBAAiB,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEvD,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5C,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,wBAAwB,CACrC,QAAmC,EACnC,OAA0B;QAE1B,MAAM,QAAQ,GAA6B,CAAC,GAAG,2BAA2B,CAAC,CAAC;QAE5E,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;QAED,MAAM,OAAO,GAA6B,EAAE,CAAC;QAC7C,MAAM,OAAO,GAA6B,EAAE,CAAC;QAE7C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,SAAS,GACb,iBAAiB,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;YACtD,MAAM,QAAQ,GAAY,6BAA6B,CAAC,QAAQ,CAC9D,QAAQ,EACR,OAAO,CACR,CAAC;YAEF,iBAAiB,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAE/D,IAAI,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC3B,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxB,CAAC;YAED,IAAI,CAAC,SAAS,IAAI,QAAQ,EAAE,CAAC;gBAC3B,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,cAAc,GAClB,iBAAiB,CAAC,uBAAuB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAE/D,IAAI,cAAc,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC9B,CAAC;YAED,MAAM,cAAc,GAClB,iBAAiB,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;YAErD,IAAI,cAAc,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QAAC,WAAM,CAAC;YACP,8DAA8D;QAChE,CAAC;QAED,MAAM,MAAM,GAAiC;YAC3C,OAAO;YACP,OAAO;YACP,QAAQ;SACT,CAAC;QAEF,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,iBAAiB,CAAC,qBAAqB,CAAC,EAAE,CAAC;YACpE,IAAI,CAAC;gBACH,QAAQ,CAAC,MAAM,CAAC,CAAC;YACnB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CACV,4EAA4E,CAC7E,CAAC;gBACF,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,gBAAgB,CAAC,QAAkC;QAChE,MAAM,KAAK,GAAkB,QAAQ,CAAC,GAAG,CACvC,CAAC,OAA0B,EAAU,EAAE;YACrC,OAAO,iBAAiB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACnD,CAAC,CACF,CAAC;QAEF,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC;QAED,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;IAC3E,CAAC;IAEO,MAAM,CAAC,0BAA0B;QACvC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,EAAE,CAAC;YAClC,OAAO,IAAI,wBAAwB,CACjC,iBAAiB,CAAC,yBAAyB,CAC5C,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,wBAAwB,CACjC,iBAAiB,CAAC,wBAAwB,CAC3C,CAAC;IACJ,CAAC;;AAphBsB,2CAAyB,GAC9C,gGAAgG;IAChG,wDAAwD;IACxD,4DAA4D,CAAC;AAExC,0CAAwB,GAC7C,uFAAuF;IACvF,wFAAwF;IACxF,sFAAsF;IACtF,uDAAuD,CAAC;AAE3C,wBAAM,GAAkC,IAAI,CAAC;AAE5D;;;;;GAKG;AACY,uCAAqB,GAClC,IAAI,GAAG,EAA8B,CAAC;AAEzB,6CAA2B,GAAY,KAAK,CAAC;AAE7C,iDAA+B,GAAY,KAAK,CAAC;AAEjD,iDAA+B,GAAY,KAAK,CAAC;AAEjD,uCAAqB,GAClC,EAAE,CAAC;eA9Bc,iBAAiB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The enterprise capabilities a OneUptime Enterprise license can entitle.
|
|
3
|
+
*
|
|
4
|
+
* The string values are part of the license format: a signed license carries
|
|
5
|
+
* a `features` claim that is either ["*"] (everything) or a subset of these
|
|
6
|
+
* values. Renaming a value therefore silently revokes that feature from every
|
|
7
|
+
* license already issued, so values are append-only.
|
|
8
|
+
*/
|
|
9
|
+
var EnterpriseFeature;
|
|
10
|
+
(function (EnterpriseFeature) {
|
|
11
|
+
EnterpriseFeature["SSO"] = "sso";
|
|
12
|
+
EnterpriseFeature["SCIM"] = "scim";
|
|
13
|
+
EnterpriseFeature["TeamCompliance"] = "team-compliance";
|
|
14
|
+
EnterpriseFeature["AuditLogs"] = "audit-logs";
|
|
15
|
+
EnterpriseFeature["InstanceHealth"] = "instance-health";
|
|
16
|
+
})(EnterpriseFeature || (EnterpriseFeature = {}));
|
|
17
|
+
export const ALL_ENTERPRISE_FEATURES = Object.values(EnterpriseFeature);
|
|
18
|
+
/*
|
|
19
|
+
* The license claim value that entitles every feature, including ones added
|
|
20
|
+
* after the license was issued.
|
|
21
|
+
*/
|
|
22
|
+
export const ENTERPRISE_FEATURE_WILDCARD = "*";
|
|
23
|
+
/*
|
|
24
|
+
* Narrows an untrusted string (a license claim, a request body) to a feature.
|
|
25
|
+
* Unknown values return null rather than throwing, so a license issued by a
|
|
26
|
+
* newer license server that names a feature this build has never heard of is
|
|
27
|
+
* still readable: the unknown name is simply not granted.
|
|
28
|
+
*/
|
|
29
|
+
export const parseEnterpriseFeature = (value) => {
|
|
30
|
+
if (typeof value !== "string") {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
const match = ALL_ENTERPRISE_FEATURES.find((feature) => {
|
|
34
|
+
return feature === value;
|
|
35
|
+
});
|
|
36
|
+
return match || null;
|
|
37
|
+
};
|
|
38
|
+
export default EnterpriseFeature;
|
|
39
|
+
//# sourceMappingURL=EnterpriseFeature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnterpriseFeature.js","sourceRoot":"","sources":["../../../../Server/Enterprise/EnterpriseFeature.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,IAAK,iBAMJ;AAND,WAAK,iBAAiB;IACpB,gCAAW,CAAA;IACX,kCAAa,CAAA;IACb,uDAAkC,CAAA;IAClC,6CAAwB,CAAA;IACxB,uDAAkC,CAAA;AACpC,CAAC,EANI,iBAAiB,KAAjB,iBAAiB,QAMrB;AAED,MAAM,CAAC,MAAM,uBAAuB,GAClC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAEnC;;;GAGG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAW,GAAG,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAEH,CAAC,KAAc,EAA4B,EAAE;IAC3E,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAkC,uBAAuB,CAAC,IAAI,CACvE,CAAC,OAA0B,EAAW,EAAE;QACtC,OAAO,OAAO,KAAK,KAAK,CAAC;IAC3B,CAAC,CACF,CAAC;IAEF,OAAO,KAAK,IAAI,IAAI,CAAC;AACvB,CAAC,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* ENTERPRISE_LICENSE_GRACE_PERIOD_IN_DAYS (30): how long an expired license
|
|
3
|
+
* keeps working, counted from its expiry - a verified license's signed
|
|
4
|
+
* expiry, or an unverified legacy license's stored expiry column.
|
|
5
|
+
*
|
|
6
|
+
* ENTERPRISE_LICENSE_TRIAL_PERIOD_IN_DAYS (14): how long an Enterprise install
|
|
7
|
+
* that has no license is on trial, counted from
|
|
8
|
+
* GlobalConfig.enterpriseEditionFirstSeenAt.
|
|
9
|
+
*
|
|
10
|
+
* Until either ends nothing changes; after it, enterprise configuration
|
|
11
|
+
* becomes read-only and SSO, SCIM and audit logging stop
|
|
12
|
+
* (EnterpriseEdition.isFeatureActive) until a license is activated. They are
|
|
13
|
+
* defined in Common/Types so the browser copy derives the same numbers.
|
|
14
|
+
*/
|
|
15
|
+
export { ENTERPRISE_LICENSE_GRACE_PERIOD_IN_DAYS, ENTERPRISE_LICENSE_TRIAL_PERIOD_IN_DAYS, } from "../../Types/EnterpriseLicense/EnterpriseLicensePeriods";
|
|
16
|
+
export class EnterpriseLicenseSnapshotUtil {
|
|
17
|
+
/*
|
|
18
|
+
* True when the license currently entitles anything at all. Grace counts:
|
|
19
|
+
* the whole point of grace is that nothing changes until it ends.
|
|
20
|
+
*/
|
|
21
|
+
static isUsable(snapshot) {
|
|
22
|
+
if (!snapshot) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
return snapshot.status === "valid" || snapshot.status === "grace";
|
|
26
|
+
}
|
|
27
|
+
static includesFeature(snapshot, feature) {
|
|
28
|
+
if (!snapshot) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
if (snapshot.features === "all") {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
if (!Array.isArray(snapshot.features)) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
return snapshot.features.includes(feature);
|
|
38
|
+
}
|
|
39
|
+
// Usable AND entitled: the license half of EnterpriseEdition.isFeatureAvailable.
|
|
40
|
+
static entitles(snapshot, feature) {
|
|
41
|
+
return (EnterpriseLicenseSnapshotUtil.isUsable(snapshot) &&
|
|
42
|
+
EnterpriseLicenseSnapshotUtil.includesFeature(snapshot, feature));
|
|
43
|
+
}
|
|
44
|
+
/*
|
|
45
|
+
* "missing" with no graceEndsAt: no license is installed, and the start of
|
|
46
|
+
* the unlicensed trial (GlobalConfig.enterpriseEditionFirstSeenAt) is not
|
|
47
|
+
* known - the stamp has not been written yet (it failed, or the row does
|
|
48
|
+
* not exist yet), or nothing could be read at all (createMissing). So
|
|
49
|
+
* whether the install is still in its trial is unknown.
|
|
50
|
+
* EnterpriseEdition.isFeatureActive treats it as an unknown license state
|
|
51
|
+
* (active); the configuration checks still fail closed on it.
|
|
52
|
+
*/
|
|
53
|
+
static isTrialStartUnknown(snapshot) {
|
|
54
|
+
if (!snapshot) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
return snapshot.status === "missing" && !snapshot.graceEndsAt;
|
|
58
|
+
}
|
|
59
|
+
static createMissing(message) {
|
|
60
|
+
return {
|
|
61
|
+
status: "missing",
|
|
62
|
+
verification: "none",
|
|
63
|
+
userLimit: null,
|
|
64
|
+
isEvaluation: false,
|
|
65
|
+
features: [],
|
|
66
|
+
message: message || "No OneUptime Enterprise license is installed.",
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=EnterpriseLicenseSnapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnterpriseLicenseSnapshot.js","sourceRoot":"","sources":["../../../../Server/Enterprise/EnterpriseLicenseSnapshot.ts"],"names":[],"mappings":"AAoGA;;;;;;;;;;;;;GAaG;AACH,OAAO,EACL,uCAAuC,EACvC,uCAAuC,GACxC,MAAM,wDAAwD,CAAC;AAEhE,MAAM,OAAO,6BAA6B;IACxC;;;OAGG;IACI,MAAM,CAAC,QAAQ,CAAC,QAA0C;QAC/D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,QAAQ,CAAC,MAAM,KAAK,OAAO,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,CAAC;IACpE,CAAC;IAEM,MAAM,CAAC,eAAe,CAC3B,QAA0C,EAC1C,OAA0B;QAE1B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,QAAQ,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,iFAAiF;IAC1E,MAAM,CAAC,QAAQ,CACpB,QAA0C,EAC1C,OAA0B;QAE1B,OAAO,CACL,6BAA6B,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAChD,6BAA6B,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CACjE,CAAC;IACJ,CAAC;IAED;;;;;;;;OAQG;IACI,MAAM,CAAC,mBAAmB,CAC/B,QAA0C;QAE1C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,QAAQ,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;IAChE,CAAC;IAEM,MAAM,CAAC,aAAa,CAAC,OAAgB;QAC1C,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,YAAY,EAAE,MAAM;YACpB,SAAS,EAAE,IAAI;YACf,YAAY,EAAE,KAAK;YACnB,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE,OAAO,IAAI,+CAA+C;SACpE,CAAC;IACJ,CAAC;CACF"}
|