@oneuptime/common 13.0.7 → 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.
- package/Models/AnalyticsModels/AuditLog.ts +23 -15
- package/Models/DatabaseModels/GlobalConfig.ts +24 -0
- package/Models/DatabaseModels/Monitor.ts +3 -2
- package/Models/DatabaseModels/MonitorTemplate.ts +2 -1
- package/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.ts +1 -1
- package/Models/DatabaseModels/ProjectOnCallCalendarFeed.ts +1 -1
- package/Models/DatabaseModels/UserOnCallCalendarFeed.ts +1 -1
- package/Scripts/generate-service-worker.js +65 -4
- package/Server/API/AIBillingAPI.ts +1 -0
- package/Server/API/AIInsightAPI.ts +1 -4
- package/Server/API/AIInvestigationAPI.ts +1 -4
- package/Server/API/AIReadinessAPI.ts +4 -5
- package/Server/API/AlertAPI.ts +1 -0
- package/Server/API/AutoRemediationAPI.ts +1 -4
- package/Server/API/BaseAPI.ts +34 -0
- package/Server/API/BaseAnalyticsAPI.ts +80 -9
- package/Server/API/BillingAPI.ts +2 -0
- package/Server/API/BillingInvoiceAPI.ts +1 -0
- package/Server/API/BillingPaymentMethodAPI.ts +2 -0
- package/Server/API/CodeFixRunAPI.ts +1 -3
- package/Server/API/CommonAPI.ts +68 -4
- package/Server/API/DashboardAPI.ts +12 -12
- package/Server/API/GlobalConfigAPI.ts +243 -460
- package/Server/API/IncidentAPI.ts +2 -0
- package/Server/API/IncidentEpisodeAPI.ts +1 -0
- package/Server/API/NotificationAPI.ts +1 -0
- package/Server/API/OnCallCalendarAPI.ts +4 -5
- package/Server/API/OnCallDutyPolicyAPI.ts +7 -0
- package/Server/API/OnCallReadinessAPI.ts +4 -1
- package/Server/API/OnCallScheduleTimelineAPI.ts +731 -0
- package/Server/API/ProjectAPI.ts +1 -0
- package/Server/API/ProjectOIDC.ts +25 -16
- package/Server/API/ProjectSSO.ts +24 -16
- package/Server/API/ScheduledMaintenanceAPI.ts +1 -0
- package/Server/API/StatusPageAPI.ts +261 -74
- package/Server/API/TeamMemberAPI.ts +13 -1
- package/Server/API/UserCallAPI.ts +2 -0
- package/Server/API/UserEmailAPI.ts +2 -0
- package/Server/API/UserIncomingCallNumberAPI.ts +2 -0
- package/Server/API/UserMicrosoftTeamsAPI.ts +1 -0
- package/Server/API/UserSlackAPI.ts +1 -0
- package/Server/API/UserSmsAPI.ts +2 -0
- package/Server/API/UserTotpAuthAPI.ts +1 -0
- package/Server/API/UserWebAuthnAPI.ts +2 -0
- package/Server/API/UserWebhookAPI.ts +1 -0
- package/Server/API/UserWhatsAppAPI.ts +2 -0
- 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/Index.ts +2 -0
- package/Server/Middleware/MasterAdminAuthorization.ts +13 -2
- package/Server/Middleware/UserAuthorization.ts +117 -21
- package/Server/Services/ApiKeyPermissionService.ts +101 -4
- package/Server/Services/AuditLogService.ts +84 -1079
- package/Server/Services/DatabaseService.ts +245 -0
- package/Server/Services/DetectionRuleService.ts +5 -4
- package/Server/Services/EnterpriseLicenseService.ts +38 -0
- package/Server/Services/GlobalConfigService.ts +80 -1
- package/Server/Services/MonitorProbeService.ts +116 -20
- package/Server/Services/MonitorService.ts +56 -4
- package/Server/Services/MonitorStatusTimelineService.ts +284 -0
- package/Server/Services/MonitorTemplateService.ts +26 -0
- package/Server/Services/OnCallDutyPolicyChildService.ts +261 -0
- package/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.ts +2 -2
- package/Server/Services/OnCallDutyPolicyEscalationRuleService.ts +2 -2
- package/Server/Services/OnCallDutyPolicyEscalationRuleTeamService.ts +2 -2
- package/Server/Services/OnCallDutyPolicyEscalationRuleUserService.ts +2 -2
- package/Server/Services/PayAsYouGoBillingService.ts +23 -28
- package/Server/Services/ProjectService.ts +302 -0
- package/Server/Services/RumSessionPinService.ts +293 -22
- package/Server/Services/StatusPagePrivateUserService.ts +7 -3
- package/Server/Services/StatusPageService.ts +78 -1
- package/Server/Services/TeamMemberService.ts +11 -0
- package/Server/Services/TeamPermissionService.ts +120 -26
- package/Server/Services/TeamService.ts +10 -0
- package/Server/Services/ThreatIntelFeedService.ts +6 -3
- package/Server/Services/UserService.ts +10 -17
- package/Server/Types/Database/Permissions/BasePermission.ts +9 -7
- package/Server/Types/Database/Permissions/CreatePermission.ts +15 -0
- package/Server/Types/Database/Permissions/EditionPermission.ts +208 -18
- package/Server/Types/Database/Permissions/Index.ts +75 -11
- package/Server/Types/Database/Permissions/TablePermission.ts +34 -31
- package/Server/Types/Database/Permissions/UpdatePermission.ts +29 -0
- package/Server/Types/Markdown.ts +41 -0
- package/Server/Utils/AI/AIChatPrivacyFilter.ts +8 -0
- package/Server/Utils/AI/AIRunPrivacyFilter.ts +8 -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/MasterAdminPageAccess.ts +61 -0
- package/Server/Utils/Monitor/AffectedResourceList.ts +190 -0
- package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +10 -1
- package/Server/Utils/Monitor/MonitorAlert.ts +3 -1
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +543 -333
- package/Server/Utils/Monitor/MonitorIncident.ts +3 -1
- package/Server/Utils/Monitor/MonitoringIntervalValidator.ts +116 -0
- package/Server/Utils/OnCall/OnCallCalendarFeedRenderer.ts +1 -1
- package/Server/Utils/Realtime.ts +163 -45
- package/Server/Utils/SecurityEvent/DetectionRuleEvaluator.ts +11 -28
- package/Server/Utils/SecurityEvent/GoogleSecOpsSeverityRepair.ts +170 -0
- package/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.ts +1 -1
- package/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.ts +6 -2
- package/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.ts +10 -9
- 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/AffectedResourcesPicker.test.tsx +1059 -0
- package/Tests/App/Dashboard/AffectedResourcesPickerEditForm.test.tsx +376 -0
- package/Tests/App/Dashboard/AffectedResourcesPickerHiddenTypes.test.tsx +757 -0
- package/Tests/App/Dashboard/AffectedResourcesSummaryStep.test.tsx +307 -0
- package/Tests/App/Dashboard/ArgumentsFormGroupByUnlistedAttributes.test.tsx +131 -0
- package/Tests/App/Dashboard/AuditLogsAndComplianceShells.test.tsx +572 -0
- package/Tests/App/Dashboard/DashboardHeaderRequests.test.tsx +1 -1
- package/Tests/App/Dashboard/DashboardMonitorLabelVariable.test.tsx +9 -1
- package/Tests/App/Dashboard/DashboardVariableAllContract.test.tsx +24 -0
- package/Tests/App/Dashboard/DashboardVariableSelector.test.tsx +162 -8
- package/Tests/App/Dashboard/EnterpriseFeatureUpgrade.test.tsx +547 -0
- package/Tests/App/Dashboard/EnterprisePluginPage.test.tsx +667 -0
- package/Tests/App/Dashboard/EntityFilterDropdownArchivedSlos.test.tsx +105 -6
- package/Tests/App/Dashboard/EntityFilterDropdownUnlistedSelection.test.tsx +434 -0
- package/Tests/App/Dashboard/EscalationRuleReadiness.test.tsx +276 -1
- package/Tests/App/Dashboard/IdentityEnterpriseShells.test.tsx +319 -0
- package/Tests/App/Dashboard/OnCallCalendarFeedSideMenus.test.tsx +9 -1
- package/Tests/App/Dashboard/OnboardingSsoEmptyState.test.tsx +185 -0
- package/Tests/App/Dashboard/PayAsYouGoConsentGate.test.tsx +58 -42
- package/Tests/App/Dashboard/PayAsYouGoNotices.test.tsx +42 -5
- package/Tests/App/Dashboard/ResourceAuditLogsSideMenus.test.tsx +34 -23
- package/Tests/App/Dashboard/ScheduleTimeline.test.tsx +1580 -0
- package/Tests/App/Dashboard/ScheduleTimelineAPI.test.ts +280 -0
- package/Tests/App/Dashboard/ScheduleTimelineModel.test.ts +673 -0
- package/Tests/App/Dashboard/SecurityEventConnectionDiagnostics.test.tsx +133 -70
- package/Tests/App/Dashboard/SecurityEventDetailPanel.test.tsx +399 -0
- package/Tests/App/Dashboard/SecurityEventListRow.test.tsx +214 -0
- package/Tests/App/Dashboard/SecurityEventsDetectionRulesPage.test.tsx +86 -3
- package/Tests/App/Dashboard/SecurityEventsEmptyState.test.tsx +1 -58
- package/Tests/App/Dashboard/SecurityEventsGuideContent.test.ts +1313 -0
- package/Tests/App/Dashboard/SecurityEventsHowItWorksCard.test.tsx +536 -0
- package/Tests/App/Dashboard/SecurityEventsNavTabs.test.tsx +248 -0
- package/Tests/App/Dashboard/SecurityEventsNoResults.test.tsx +222 -0
- package/Tests/App/Dashboard/SecurityEventsThreatIntelPage.test.tsx +199 -0
- package/Tests/App/Dashboard/SecurityEventsViewer.test.tsx +1203 -0
- package/Tests/App/Dashboard/SloOverviewHero.test.tsx +171 -36
- package/Tests/App/Dashboard/SloViewSideMenu.test.tsx +215 -0
- package/Tests/App/Dashboard/SloViewSideMenuCounts.test.tsx +40 -3
- package/Tests/App/Dashboard/UserEmailCallSites.test.tsx +11 -91
- package/Tests/App/PublicDashboard/DashboardVariableSelector.test.tsx +12 -4
- package/Tests/App/PublicDashboard/PublicDashboardWidgetListAuth.test.tsx +623 -0
- 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/OnCallCalendarFeedModels.test.ts +23 -1
- package/Tests/Scripts/GenerateServiceWorker.test.ts +931 -0
- package/Tests/Server/API/AIChatRouteAuthorization.test.ts +138 -5
- package/Tests/Server/API/AIGenerationProjectAIToggle.test.ts +187 -0
- package/Tests/Server/API/AIInvestigationAvailabilityAuthorization.test.ts +51 -3
- package/Tests/Server/API/AIInvestigationEvidenceAPI.test.ts +55 -2
- package/Tests/Server/API/BaseAPICreateItemDoesNotMutateModel.test.ts +130 -0
- package/Tests/Server/API/BaseAnalyticsAPIAggregateCache.test.ts +729 -0
- package/Tests/Server/API/BillingPayAsYouGoStatus.test.ts +93 -7
- package/Tests/Server/API/BillingPaymentMethodAPI.test.ts +36 -3
- package/Tests/Server/API/CommonAPIAuthGuard.test.ts +1003 -24
- package/Tests/Server/API/DashboardPublicRateLimit.test.ts +6 -3
- package/Tests/Server/API/ExpiredSessionAIRoutes.test.ts +708 -0
- package/Tests/Server/API/ExpiredSessionCustomRoutes.test.ts +928 -0
- package/Tests/Server/API/ExpiredSessionMonitorTemplate.test.ts +319 -0
- package/Tests/Server/API/ExpiredSessionOnCallDutyPolicy.test.ts +336 -0
- package/Tests/Server/API/ExpiredSessionRouteGuards.test.ts +820 -0
- package/Tests/Server/API/GlobalConfigLicense.test.ts +766 -381
- package/Tests/Server/API/NotificationChannelVerificationAPI.test.ts +115 -12
- package/Tests/Server/API/OnCallCalendarAPI.test.ts +375 -8
- package/Tests/Server/API/OnCallReadinessAPI.test.ts +196 -912
- package/Tests/Server/API/OnCallScheduleTimelineAPI.test.ts +1513 -0
- package/Tests/Server/API/OnCallSetupReminderAPI.test.ts +119 -7
- package/Tests/Server/API/ProjectScopedCustomRouteAuth.test.ts +111 -4
- package/Tests/Server/API/PublicRouteInvalidAccessToken.test.ts +615 -0
- package/Tests/Server/API/SecurityEventAttributesAPI.test.ts +89 -2
- package/Tests/Server/API/SessionReplayAPI.test.ts +121 -0
- package/Tests/Server/API/SsoProviderListingsEdition.test.ts +432 -0
- package/Tests/Server/API/StatusPageMasterPasswordRateLimit.test.ts +4 -2
- package/Tests/Server/API/StatusPagePostmortemVisibility.test.ts +441 -0
- package/Tests/Server/API/StatusPageTestEmailReportAuth.test.ts +664 -0
- package/Tests/Server/API/TeamMemberLeaveScimLockEdition.test.ts +252 -0
- package/Tests/Server/API/TeamMemberRemoveUserFromProjectAPI.test.ts +7 -0
- package/Tests/Server/API/UserIncomingCallNumberApi.test.ts +6 -0
- package/Tests/Server/API/UserNotificationSettingAPI.test.ts +65 -4
- package/Tests/Server/API/UserProjectsAPI.test.ts +63 -3
- package/Tests/Server/API/UserTotpAuthAPI.test.ts +48 -2
- package/Tests/Server/API/UserWebAuthnAuthenticationOptionsRoute.test.ts +11 -2
- package/Tests/Server/API/UserWebAuthnBackupCodeMinting.test.ts +46 -3
- package/Tests/Server/API/UserWebAuthnPasskeyAPI.test.ts +18 -2
- package/Tests/Server/API/ZZVerifyChatsAuth.test.ts +24 -7
- 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/Middleware/ExpiredSessionUserMiddleware.test.ts +563 -0
- package/Tests/Server/Middleware/MasterAdminAuthorization.test.ts +299 -19
- package/Tests/Server/Middleware/PublicRouteUserMiddleware.test.ts +453 -0
- package/Tests/Server/Middleware/UserAuthorization.test.ts +37 -2
- package/Tests/Server/Middleware/UserAuthorizationEditionEnforcement.test.ts +516 -0
- package/Tests/Server/Services/AIChatPrivacyPin.test.ts +24 -0
- package/Tests/Server/Services/ApiKeyPermissionSecurity.test.ts +2 -0
- package/Tests/Server/Services/ApiKeyPermissionService.test.ts +3 -3
- package/Tests/Server/Services/AuditLogService.test.ts +460 -990
- package/Tests/Server/Services/CreateAndReadResponsesKeepIds.test.ts +263 -0
- package/Tests/Server/Services/DatabaseServiceCreateSuppliedId.test.ts +147 -0
- package/Tests/Server/Services/DatabaseServiceLoginBeforeHooks.test.ts +1078 -0
- package/Tests/Server/Services/DatabaseServiceTenantRelationGuard.test.ts +259 -0
- package/Tests/Server/Services/DatabaseServiceWriteOperatorValues.test.ts +147 -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/MonitorPayAsYouGoBilling.test.ts +115 -1
- package/Tests/Server/Services/MonitorProbeServiceIntervalScheduling.test.ts +333 -0
- package/Tests/Server/Services/MonitorStatusTimelineDailyAggregates.test.ts +303 -0
- package/Tests/Server/Services/OnCallChildCreateAuthorizationPostgres.test.ts +711 -0
- package/Tests/Server/Services/OnCallDutyPolicyChildService.test.ts +733 -0
- package/Tests/Server/Services/PayAsYouGoBillingService.test.ts +190 -140
- package/Tests/Server/Services/PayAsYouGoStripeRateLimitBudget.test.ts +4 -9
- package/Tests/Server/Services/PermissionBlockDeletion.test.ts +780 -0
- package/Tests/Server/Services/PermissionBlockDeletionPostgres.test.ts +628 -0
- package/Tests/Server/Services/ProjectServiceAuditLogLicense.test.ts +701 -0
- package/Tests/Server/Services/ProjectServiceAuditLogSettingsCache.test.ts +31 -35
- package/Tests/Server/Services/ProjectServiceCreateSubscriptionStarted.test.ts +77 -1
- package/Tests/Server/Services/RumSessionPinCreatePermission.test.ts +715 -0
- package/Tests/Server/Services/ScimPushGroupsTeamLocksEdition.test.ts +431 -0
- package/Tests/Server/Services/SsoRequirementReadMasking.test.ts +419 -0
- package/Tests/Server/Services/SsoRequirementWriteGuard.test.ts +769 -0
- package/Tests/Server/Services/StatusPagePrivateUserInvitationPolicy.test.ts +94 -0
- package/Tests/Server/Services/TeamMemberMultiTenantReadPostgres.test.ts +394 -0
- package/Tests/Server/Services/TeamPrivilegeEscalation.test.ts +6 -0
- package/Tests/Server/Services/TelemetryPayAsYouGoBilling.test.ts +131 -0
- package/Tests/Server/Services/UserAuthenticationService.test.ts +35 -0
- package/Tests/Server/Services/UserNotificationRuleAdminGuards.test.ts +13 -2
- package/Tests/Server/Services/UserServiceSeatLimit.test.ts +94 -56
- package/Tests/Server/Types/Database/Permissions/EditionPermission.test.ts +1823 -0
- package/Tests/Server/Types/Database/Permissions/ModelPermissionAnonymousRefusal.test.ts +518 -0
- package/Tests/Server/Types/Database/Permissions/MultiTenantPermissions.test.ts +350 -0
- package/Tests/Server/Types/Database/Permissions/OnCallCalendarFeedPermissions.test.ts +282 -25
- package/Tests/Server/Types/Database/Permissions/TableLevelBlockPermission.test.ts +459 -0
- package/Tests/Server/Types/Markdown.test.ts +181 -0
- package/Tests/Server/Utils/AI/AIRunPrivacyFilter.test.ts +101 -9
- package/Tests/Server/Utils/AI/ChatAgentHelpers.test.ts +88 -4
- package/Tests/Server/Utils/AI/Toolbox/ExceptionTools.test.ts +459 -0
- package/Tests/Server/Utils/AI/Toolbox/LogTools.test.ts +794 -0
- package/Tests/Server/Utils/AI/Toolbox/RecentChangesTools.test.ts +574 -0
- package/Tests/Server/Utils/AI/Toolbox/SecurityEventTools.test.ts +596 -0
- package/Tests/Server/Utils/CaptchaRequestAndLogging.test.ts +395 -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/MasterAdminPageAccess.test.ts +251 -0
- 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/MonitorActionTimestamps.test.ts +616 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +934 -96
- package/Tests/Server/Utils/Monitor/MonitoringIntervalValidator.test.ts +188 -0
- package/Tests/Server/Utils/Realtime.test.ts +502 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnectorSeverity.test.ts +216 -0
- package/Tests/Server/Utils/SecurityEvent/DetectionRuleEvaluator.test.ts +142 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsSeverityRepair.test.ts +140 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsSeverityRepairClickhouseIntegration.test.ts +542 -0
- package/Tests/Server/Utils/Telemetry/ChangeEventRow.test.ts +743 -0
- package/Tests/Server/Utils/Telemetry/RuntimeMetrics.test.ts +465 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/Messages/Alert.test.ts +202 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/Messages/Incident.test.ts +194 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/Messages/ScheduledMaintenance.test.ts +231 -0
- package/Tests/Server/Utils/Workspace/Slack/Messages/Alert.test.ts +194 -0
- package/Tests/Server/Utils/Workspace/Slack/Messages/AlertEpisode.test.ts +194 -0
- package/Tests/Server/Utils/Workspace/Slack/Messages/Incident.test.ts +194 -0
- package/Tests/Server/Utils/Workspace/Slack/Messages/IncidentEpisode.test.ts +194 -0
- package/Tests/Server/Utils/Workspace/Slack/Messages/ScheduledMaintenance.test.ts +247 -0
- package/Tests/Server/Utils/Workspace/Slack/SlackMarkdownSectionSplit.test.ts +1209 -0
- package/Tests/Types/AI/AIInsightEvidence.test.ts +206 -0
- package/Tests/Types/API/HostnameFromAuthority.test.ts +20 -10
- package/Tests/Types/API/HostnameIPv6.test.ts +149 -0
- package/Tests/Types/BaseDatabase/DatabaseCommonInteractionPropsUtilAnonymous.test.ts +144 -0
- package/Tests/Types/Call/CallProvider.test.ts +528 -0
- package/Tests/Types/Database/CanonicalModelInstance.test.ts +190 -0
- package/Tests/Types/Kubernetes/KubernetesCostIngest.test.ts +236 -0
- package/Tests/Types/OnCallDutyPolicy/ScheduleTimeline.test.ts +736 -0
- package/Tests/Types/OnCallDutyPolicy/ScheduleTimelineLayout.test.ts +996 -0
- package/Tests/Types/SecurityEvent/SigmaRule.test.ts +142 -0
- package/Tests/Types/Workflow/Components/JSON.test.ts +182 -0
- package/Tests/UI/Components/BasicFormDropdownNormalization.test.tsx +116 -1
- package/Tests/UI/Components/Dropdown/DropdownAsyncOptions.test.tsx +81 -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 +165 -171
- package/Tests/UI/Components/EditionLabelLicenseStatus.test.tsx +1586 -0
- package/Tests/UI/Components/EditionLabelLicenseWritesGuard.test.tsx +157 -0
- package/Tests/UI/Components/EventAttachmentList.test.tsx +174 -0
- package/Tests/UI/Components/Forms/BasicFormBurnRateTemplateDefaults.test.tsx +395 -0
- package/Tests/UI/Components/Forms/BasicFormCollapsibleSections.test.tsx +286 -0
- package/Tests/UI/Components/Forms/FormSummary.test.tsx +128 -0
- package/Tests/UI/Components/Graphs/DayUptimeGraph.test.tsx +49 -2
- package/Tests/UI/Components/MarkdownConverters.test.ts +684 -0
- package/Tests/UI/Components/ModelListEmptyState.test.tsx +289 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableQueryChange.test.tsx +365 -0
- package/Tests/UI/Components/OpenAuthenticatedUrl.test.ts +358 -0
- package/Tests/UI/Components/SessionAwareImage.test.tsx +496 -0
- package/Tests/UI/Components/TelemetryHistogramZeroBuckets.test.tsx +190 -0
- package/Tests/UI/Components/TelemetryViewer/TelemetryViewerEmptyContent.test.tsx +131 -0
- package/Tests/UI/Components/TooltipInteractive.test.tsx +97 -0
- package/Tests/UI/EsbuildEnterpriseAlias.test.ts +1127 -0
- package/Tests/UI/MicrosoftTeams/MicrosoftTeamsChatsCardInstallGuidance.test.tsx +1 -1
- package/Tests/UI/Monitor/EvaluationLogListTimestamps.test.tsx +367 -0
- package/Tests/UI/Utils/API/BaseAPIRefreshSession.test.ts +1087 -0
- package/Tests/UI/Utils/API/DashboardHost.ts +12 -0
- package/Tests/UI/Utils/API/FakeAxiosServer.ts +183 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +10 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +2 -0
- package/Tests/UI/Utils/Cookie.test.ts +440 -0
- package/Tests/UI/Utils/ModelAPIRequestClient.test.ts +278 -0
- package/Tests/UI/Utils/Navigation.test.ts +33 -0
- package/Tests/UI/Utils/PricingPlan.test.ts +295 -0
- package/Tests/UI/Utils/Realtime.test.ts +759 -0
- package/Tests/UI/Utils/Telemetry/Telemetry.test.ts +500 -0
- package/Tests/Utils/APIInstanceDispatch.test.ts +311 -0
- package/Tests/Utils/HostAddressUtil.test.ts +138 -0
- package/Tests/Utils/Monitor/MonitorDestinationUtil.test.ts +313 -0
- package/Tests/Utils/Monitor/MonitoringIntervalUtil.test.ts +304 -0
- package/Tests/Utils/SecurityEvent/GoogleSecOpsAlertNormalizerSeverity.test.ts +565 -0
- package/Tests/Utils/StatusPage/UptimeDailyAggregateUtil.test.ts +248 -0
- package/Types/API/Hostname.ts +63 -16
- package/Types/BaseDatabase/DatabaseCommonInteractionPropsUtil.ts +40 -0
- 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/MonitorEvaluationSummary.ts +3 -0
- package/Types/Monitor/MonitorStep.ts +6 -1
- package/Types/Monitor/ProxmoxAlertTemplates.ts +1 -1
- package/Types/OnCallDutyPolicy/ScheduleTimeline.ts +507 -0
- package/Types/OnCallDutyPolicy/ScheduleTimelineLayout.ts +589 -0
- package/Types/Realtime/EventName.ts +11 -0
- package/Types/SecurityEvent/DetectionFindingConstants.ts +14 -0
- package/Types/SecurityEvent/OcsfSeverity.ts +31 -26
- package/Types/SecurityEvent/SigmaRule.ts +51 -0
- package/Types/SecurityEvent/ThreatIntelConstants.ts +18 -0
- package/Types/StatusPage/UptimeDailyAggregate.ts +110 -0
- package/UI/Components/AttachmentList/EventAttachmentList.tsx +30 -2
- package/UI/Components/Dashboard/DashboardVariableControl.tsx +12 -2
- package/UI/Components/Dropdown/Dropdown.tsx +6 -1
- package/UI/Components/EditionLabel/EditionLabel.tsx +808 -1195
- package/UI/Components/EditionLabel/LicenseManager.ts +119 -0
- package/UI/Components/EventItem/EventItem.tsx +12 -1
- package/UI/Components/Forms/BasicForm.tsx +151 -126
- package/UI/Components/Forms/CollapsibleFormSection.tsx +63 -0
- package/UI/Components/Forms/Fields/FormField.tsx +10 -4
- package/UI/Components/Forms/FormSummary.tsx +7 -0
- package/UI/Components/Forms/Types/Field.ts +10 -0
- package/UI/Components/Graphs/DayUptimeGraph.tsx +123 -15
- package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
- package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +2 -1
- package/UI/Components/Markdown.tsx/SessionAwareImage.tsx +122 -0
- package/UI/Components/ModelList/ModelList.tsx +11 -1
- package/UI/Components/ModelTable/BaseModelTable.tsx +34 -5
- package/UI/Components/ModelTable/TableView.tsx +1 -1
- package/UI/Components/MonitorGraphs/Uptime.tsx +69 -0
- package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +28 -12
- package/UI/Components/TelemetryViewer/components/TelemetryHistogram.tsx +8 -1
- package/UI/Components/Tooltip/Tooltip.tsx +8 -1
- package/UI/Utils/API/API.ts +173 -12
- package/UI/Utils/API/RequestOptions.ts +11 -0
- package/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.ts +31 -7
- package/UI/Utils/ModelAPI/ModelAPI.ts +30 -9
- package/UI/Utils/Navigation.ts +9 -0
- package/UI/Utils/OpenAuthenticatedUrl.ts +154 -0
- package/UI/Utils/Realtime.ts +176 -30
- package/UI/esbuild-enterprise.js +263 -0
- package/Utils/API.ts +14 -5
- package/Utils/EnterpriseLicense/EnterpriseLicenseUsage.ts +7 -2
- package/Utils/HostAddressUtil.ts +94 -0
- package/Utils/Monitor/MonitorDestinationUtil.ts +157 -0
- package/Utils/Monitor/MonitoringIntervalUtil.ts +436 -0
- package/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.ts +157 -7
- package/Utils/SecurityEvent/Sigma/SigmaRuleParser.ts +9 -17
- package/Utils/Slo/SloBurnRateTemplate.ts +2 -2
- 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/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/OnCallDutyPolicyScheduleCalendarFeed.js +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProjectOnCallCalendarFeed.js +1 -1
- package/build/dist/Models/DatabaseModels/ProjectOnCallCalendarFeed.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserOnCallCalendarFeed.js +1 -1
- package/build/dist/Models/DatabaseModels/UserOnCallCalendarFeed.js.map +1 -1
- package/build/dist/Server/API/AIBillingAPI.js +1 -1
- package/build/dist/Server/API/AIBillingAPI.js.map +1 -1
- package/build/dist/Server/API/AIInsightAPI.js +1 -4
- package/build/dist/Server/API/AIInsightAPI.js.map +1 -1
- package/build/dist/Server/API/AIInvestigationAPI.js +1 -4
- package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
- package/build/dist/Server/API/AIReadinessAPI.js +1 -3
- package/build/dist/Server/API/AIReadinessAPI.js.map +1 -1
- package/build/dist/Server/API/AlertAPI.js +1 -1
- package/build/dist/Server/API/AlertAPI.js.map +1 -1
- package/build/dist/Server/API/AutoRemediationAPI.js +1 -4
- package/build/dist/Server/API/AutoRemediationAPI.js.map +1 -1
- package/build/dist/Server/API/BaseAPI.js +33 -0
- package/build/dist/Server/API/BaseAPI.js.map +1 -1
- package/build/dist/Server/API/BaseAnalyticsAPI.js +55 -10
- package/build/dist/Server/API/BaseAnalyticsAPI.js.map +1 -1
- package/build/dist/Server/API/BillingAPI.js +2 -2
- package/build/dist/Server/API/BillingAPI.js.map +1 -1
- package/build/dist/Server/API/BillingInvoiceAPI.js +1 -1
- package/build/dist/Server/API/BillingInvoiceAPI.js.map +1 -1
- package/build/dist/Server/API/BillingPaymentMethodAPI.js +2 -2
- package/build/dist/Server/API/BillingPaymentMethodAPI.js.map +1 -1
- package/build/dist/Server/API/CodeFixRunAPI.js +1 -3
- package/build/dist/Server/API/CodeFixRunAPI.js.map +1 -1
- package/build/dist/Server/API/CommonAPI.js +50 -5
- package/build/dist/Server/API/CommonAPI.js.map +1 -1
- package/build/dist/Server/API/DashboardAPI.js +12 -12
- package/build/dist/Server/API/DashboardAPI.js.map +1 -1
- package/build/dist/Server/API/GlobalConfigAPI.js +158 -342
- package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
- package/build/dist/Server/API/IncidentAPI.js +2 -2
- package/build/dist/Server/API/IncidentAPI.js.map +1 -1
- package/build/dist/Server/API/IncidentEpisodeAPI.js +1 -1
- package/build/dist/Server/API/IncidentEpisodeAPI.js.map +1 -1
- package/build/dist/Server/API/NotificationAPI.js +1 -1
- package/build/dist/Server/API/NotificationAPI.js.map +1 -1
- package/build/dist/Server/API/OnCallCalendarAPI.js +1 -4
- package/build/dist/Server/API/OnCallCalendarAPI.js.map +1 -1
- package/build/dist/Server/API/OnCallDutyPolicyAPI.js +6 -0
- package/build/dist/Server/API/OnCallDutyPolicyAPI.js.map +1 -1
- package/build/dist/Server/API/OnCallReadinessAPI.js +4 -1
- package/build/dist/Server/API/OnCallReadinessAPI.js.map +1 -1
- package/build/dist/Server/API/OnCallScheduleTimelineAPI.js +494 -0
- package/build/dist/Server/API/OnCallScheduleTimelineAPI.js.map +1 -0
- package/build/dist/Server/API/ProjectAPI.js +1 -1
- package/build/dist/Server/API/ProjectAPI.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/ScheduledMaintenanceAPI.js +1 -1
- package/build/dist/Server/API/ScheduledMaintenanceAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +218 -76
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/API/TeamMemberAPI.js +11 -4
- package/build/dist/Server/API/TeamMemberAPI.js.map +1 -1
- package/build/dist/Server/API/UserCallAPI.js +2 -2
- package/build/dist/Server/API/UserCallAPI.js.map +1 -1
- package/build/dist/Server/API/UserEmailAPI.js +2 -2
- package/build/dist/Server/API/UserEmailAPI.js.map +1 -1
- package/build/dist/Server/API/UserIncomingCallNumberAPI.js +2 -2
- package/build/dist/Server/API/UserIncomingCallNumberAPI.js.map +1 -1
- package/build/dist/Server/API/UserMicrosoftTeamsAPI.js +1 -1
- package/build/dist/Server/API/UserMicrosoftTeamsAPI.js.map +1 -1
- package/build/dist/Server/API/UserSlackAPI.js +1 -1
- package/build/dist/Server/API/UserSlackAPI.js.map +1 -1
- package/build/dist/Server/API/UserSmsAPI.js +2 -2
- package/build/dist/Server/API/UserSmsAPI.js.map +1 -1
- package/build/dist/Server/API/UserTotpAuthAPI.js +1 -1
- package/build/dist/Server/API/UserTotpAuthAPI.js.map +1 -1
- package/build/dist/Server/API/UserWebAuthnAPI.js +2 -2
- package/build/dist/Server/API/UserWebAuthnAPI.js.map +1 -1
- package/build/dist/Server/API/UserWebhookAPI.js +1 -1
- package/build/dist/Server/API/UserWebhookAPI.js.map +1 -1
- package/build/dist/Server/API/UserWhatsAppAPI.js +2 -2
- package/build/dist/Server/API/UserWhatsAppAPI.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/Index.js +2 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/MasterAdminAuthorization.js +11 -2
- package/build/dist/Server/Middleware/MasterAdminAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/UserAuthorization.js +94 -15
- package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
- package/build/dist/Server/Services/ApiKeyPermissionService.js +80 -4
- package/build/dist/Server/Services/ApiKeyPermissionService.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 +171 -0
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/DetectionRuleService.js +4 -4
- package/build/dist/Server/Services/DetectionRuleService.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/MonitorProbeService.js +90 -17
- package/build/dist/Server/Services/MonitorProbeService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +45 -4
- 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/OnCallDutyPolicyChildService.js +170 -0
- package/build/dist/Server/Services/OnCallDutyPolicyChildService.js.map +1 -0
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js +2 -2
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js +2 -2
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleTeamService.js +2 -2
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleTeamService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleUserService.js +2 -2
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleUserService.js.map +1 -1
- package/build/dist/Server/Services/PayAsYouGoBillingService.js +20 -27
- package/build/dist/Server/Services/PayAsYouGoBillingService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +231 -0
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/RumSessionPinService.js +198 -16
- package/build/dist/Server/Services/RumSessionPinService.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/TeamPermissionService.js +89 -27
- package/build/dist/Server/Services/TeamPermissionService.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/ThreatIntelFeedService.js +5 -4
- package/build/dist/Server/Services/ThreatIntelFeedService.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/BasePermission.js +9 -6
- package/build/dist/Server/Types/Database/Permissions/BasePermission.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/Index.js +60 -6
- package/build/dist/Server/Types/Database/Permissions/Index.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/TablePermission.js +24 -16
- 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/Utils/AI/AIChatPrivacyFilter.js +7 -0
- package/build/dist/Server/Utils/AI/AIChatPrivacyFilter.js.map +1 -1
- package/build/dist/Server/Utils/AI/AIRunPrivacyFilter.js +7 -0
- package/build/dist/Server/Utils/AI/AIRunPrivacyFilter.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/MasterAdminPageAccess.js +39 -0
- package/build/dist/Server/Utils/MasterAdminPageAccess.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/AffectedResourceList.js +96 -0
- package/build/dist/Server/Utils/Monitor/AffectedResourceList.js.map +1 -0
- 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/MonitorAlert.js +3 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +449 -261
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js +3 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.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/Realtime.js +126 -37
- package/build/dist/Server/Utils/Realtime.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js +7 -25
- package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOpsSeverityRepair.js +127 -0
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOpsSeverityRepair.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.js +1 -1
- package/build/dist/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.js +3 -2
- package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.js +4 -8
- package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.js.map +1 -1
- 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/BaseDatabase/DatabaseCommonInteractionPropsUtil.js +31 -1
- package/build/dist/Types/BaseDatabase/DatabaseCommonInteractionPropsUtil.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/OnCallDutyPolicy/ScheduleTimeline.js +321 -0
- package/build/dist/Types/OnCallDutyPolicy/ScheduleTimeline.js.map +1 -0
- package/build/dist/Types/OnCallDutyPolicy/ScheduleTimelineLayout.js +372 -0
- package/build/dist/Types/OnCallDutyPolicy/ScheduleTimelineLayout.js.map +1 -0
- package/build/dist/Types/Realtime/EventName.js +10 -0
- package/build/dist/Types/Realtime/EventName.js.map +1 -1
- package/build/dist/Types/SecurityEvent/DetectionFindingConstants.js +11 -0
- package/build/dist/Types/SecurityEvent/DetectionFindingConstants.js.map +1 -1
- package/build/dist/Types/SecurityEvent/OcsfSeverity.js +30 -25
- package/build/dist/Types/SecurityEvent/OcsfSeverity.js.map +1 -1
- package/build/dist/Types/SecurityEvent/SigmaRule.js +47 -0
- package/build/dist/Types/SecurityEvent/SigmaRule.js.map +1 -1
- package/build/dist/Types/SecurityEvent/ThreatIntelConstants.js +14 -0
- package/build/dist/Types/SecurityEvent/ThreatIntelConstants.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/AttachmentList/EventAttachmentList.js +9 -4
- package/build/dist/UI/Components/AttachmentList/EventAttachmentList.js.map +1 -1
- package/build/dist/UI/Components/Dashboard/DashboardVariableControl.js +10 -2
- package/build/dist/UI/Components/Dashboard/DashboardVariableControl.js.map +1 -1
- package/build/dist/UI/Components/Dropdown/Dropdown.js +5 -1
- package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js +425 -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/EventItem/EventItem.js +2 -2
- package/build/dist/UI/Components/EventItem/EventItem.js.map +1 -1
- package/build/dist/UI/Components/Forms/BasicForm.js +70 -64
- package/build/dist/UI/Components/Forms/BasicForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/CollapsibleFormSection.js +27 -0
- package/build/dist/UI/Components/Forms/CollapsibleFormSection.js.map +1 -0
- package/build/dist/UI/Components/Forms/Fields/FormField.js +10 -7
- package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
- package/build/dist/UI/Components/Forms/FormSummary.js +7 -0
- package/build/dist/UI/Components/Forms/FormSummary.js.map +1 -1
- 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/Markdown.tsx/MarkdownConverters.js +0 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +2 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/SessionAwareImage.js +84 -0
- package/build/dist/UI/Components/Markdown.tsx/SessionAwareImage.js.map +1 -0
- 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/ModelTable/BaseModelTable.js +14 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/TableView.js +1 -1
- package/build/dist/UI/Components/ModelTable/TableView.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/UI/Components/TelemetryViewer/components/TelemetryHistogram.js +8 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js.map +1 -1
- package/build/dist/UI/Components/Tooltip/Tooltip.js +2 -1
- package/build/dist/UI/Components/Tooltip/Tooltip.js.map +1 -1
- package/build/dist/UI/Utils/API/API.js +143 -19
- package/build/dist/UI/Utils/API/API.js.map +1 -1
- package/build/dist/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.js +21 -7
- package/build/dist/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.js.map +1 -1
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +26 -9
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
- package/build/dist/UI/Utils/Navigation.js +8 -0
- package/build/dist/UI/Utils/Navigation.js.map +1 -1
- package/build/dist/UI/Utils/OpenAuthenticatedUrl.js +92 -0
- package/build/dist/UI/Utils/OpenAuthenticatedUrl.js.map +1 -0
- package/build/dist/UI/Utils/Realtime.js +120 -15
- package/build/dist/UI/Utils/Realtime.js.map +1 -1
- package/build/dist/Utils/API.js +13 -5
- package/build/dist/Utils/API.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/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/SecurityEvent/GoogleSecOpsAlertNormalizer.js +123 -6
- package/build/dist/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.js.map +1 -1
- package/build/dist/Utils/SecurityEvent/Sigma/SigmaRuleParser.js +4 -18
- package/build/dist/Utils/SecurityEvent/Sigma/SigmaRuleParser.js.map +1 -1
- package/build/dist/Utils/Slo/SloBurnRateTemplate.js +2 -2
- 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/SecurityEventsSideMenu.test.tsx +0 -247
- package/Tests/App/Dashboard/SecurityEventsTableColumns.test.tsx +0 -382
- 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
|
@@ -64,7 +64,7 @@ const ARRAY_COLUMNS: Set<string> = new Set<string>([
|
|
|
64
64
|
* under its original spelling — which is exactly the flattened source
|
|
65
65
|
* payload key, so rules written against raw UDM/OCSF field paths work.
|
|
66
66
|
*/
|
|
67
|
-
const FIELD_ALIASES: Record<string, string> = {
|
|
67
|
+
export const FIELD_ALIASES: Record<string, string> = {
|
|
68
68
|
user: "principalUser",
|
|
69
69
|
username: "principalUser",
|
|
70
70
|
"user.name": "principalUser",
|
|
@@ -3,7 +3,10 @@ import LIMIT_MAX from "../../../../Types/Database/LimitMax";
|
|
|
3
3
|
import OneUptimeDate from "../../../../Types/Date";
|
|
4
4
|
import { JSONObject } from "../../../../Types/JSON";
|
|
5
5
|
import ObjectID from "../../../../Types/ObjectID";
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
THREAT_INTEL_DEFAULT_POLL_INTERVAL_IN_MINUTES,
|
|
8
|
+
THREAT_INTEL_DEFAULT_VALID_DAYS,
|
|
9
|
+
} from "../../../../Types/SecurityEvent/ThreatIntelConstants";
|
|
7
10
|
import StixPatternParser, {
|
|
8
11
|
ParsedIndicatorValue,
|
|
9
12
|
} from "../../../../Utils/SecurityEvent/ThreatIntel/StixPatternParser";
|
|
@@ -146,7 +149,8 @@ export default class ThreatIntelFeedPoller {
|
|
|
146
149
|
for (const feed of feeds) {
|
|
147
150
|
const intervalInMinutes: number = Math.max(
|
|
148
151
|
1,
|
|
149
|
-
feed.pollIntervalInMinutes ||
|
|
152
|
+
feed.pollIntervalInMinutes ||
|
|
153
|
+
THREAT_INTEL_DEFAULT_POLL_INTERVAL_IN_MINUTES,
|
|
150
154
|
);
|
|
151
155
|
|
|
152
156
|
if (feed.lastPolledAt) {
|
|
@@ -18,6 +18,9 @@ import {
|
|
|
18
18
|
THREAT_INDICATOR_ID_ATTRIBUTE,
|
|
19
19
|
THREAT_INDICATOR_TYPE_ATTRIBUTE,
|
|
20
20
|
THREAT_INDICATOR_VALUE_ATTRIBUTE,
|
|
21
|
+
THREAT_INTEL_FIRST_MATCH_WINDOW_IN_MINUTES,
|
|
22
|
+
THREAT_INTEL_MATCH_MAX_LOOKBACK_IN_MINUTES,
|
|
23
|
+
THREAT_INTEL_MAX_INDICATORS_PER_EVALUATION,
|
|
21
24
|
THREAT_INTEL_PRODUCT_NAME,
|
|
22
25
|
THREAT_INTEL_SERVICE_NAME,
|
|
23
26
|
THREAT_MATCH_COUNT_ATTRIBUTE,
|
|
@@ -64,14 +67,9 @@ import {
|
|
|
64
67
|
* only moves forward.
|
|
65
68
|
*/
|
|
66
69
|
|
|
67
|
-
// Cap on one evaluation's scan, whatever lastEvaluatedAt says.
|
|
68
|
-
const MAX_LOOKBACK_IN_MINUTES: number = 24 * 60;
|
|
69
|
-
|
|
70
|
-
// First-ever evaluation window for a feed.
|
|
71
|
-
const DEFAULT_WINDOW_IN_MINUTES: number = 15;
|
|
72
|
-
|
|
73
70
|
// One alert per distinct indicator value per cycle, at most.
|
|
74
|
-
export const MAX_GROUPS_PER_EVALUATION: number =
|
|
71
|
+
export const MAX_GROUPS_PER_EVALUATION: number =
|
|
72
|
+
THREAT_INTEL_MAX_INDICATORS_PER_EVALUATION;
|
|
75
73
|
|
|
76
74
|
export interface ThreatIntelMatchResult {
|
|
77
75
|
feedId: string;
|
|
@@ -157,12 +155,15 @@ export default class ThreatIntelMatcher {
|
|
|
157
155
|
|
|
158
156
|
const earliestAllowed: Date = OneUptimeDate.addRemoveMinutes(
|
|
159
157
|
endTime,
|
|
160
|
-
-
|
|
158
|
+
-THREAT_INTEL_MATCH_MAX_LOOKBACK_IN_MINUTES,
|
|
161
159
|
);
|
|
162
160
|
|
|
163
161
|
let startTime: Date = feed.lastEvaluatedAt
|
|
164
162
|
? feed.lastEvaluatedAt
|
|
165
|
-
: OneUptimeDate.addRemoveMinutes(
|
|
163
|
+
: OneUptimeDate.addRemoveMinutes(
|
|
164
|
+
endTime,
|
|
165
|
+
-THREAT_INTEL_FIRST_MATCH_WINDOW_IN_MINUTES,
|
|
166
|
+
);
|
|
166
167
|
|
|
167
168
|
if (OneUptimeDate.isBefore(startTime, earliestAllowed)) {
|
|
168
169
|
startTime = earliestAllowed;
|
|
@@ -36,6 +36,35 @@ import WorkspaceProjectAuthTokenService from "../../../Services/WorkspaceProject
|
|
|
36
36
|
import SSRFProtection from "../../SSRFProtection";
|
|
37
37
|
|
|
38
38
|
export default class SlackUtil extends WorkspaceBase {
|
|
39
|
+
/*
|
|
40
|
+
* Block Kit limits. A section's text may be at most 3000 characters, a
|
|
41
|
+
* message may carry at most 50 blocks and a modal view at most 100. Going
|
|
42
|
+
* over any of them makes Slack reject the whole message (invalid_blocks),
|
|
43
|
+
* not just the offending block.
|
|
44
|
+
*/
|
|
45
|
+
public static readonly SECTION_TEXT_MAX_LENGTH: number = 3000;
|
|
46
|
+
public static readonly MAX_BLOCKS_PER_MESSAGE: number = 50;
|
|
47
|
+
public static readonly MAX_BLOCKS_PER_MODAL: number = 100;
|
|
48
|
+
|
|
49
|
+
/*
|
|
50
|
+
* How many sections one markdown payload may expand into — about 30,000
|
|
51
|
+
* characters, several times the longest incident or alert body we send.
|
|
52
|
+
* The 50-block ceiling alone would allow 150,000, but Slack also rejects a
|
|
53
|
+
* message whose blocks are too long overall (msg_blocks_too_long) without
|
|
54
|
+
* documenting where that starts, and text that long is better read in
|
|
55
|
+
* OneUptime anyway.
|
|
56
|
+
*/
|
|
57
|
+
public static readonly MAX_SECTIONS_PER_MARKDOWN_BLOCK: number = 10;
|
|
58
|
+
|
|
59
|
+
// Ends the last section of a markdown payload that did not fit.
|
|
60
|
+
public static readonly TRUNCATED_SECTION_NOTE: string =
|
|
61
|
+
"\n\n_… (truncated — see OneUptime for the full text)_";
|
|
62
|
+
|
|
63
|
+
// Closes and reopens a ``` code block that a section boundary cuts through.
|
|
64
|
+
private static readonly CODE_FENCE: string = "```";
|
|
65
|
+
private static readonly CODE_FENCE_CLOSE: string = "\n```";
|
|
66
|
+
private static readonly CODE_FENCE_REOPEN: string = "```\n";
|
|
67
|
+
|
|
39
68
|
public static isValidSlackIncomingWebhookUrl(
|
|
40
69
|
incomingWebhookUrl: URL | string,
|
|
41
70
|
): boolean {
|
|
@@ -1294,7 +1323,7 @@ export default class SlackUtil extends WorkspaceBase {
|
|
|
1294
1323
|
}
|
|
1295
1324
|
|
|
1296
1325
|
// Slack has a limit of 50 blocks per message. Split into batches if needed.
|
|
1297
|
-
const maxBlocksPerMessage: number =
|
|
1326
|
+
const maxBlocksPerMessage: number = SlackUtil.MAX_BLOCKS_PER_MESSAGE;
|
|
1298
1327
|
let lastThread: WorkspaceThread | undefined;
|
|
1299
1328
|
|
|
1300
1329
|
if (blocks.length <= maxBlocksPerMessage) {
|
|
@@ -2056,6 +2085,8 @@ export default class SlackUtil extends WorkspaceBase {
|
|
|
2056
2085
|
},
|
|
2057
2086
|
blocks: this.getBlocksFromWorkspaceMessagePayload({
|
|
2058
2087
|
messageBlocks: data.payloadModalBlock.blocks,
|
|
2088
|
+
// A view takes twice as many blocks as a message.
|
|
2089
|
+
maxBlocks: SlackUtil.MAX_BLOCKS_PER_MODAL,
|
|
2059
2090
|
}),
|
|
2060
2091
|
};
|
|
2061
2092
|
|
|
@@ -2064,6 +2095,93 @@ export default class SlackUtil extends WorkspaceBase {
|
|
|
2064
2095
|
return modalBlock;
|
|
2065
2096
|
}
|
|
2066
2097
|
|
|
2098
|
+
@CaptureSpan()
|
|
2099
|
+
public static override getBlocksFromWorkspaceMessagePayload(data: {
|
|
2100
|
+
messageBlocks: Array<WorkspaceMessageBlock>;
|
|
2101
|
+
/*
|
|
2102
|
+
* The most blocks the result may hold. Defaults to a message's limit;
|
|
2103
|
+
* a modal view passes its own.
|
|
2104
|
+
*/
|
|
2105
|
+
maxBlocks?: number | undefined;
|
|
2106
|
+
}): Array<JSONObject> {
|
|
2107
|
+
const maxBlocks: number =
|
|
2108
|
+
data.maxBlocks ?? SlackUtil.MAX_BLOCKS_PER_MESSAGE;
|
|
2109
|
+
|
|
2110
|
+
/*
|
|
2111
|
+
* A markdown payload is the one block whose size we do not control: it
|
|
2112
|
+
* carries whatever the incident or alert says, root cause included, and
|
|
2113
|
+
* a section holds at most 3000 characters. So here it may expand into
|
|
2114
|
+
* several consecutive sections (see getMarkdownBlocks). Every other
|
|
2115
|
+
* block type still goes through the base class one block at a time, so
|
|
2116
|
+
* it renders exactly as before — one block, or none for an unknown type.
|
|
2117
|
+
*
|
|
2118
|
+
* The extra sections must not take the message past maxBlocks, or Slack
|
|
2119
|
+
* rejects all of it. So the other blocks are rendered first, every
|
|
2120
|
+
* markdown payload is counted for the one section it always had, and
|
|
2121
|
+
* only what is left of the budget is handed out as extra sections, in
|
|
2122
|
+
* message order, so the body a caller puts first is the last thing to
|
|
2123
|
+
* be cut short. A message that is already at the limit keeps one
|
|
2124
|
+
* section per markdown payload, exactly as many blocks as before.
|
|
2125
|
+
*/
|
|
2126
|
+
const renderedBlocks: Array<Array<JSONObject> | null> = [];
|
|
2127
|
+
let blockCountBeforeSplitting: number = 0;
|
|
2128
|
+
|
|
2129
|
+
for (const messageBlock of data.messageBlocks) {
|
|
2130
|
+
if (messageBlock._type === "WorkspacePayloadMarkdown") {
|
|
2131
|
+
// Rendered in the second pass, once the budget is known.
|
|
2132
|
+
renderedBlocks.push(null);
|
|
2133
|
+
blockCountBeforeSplitting += 1;
|
|
2134
|
+
continue;
|
|
2135
|
+
}
|
|
2136
|
+
|
|
2137
|
+
const otherBlocks: Array<JSONObject> =
|
|
2138
|
+
super.getBlocksFromWorkspaceMessagePayload({
|
|
2139
|
+
messageBlocks: [messageBlock],
|
|
2140
|
+
});
|
|
2141
|
+
|
|
2142
|
+
renderedBlocks.push(otherBlocks);
|
|
2143
|
+
blockCountBeforeSplitting += otherBlocks.length;
|
|
2144
|
+
}
|
|
2145
|
+
|
|
2146
|
+
let spareBlocks: number = Math.max(
|
|
2147
|
+
0,
|
|
2148
|
+
maxBlocks - blockCountBeforeSplitting,
|
|
2149
|
+
);
|
|
2150
|
+
|
|
2151
|
+
const blocks: Array<JSONObject> = [];
|
|
2152
|
+
|
|
2153
|
+
for (let index: number = 0; index < data.messageBlocks.length; index++) {
|
|
2154
|
+
// Empty, not null, for a block of an unknown type — it stays dropped.
|
|
2155
|
+
const rendered: Array<JSONObject> | null = renderedBlocks[index] ?? null;
|
|
2156
|
+
|
|
2157
|
+
if (rendered !== null) {
|
|
2158
|
+
blocks.push(...rendered);
|
|
2159
|
+
continue;
|
|
2160
|
+
}
|
|
2161
|
+
|
|
2162
|
+
const sections: Array<JSONObject> = this.getMarkdownBlocks({
|
|
2163
|
+
payloadMarkdownBlock: data.messageBlocks[
|
|
2164
|
+
index
|
|
2165
|
+
] as WorkspacePayloadMarkdown,
|
|
2166
|
+
maxSections:
|
|
2167
|
+
1 +
|
|
2168
|
+
Math.min(spareBlocks, SlackUtil.MAX_SECTIONS_PER_MARKDOWN_BLOCK - 1),
|
|
2169
|
+
});
|
|
2170
|
+
|
|
2171
|
+
spareBlocks -= sections.length - 1;
|
|
2172
|
+
blocks.push(...sections);
|
|
2173
|
+
}
|
|
2174
|
+
|
|
2175
|
+
return blocks;
|
|
2176
|
+
}
|
|
2177
|
+
|
|
2178
|
+
/*
|
|
2179
|
+
* One section block. Text over Slack's limit cannot be split here, so it
|
|
2180
|
+
* is cut short with a note instead of being sent as a block Slack would
|
|
2181
|
+
* reject; messages go through getBlocksFromWorkspaceMessagePayload, which
|
|
2182
|
+
* splits it across sections. Text within the limit renders as it always
|
|
2183
|
+
* has.
|
|
2184
|
+
*/
|
|
2067
2185
|
@CaptureSpan()
|
|
2068
2186
|
public static override getMarkdownBlock(data: {
|
|
2069
2187
|
payloadMarkdownBlock: WorkspacePayloadMarkdown;
|
|
@@ -2071,21 +2189,316 @@ export default class SlackUtil extends WorkspaceBase {
|
|
|
2071
2189
|
logger.debug("Getting markdown block with data:", {} as LogAttributes);
|
|
2072
2190
|
logger.debug(data, {} as LogAttributes);
|
|
2073
2191
|
|
|
2074
|
-
const markdownBlock: JSONObject = {
|
|
2075
|
-
|
|
2076
|
-
|
|
2077
|
-
|
|
2078
|
-
text: data.payloadMarkdownBlock.text
|
|
2079
|
-
? SlackifyMarkdown(data.payloadMarkdownBlock.text)
|
|
2080
|
-
: "",
|
|
2081
|
-
},
|
|
2082
|
-
};
|
|
2192
|
+
const markdownBlock: JSONObject = this.getMarkdownBlocks({
|
|
2193
|
+
payloadMarkdownBlock: data.payloadMarkdownBlock,
|
|
2194
|
+
maxSections: 1,
|
|
2195
|
+
})[0]!;
|
|
2083
2196
|
|
|
2084
2197
|
logger.debug("Markdown block generated:", {} as LogAttributes);
|
|
2085
2198
|
logger.debug(markdownBlock, {} as LogAttributes);
|
|
2086
2199
|
return markdownBlock;
|
|
2087
2200
|
}
|
|
2088
2201
|
|
|
2202
|
+
/*
|
|
2203
|
+
* A markdown payload as consecutive section blocks, each within Slack's
|
|
2204
|
+
* 3000-character limit. Text that fits is one section, byte for byte what
|
|
2205
|
+
* a markdown payload has always rendered to (empty text included).
|
|
2206
|
+
*/
|
|
2207
|
+
@CaptureSpan()
|
|
2208
|
+
public static getMarkdownBlocks(data: {
|
|
2209
|
+
payloadMarkdownBlock: WorkspacePayloadMarkdown;
|
|
2210
|
+
// Defaults to MAX_SECTIONS_PER_MARKDOWN_BLOCK.
|
|
2211
|
+
maxSections?: number | undefined;
|
|
2212
|
+
}): Array<JSONObject> {
|
|
2213
|
+
const text: string = data.payloadMarkdownBlock.text
|
|
2214
|
+
? SlackifyMarkdown(data.payloadMarkdownBlock.text)
|
|
2215
|
+
: "";
|
|
2216
|
+
|
|
2217
|
+
const sectionTexts: Array<string> = this.splitSectionText({
|
|
2218
|
+
text: text,
|
|
2219
|
+
maxSections: data.maxSections,
|
|
2220
|
+
});
|
|
2221
|
+
|
|
2222
|
+
if (sectionTexts.length > 1) {
|
|
2223
|
+
logger.debug(
|
|
2224
|
+
`Markdown block of ${text.length} characters split into ${sectionTexts.length} sections.`,
|
|
2225
|
+
{} as LogAttributes,
|
|
2226
|
+
);
|
|
2227
|
+
}
|
|
2228
|
+
|
|
2229
|
+
return sectionTexts.map((sectionText: string): JSONObject => {
|
|
2230
|
+
return {
|
|
2231
|
+
type: "section",
|
|
2232
|
+
text: {
|
|
2233
|
+
type: "mrkdwn",
|
|
2234
|
+
text: sectionText,
|
|
2235
|
+
},
|
|
2236
|
+
};
|
|
2237
|
+
});
|
|
2238
|
+
}
|
|
2239
|
+
|
|
2240
|
+
/*
|
|
2241
|
+
* Splits slackified text into section texts of at most
|
|
2242
|
+
* SECTION_TEXT_MAX_LENGTH characters, at the least disruptive places
|
|
2243
|
+
* available:
|
|
2244
|
+
*
|
|
2245
|
+
* 1. between paragraphs (a blank line),
|
|
2246
|
+
* 2. between list items, keeping an item together with the indented
|
|
2247
|
+
* bullets under it,
|
|
2248
|
+
* 3. between lines,
|
|
2249
|
+
* 4. and only inside a line that is on its own longer than the limit,
|
|
2250
|
+
* preferring a space there.
|
|
2251
|
+
*
|
|
2252
|
+
* The text between two sections is the newlines they were split at and
|
|
2253
|
+
* nothing else, so the sections read back in order give every line of the
|
|
2254
|
+
* original. A section that ends inside a ``` code block closes it and the
|
|
2255
|
+
* next one reopens it.
|
|
2256
|
+
*
|
|
2257
|
+
* Beyond maxSections the rest is dropped and the last section ends with
|
|
2258
|
+
* TRUNCATED_SECTION_NOTE. Text that fits is returned as it is.
|
|
2259
|
+
*/
|
|
2260
|
+
public static splitSectionText(data: {
|
|
2261
|
+
text: string;
|
|
2262
|
+
// Defaults to MAX_SECTIONS_PER_MARKDOWN_BLOCK; never less than one.
|
|
2263
|
+
maxSections?: number | undefined;
|
|
2264
|
+
}): Array<string> {
|
|
2265
|
+
const maxLength: number = SlackUtil.SECTION_TEXT_MAX_LENGTH;
|
|
2266
|
+
|
|
2267
|
+
if (data.text.length <= maxLength) {
|
|
2268
|
+
return [data.text];
|
|
2269
|
+
}
|
|
2270
|
+
|
|
2271
|
+
const maxSections: number = Math.max(
|
|
2272
|
+
1,
|
|
2273
|
+
data.maxSections ?? SlackUtil.MAX_SECTIONS_PER_MARKDOWN_BLOCK,
|
|
2274
|
+
);
|
|
2275
|
+
|
|
2276
|
+
/*
|
|
2277
|
+
* Any piece may need to reopen a code block at its start and close one
|
|
2278
|
+
* at its end, so when the text has code blocks every piece leaves room
|
|
2279
|
+
* for both.
|
|
2280
|
+
*/
|
|
2281
|
+
const pieceMaxLength: number = data.text.includes(SlackUtil.CODE_FENCE)
|
|
2282
|
+
? maxLength -
|
|
2283
|
+
SlackUtil.CODE_FENCE_REOPEN.length -
|
|
2284
|
+
SlackUtil.CODE_FENCE_CLOSE.length
|
|
2285
|
+
: maxLength;
|
|
2286
|
+
|
|
2287
|
+
let pieces: Array<string> = this.splitTextAtBoundaries(
|
|
2288
|
+
data.text,
|
|
2289
|
+
pieceMaxLength,
|
|
2290
|
+
);
|
|
2291
|
+
|
|
2292
|
+
if (pieces.length === 0) {
|
|
2293
|
+
// Nothing but whitespace — there is nothing to show.
|
|
2294
|
+
return [""];
|
|
2295
|
+
}
|
|
2296
|
+
|
|
2297
|
+
const isTruncated: boolean = pieces.length > maxSections;
|
|
2298
|
+
|
|
2299
|
+
if (isTruncated) {
|
|
2300
|
+
pieces = pieces.slice(0, maxSections);
|
|
2301
|
+
|
|
2302
|
+
/*
|
|
2303
|
+
* Shorten the last piece until the note fits after it, with the same
|
|
2304
|
+
* boundary preferences — whole paragraphs, items or lines where it
|
|
2305
|
+
* can.
|
|
2306
|
+
*/
|
|
2307
|
+
const lastPiece: string = pieces[pieces.length - 1] || "";
|
|
2308
|
+
|
|
2309
|
+
pieces[pieces.length - 1] =
|
|
2310
|
+
this.splitTextAtBoundaries(
|
|
2311
|
+
lastPiece,
|
|
2312
|
+
pieceMaxLength - SlackUtil.TRUNCATED_SECTION_NOTE.length,
|
|
2313
|
+
)[0] || "";
|
|
2314
|
+
}
|
|
2315
|
+
|
|
2316
|
+
const sections: Array<string> = [];
|
|
2317
|
+
let isInsideCodeBlock: boolean = false;
|
|
2318
|
+
|
|
2319
|
+
for (let index: number = 0; index < pieces.length; index++) {
|
|
2320
|
+
const piece: string = pieces[index] || "";
|
|
2321
|
+
const isLastPiece: boolean = index === pieces.length - 1;
|
|
2322
|
+
|
|
2323
|
+
let section: string = isInsideCodeBlock
|
|
2324
|
+
? SlackUtil.CODE_FENCE_REOPEN + piece
|
|
2325
|
+
: piece;
|
|
2326
|
+
|
|
2327
|
+
// An odd number of fences opens or closes a code block.
|
|
2328
|
+
const fenceCount: number = piece.split(SlackUtil.CODE_FENCE).length - 1;
|
|
2329
|
+
|
|
2330
|
+
if (fenceCount % 2 === 1) {
|
|
2331
|
+
isInsideCodeBlock = !isInsideCodeBlock;
|
|
2332
|
+
}
|
|
2333
|
+
|
|
2334
|
+
/*
|
|
2335
|
+
* The last piece of text that was not truncated ends where the
|
|
2336
|
+
* original ends, so a code block still open there was never closed
|
|
2337
|
+
* and is left alone.
|
|
2338
|
+
*/
|
|
2339
|
+
if (isInsideCodeBlock && (!isLastPiece || isTruncated)) {
|
|
2340
|
+
section += SlackUtil.CODE_FENCE_CLOSE;
|
|
2341
|
+
}
|
|
2342
|
+
|
|
2343
|
+
if (isLastPiece && isTruncated) {
|
|
2344
|
+
section += SlackUtil.TRUNCATED_SECTION_NOTE;
|
|
2345
|
+
}
|
|
2346
|
+
|
|
2347
|
+
sections.push(section);
|
|
2348
|
+
}
|
|
2349
|
+
|
|
2350
|
+
return sections;
|
|
2351
|
+
}
|
|
2352
|
+
|
|
2353
|
+
/*
|
|
2354
|
+
* Pieces of at most maxLength characters, split at the boundaries listed
|
|
2355
|
+
* on splitSectionText. Each piece is trimmed of the newlines it was split
|
|
2356
|
+
* at; a piece with nothing but whitespace is dropped.
|
|
2357
|
+
*/
|
|
2358
|
+
private static splitTextAtBoundaries(
|
|
2359
|
+
text: string,
|
|
2360
|
+
maxLength: number,
|
|
2361
|
+
): Array<string> {
|
|
2362
|
+
const pieces: Array<string> = this.packSectionPieces({
|
|
2363
|
+
units: text.split("\n\n"),
|
|
2364
|
+
separator: "\n\n",
|
|
2365
|
+
maxLength: maxLength,
|
|
2366
|
+
splitOversizedUnit: (paragraph: string): Array<string> => {
|
|
2367
|
+
return this.packSectionPieces({
|
|
2368
|
+
units: this.groupIndentedLines(paragraph),
|
|
2369
|
+
separator: "\n",
|
|
2370
|
+
maxLength: maxLength,
|
|
2371
|
+
splitOversizedUnit: (lineGroup: string): Array<string> => {
|
|
2372
|
+
return this.packSectionPieces({
|
|
2373
|
+
units: lineGroup.split("\n"),
|
|
2374
|
+
separator: "\n",
|
|
2375
|
+
maxLength: maxLength,
|
|
2376
|
+
splitOversizedUnit: (line: string): Array<string> => {
|
|
2377
|
+
return this.hardCutLine(line, maxLength);
|
|
2378
|
+
},
|
|
2379
|
+
});
|
|
2380
|
+
},
|
|
2381
|
+
});
|
|
2382
|
+
},
|
|
2383
|
+
});
|
|
2384
|
+
|
|
2385
|
+
return pieces
|
|
2386
|
+
.map((piece: string): string => {
|
|
2387
|
+
return piece.replace(/^[\r\n]+|[\r\n]+$/g, "");
|
|
2388
|
+
})
|
|
2389
|
+
.filter((piece: string): boolean => {
|
|
2390
|
+
return piece.trim().length > 0;
|
|
2391
|
+
});
|
|
2392
|
+
}
|
|
2393
|
+
|
|
2394
|
+
/*
|
|
2395
|
+
* Greedily joins units with the separator into pieces of at most
|
|
2396
|
+
* maxLength. A unit that does not fit next to the piece being built
|
|
2397
|
+
* starts a new piece rather than being broken up; only a unit longer than
|
|
2398
|
+
* maxLength on its own is broken, by splitOversizedUnit. The last of its
|
|
2399
|
+
* parts stays open, so the unit after it can still join it.
|
|
2400
|
+
*/
|
|
2401
|
+
private static packSectionPieces(data: {
|
|
2402
|
+
units: Array<string>;
|
|
2403
|
+
separator: string;
|
|
2404
|
+
maxLength: number;
|
|
2405
|
+
splitOversizedUnit: (unit: string) => Array<string>;
|
|
2406
|
+
}): Array<string> {
|
|
2407
|
+
const pieces: Array<string> = [];
|
|
2408
|
+
|
|
2409
|
+
// null until the first unit, so an empty unit still keeps its separator.
|
|
2410
|
+
let currentPiece: string | null = null;
|
|
2411
|
+
|
|
2412
|
+
for (const unit of data.units) {
|
|
2413
|
+
if (currentPiece !== null) {
|
|
2414
|
+
const joined: string = currentPiece + data.separator + unit;
|
|
2415
|
+
|
|
2416
|
+
if (joined.length <= data.maxLength) {
|
|
2417
|
+
currentPiece = joined;
|
|
2418
|
+
continue;
|
|
2419
|
+
}
|
|
2420
|
+
|
|
2421
|
+
pieces.push(currentPiece);
|
|
2422
|
+
currentPiece = null;
|
|
2423
|
+
}
|
|
2424
|
+
|
|
2425
|
+
if (unit.length <= data.maxLength) {
|
|
2426
|
+
currentPiece = unit;
|
|
2427
|
+
continue;
|
|
2428
|
+
}
|
|
2429
|
+
|
|
2430
|
+
const parts: Array<string> = data.splitOversizedUnit(unit);
|
|
2431
|
+
|
|
2432
|
+
pieces.push(...parts.slice(0, -1));
|
|
2433
|
+
currentPiece = parts[parts.length - 1] ?? null;
|
|
2434
|
+
}
|
|
2435
|
+
|
|
2436
|
+
if (currentPiece !== null) {
|
|
2437
|
+
pieces.push(currentPiece);
|
|
2438
|
+
}
|
|
2439
|
+
|
|
2440
|
+
return pieces;
|
|
2441
|
+
}
|
|
2442
|
+
|
|
2443
|
+
/*
|
|
2444
|
+
* The lines of a paragraph, with every indented line attached to the line
|
|
2445
|
+
* above it. slackify-markdown indents a nested bullet under its list item
|
|
2446
|
+
* — the Affected Resources list puts a resource's namespace, workload and
|
|
2447
|
+
* node there — so a split between groups never strands those bullets at
|
|
2448
|
+
* the top of the next section, away from the item they describe.
|
|
2449
|
+
*/
|
|
2450
|
+
private static groupIndentedLines(paragraph: string): Array<string> {
|
|
2451
|
+
const groups: Array<string> = [];
|
|
2452
|
+
|
|
2453
|
+
for (const line of paragraph.split("\n")) {
|
|
2454
|
+
const isIndented: boolean = line.startsWith(" ") || line.startsWith("\t");
|
|
2455
|
+
const lastGroupIndex: number = groups.length - 1;
|
|
2456
|
+
|
|
2457
|
+
if (isIndented && lastGroupIndex >= 0) {
|
|
2458
|
+
groups[lastGroupIndex] = (groups[lastGroupIndex] || "") + "\n" + line;
|
|
2459
|
+
continue;
|
|
2460
|
+
}
|
|
2461
|
+
|
|
2462
|
+
groups.push(line);
|
|
2463
|
+
}
|
|
2464
|
+
|
|
2465
|
+
return groups;
|
|
2466
|
+
}
|
|
2467
|
+
|
|
2468
|
+
/*
|
|
2469
|
+
* Cuts a single line longer than maxLength. Each cut is made after the
|
|
2470
|
+
* last space that still leaves the piece at least half full, so words stay
|
|
2471
|
+
* whole where the line has spaces, and never between the two halves of a
|
|
2472
|
+
* surrogate pair (an emoji), which would leave both pieces invalid.
|
|
2473
|
+
*/
|
|
2474
|
+
private static hardCutLine(line: string, maxLength: number): Array<string> {
|
|
2475
|
+
const pieces: Array<string> = [];
|
|
2476
|
+
let rest: string = line;
|
|
2477
|
+
|
|
2478
|
+
while (rest.length > maxLength) {
|
|
2479
|
+
let cutAt: number = maxLength;
|
|
2480
|
+
|
|
2481
|
+
const lastSpaceIndex: number = rest.lastIndexOf(" ", maxLength - 1);
|
|
2482
|
+
|
|
2483
|
+
if (lastSpaceIndex + 1 >= Math.ceil(maxLength / 2)) {
|
|
2484
|
+
cutAt = lastSpaceIndex + 1;
|
|
2485
|
+
} else {
|
|
2486
|
+
const charCodeBeforeCut: number = rest.charCodeAt(cutAt - 1);
|
|
2487
|
+
|
|
2488
|
+
if (charCodeBeforeCut >= 0xd800 && charCodeBeforeCut <= 0xdbff) {
|
|
2489
|
+
cutAt -= 1;
|
|
2490
|
+
}
|
|
2491
|
+
}
|
|
2492
|
+
|
|
2493
|
+
pieces.push(rest.slice(0, cutAt));
|
|
2494
|
+
rest = rest.slice(cutAt);
|
|
2495
|
+
}
|
|
2496
|
+
|
|
2497
|
+
pieces.push(rest);
|
|
2498
|
+
|
|
2499
|
+
return pieces;
|
|
2500
|
+
}
|
|
2501
|
+
|
|
2089
2502
|
@CaptureSpan()
|
|
2090
2503
|
public static override async isUserInDirectMessageChannel(data: {
|
|
2091
2504
|
authToken: string;
|
|
@@ -37,6 +37,24 @@ import WebAuthnTestUtil, {
|
|
|
37
37
|
import "../../../../App/FeatureSet/Accounts/src/Utils/i18n";
|
|
38
38
|
import LoginPage from "../../../../App/FeatureSet/Accounts/src/Pages/Login";
|
|
39
39
|
|
|
40
|
+
/*
|
|
41
|
+
* These tests expect the SSO choice next to the password and passkey ones,
|
|
42
|
+
* which the page offers only on the Enterprise Edition or the cloud. Pin the
|
|
43
|
+
* edition instead of inheriting it from the environment (CI's config.env sets
|
|
44
|
+
* BILLING_ENABLED=true); LoginSsoEdition.test.tsx covers the Community case.
|
|
45
|
+
*/
|
|
46
|
+
jest.mock("../../../UI/Config", () => {
|
|
47
|
+
const actual: Record<string, unknown> = jest.requireActual(
|
|
48
|
+
"../../../UI/Config",
|
|
49
|
+
) as Record<string, unknown>;
|
|
50
|
+
|
|
51
|
+
return {
|
|
52
|
+
...actual,
|
|
53
|
+
BILLING_ENABLED: false,
|
|
54
|
+
IS_ENTERPRISE_EDITION: true,
|
|
55
|
+
};
|
|
56
|
+
});
|
|
57
|
+
|
|
40
58
|
jest.mock("../../../UI/Components/EditionLabel/EditionLabel", () => {
|
|
41
59
|
return {
|
|
42
60
|
__esModule: true,
|