@oneuptime/common 12.0.14 → 12.0.16
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/Index.ts +10 -0
- package/Models/AnalyticsModels/LogCountBaseline.ts +174 -0
- package/Models/AnalyticsModels/SecurityEvent.ts +794 -0
- package/Models/AnalyticsModels/Span.ts +29 -1
- package/Models/AnalyticsModels/SpanCountBaseline.ts +198 -0
- package/Models/DatabaseModels/Alert.ts +42 -0
- package/Models/DatabaseModels/AlertMeasurement.ts +1114 -0
- package/Models/DatabaseModels/AlertMeasurementValue.ts +501 -0
- package/Models/DatabaseModels/AlertStateTimeline.ts +10 -2
- package/Models/DatabaseModels/BillingPaymentMethod.ts +8 -10
- package/Models/DatabaseModels/DetectionRule.ts +487 -0
- package/Models/DatabaseModels/GlobalOidc.ts +20 -0
- package/Models/DatabaseModels/GlobalSso.ts +20 -0
- package/Models/DatabaseModels/GoogleSecOpsConnection.ts +382 -0
- package/Models/DatabaseModels/Incident.ts +42 -0
- package/Models/DatabaseModels/IncidentMeasurement.ts +1114 -0
- package/Models/DatabaseModels/IncidentMeasurementValue.ts +501 -0
- package/Models/DatabaseModels/IncidentStateTimeline.ts +10 -2
- package/Models/DatabaseModels/IncomingCallPolicyLabelRule.ts +36 -0
- package/Models/DatabaseModels/IncomingCallPolicyOwnerRule.ts +42 -0
- package/Models/DatabaseModels/Index.ts +20 -0
- package/Models/DatabaseModels/Label.ts +11 -0
- package/Models/DatabaseModels/LlmCostBudget.ts +655 -0
- package/Models/DatabaseModels/LlmModelPrice.ts +481 -0
- package/Models/DatabaseModels/LogSavedView.ts +87 -0
- package/Models/DatabaseModels/MarketingConversion.ts +222 -10
- package/Models/DatabaseModels/MetricSavedView.ts +59 -0
- package/Models/DatabaseModels/NetworkDeviceLinkRule.ts +46 -0
- package/Models/DatabaseModels/OnCallDutyPolicyLabelRule.ts +36 -0
- package/Models/DatabaseModels/OnCallDutyPolicyOwnerRule.ts +42 -0
- package/Models/DatabaseModels/OnCallDutyPolicyScheduleLabelRule.ts +36 -0
- package/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerRule.ts +42 -0
- package/Models/DatabaseModels/Probe.ts +21 -0
- package/Models/DatabaseModels/RunbookLabelRule.ts +36 -0
- package/Models/DatabaseModels/RunbookOwnerRule.ts +42 -0
- package/Models/DatabaseModels/ScheduledMaintenanceMeasurement.ts +1104 -0
- package/Models/DatabaseModels/ScheduledMaintenanceMeasurementValue.ts +491 -0
- package/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.ts +10 -2
- package/Models/DatabaseModels/StatusPage.ts +7 -4
- package/Models/DatabaseModels/StatusPageLabelRule.ts +36 -0
- package/Models/DatabaseModels/StatusPageOwnerRule.ts +42 -0
- package/Models/DatabaseModels/TableView.ts +15 -0
- package/Models/DatabaseModels/Team.ts +13 -0
- package/Models/DatabaseModels/TeamMember.ts +8 -0
- package/Models/DatabaseModels/TraceSavedView.ts +52 -0
- package/Models/DatabaseModels/WorkflowLabelRule.ts +36 -0
- package/Models/DatabaseModels/WorkflowOwnerRule.ts +42 -0
- package/Server/API/StatusPageAPI.ts +29 -4
- package/Server/API/TelemetryAPI.ts +252 -6
- package/Server/API/UserAPI.ts +88 -0
- package/Server/EnvironmentConfig.ts +43 -1
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787800000000-AddScopeToNetworkDeviceLinkRule.ts +19 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787900000000-AddRestrictToAttachedProjectsToGlobalSso.ts +40 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1788000000000-AddDetectionRuleAndGoogleSecOpsConnection.ts +88 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1788100000000-AddMeasurements.ts +457 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1788200000000-AddLlmCostBudget.ts +97 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1788300000000-AddLlmModelPrice.ts +45 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1788400000000-AddMarketingConversionAttribution.ts +105 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1788500000000-RemoveLlmCostBudgetAlertColumns.ts +77 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +16 -0
- package/Server/Middleware/IdentityRateLimit.ts +672 -0
- package/Server/Middleware/SlackAuthorization.ts +43 -6
- package/Server/Middleware/UserAuthorization.ts +236 -26
- package/Server/Middleware/WhatsAppAuthorization.ts +43 -3
- package/Server/Services/AccessTokenService.ts +15 -2
- package/Server/Services/AlertMeasurementService.ts +302 -0
- package/Server/Services/AlertMeasurementValueService.ts +508 -0
- package/Server/Services/AlertService.ts +50 -0
- package/Server/Services/AlertStateTimelineService.ts +54 -0
- package/Server/Services/DetectionRuleService.ts +74 -0
- package/Server/Services/GlobalOidcProjectService.ts +126 -1
- package/Server/Services/GlobalOidcService.ts +132 -0
- package/Server/Services/GlobalSsoProjectService.ts +126 -1
- package/Server/Services/GlobalSsoService.ts +132 -0
- package/Server/Services/GoogleSecOpsConnectionService.ts +89 -0
- package/Server/Services/IncidentMeasurementService.ts +304 -0
- package/Server/Services/IncidentMeasurementValueService.ts +523 -0
- package/Server/Services/IncidentService.ts +51 -0
- package/Server/Services/IncidentStateTimelineService.ts +54 -0
- package/Server/Services/Index.ts +30 -0
- package/Server/Services/LlmCostBudgetService.ts +93 -0
- package/Server/Services/LlmModelPriceService.ts +202 -0
- package/Server/Services/LogAggregationService.ts +1106 -2
- package/Server/Services/LogCountBaselineService.ts +163 -0
- package/Server/Services/MutableMetricService.ts +30 -9
- package/Server/Services/ScheduledMaintenanceMeasurementService.ts +311 -0
- package/Server/Services/ScheduledMaintenanceMeasurementValueService.ts +546 -0
- package/Server/Services/ScheduledMaintenanceService.ts +53 -0
- package/Server/Services/ScheduledMaintenanceStateTimelineService.ts +188 -1
- package/Server/Services/SecurityEventService.ts +104 -0
- package/Server/Services/SpanCountBaselineService.ts +173 -0
- package/Server/Services/StatusPageService.ts +4 -3
- package/Server/Services/TelemetryUsageBillingService.ts +17 -2
- package/Server/Services/UserEmailService.ts +4 -4
- package/Server/Services/UserService.ts +284 -51
- package/Server/Services/UserTotpAuthService.ts +27 -86
- package/Server/Services/UserWebAuthnService.ts +26 -86
- package/Server/Types/Billing/MeteredPlan/AllMeteredPlans.ts +14 -0
- package/Server/Types/Database/Permissions/TenantPermission.ts +10 -0
- package/Server/Types/Database/QueryHelper.ts +1 -1
- package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +1 -1
- package/Server/Utils/AI/Toolbox/Index.ts +6 -0
- package/Server/Utils/AI/Toolbox/SecurityEventTools.ts +349 -0
- package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +13 -4
- package/Server/Utils/Attribution.ts +130 -34
- package/Server/Utils/CronTab.ts +73 -0
- package/Server/Utils/GlobalSsoAuthorization.ts +175 -0
- package/Server/Utils/Marketing/ConversionUploadProvider.ts +123 -11
- package/Server/Utils/Marketing/Providers/GoogleAds.ts +71 -8
- package/Server/Utils/Marketing/Providers/LinkedIn.ts +55 -17
- package/Server/Utils/Marketing/Providers/Meta.ts +53 -19
- package/Server/Utils/Marketing/Providers/MicrosoftAds.ts +38 -11
- package/Server/Utils/Marketing/Providers/Reddit.ts +46 -16
- package/Server/Utils/Measurement/MeasurementDefinitionValidator.ts +209 -0
- package/Server/Utils/Measurement/MeasurementMetricWriter.ts +189 -0
- package/Server/Utils/Monitor/Criteria/APIRequestCriteria.ts +48 -33
- package/Server/Utils/Monitor/Criteria/CountAnomaly.ts +182 -0
- package/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.ts +35 -30
- package/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.ts +33 -28
- package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +475 -47
- package/Server/Utils/Monitor/Criteria/ExternalStatusPageMonitorCriteria.ts +35 -30
- package/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.ts +34 -28
- package/Server/Utils/Monitor/Criteria/LogMonitorCriteria.ts +132 -0
- package/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.ts +33 -28
- package/Server/Utils/Monitor/Criteria/SecurityEventsMonitorCriteria.ts +35 -0
- package/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.ts +69 -40
- package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +35 -29
- package/Server/Utils/Monitor/Criteria/TraceMonitorCriteria.ts +132 -0
- package/Server/Utils/Monitor/DataToProcess.ts +2 -0
- package/Server/Utils/Monitor/MonitorCriteriaDataExtractor.ts +14 -0
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +23 -0
- package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +20 -0
- package/Server/Utils/Monitor/MonitorResource.ts +177 -21
- package/Server/Utils/Monitor/MonitorStepResourceIdentity.ts +1 -0
- package/Server/Utils/Monitor/MonitorStepsReferenceExtractor.ts +1 -0
- package/Server/Utils/SecurityEvent/DetectionRuleEvaluator.ts +548 -0
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.ts +262 -0
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.ts +212 -0
- package/Server/Utils/SecurityEvent/SecurityEventRow.ts +101 -0
- package/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.ts +635 -0
- package/Server/Utils/StatusPageContentSecurityPolicy.ts +56 -0
- package/Server/Utils/StatusPageCustomizationAccess.ts +117 -0
- package/Server/Utils/Telemetry/LlmCostBudgetEvaluator.ts +379 -0
- package/Server/Utils/Telemetry/LlmSpan.ts +83 -4
- package/Server/Utils/Telemetry/LogErrorPatternSql.ts +136 -0
- package/Server/Utils/UserPermission/UserPermission.ts +57 -1
- package/Tests/App/Dashboard/AlertsSideMenu.test.tsx +4 -0
- package/Tests/App/Dashboard/CreatePageEntryPointPermissions.test.tsx +306 -0
- package/Tests/App/Dashboard/DangerZone.test.tsx +11 -0
- package/Tests/App/Dashboard/IncidentsSideMenu.test.tsx +4 -0
- package/Tests/App/Dashboard/LogMonitorAttributeOperatorPreview.test.tsx +459 -0
- package/Tests/App/Dashboard/OverviewCustomFields.test.tsx +24 -0
- package/Tests/App/Dashboard/ScheduledMaintenanceSideMenu.test.tsx +6 -0
- package/Tests/Models/DatabaseModels/DomainRoleTierCoverage.test.ts +323 -0
- package/Tests/Models/DatabaseModels/ProjectSharedResources.test.ts +386 -0
- package/Tests/Server/API/LogErrorPatternAPI.test.ts +811 -0
- package/Tests/Server/API/StatusPageCustomizationOrigin.test.ts +348 -0
- package/Tests/Server/API/UserAuthenticationAPI.test.ts +11 -0
- package/Tests/Server/API/UserProjectsAPI.test.ts +11 -2
- package/Tests/Server/API/UserTwoFactorAuthAdminAPI.test.ts +918 -0
- package/Tests/Server/Infrastructure/LocalCache.test.ts +149 -0
- package/Tests/Server/Infrastructure/Postgres/FixTotpOtpUrlAlgorithmMigration.test.ts +9 -59
- package/Tests/Server/Infrastructure/Postgres/SchemaMigrationsOrdering.test.ts +227 -0
- package/Tests/Server/Middleware/SlackAuthorization.test.ts +149 -0
- package/Tests/Server/Middleware/UserAuthorization.test.ts +27 -13
- package/Tests/Server/Middleware/UserAuthorizationGlobalSsoGovernance.test.ts +1455 -0
- package/Tests/Server/Middleware/UserAuthorizationSSOProvider.test.ts +91 -2
- package/Tests/Server/Middleware/WhatsAppAuthorization.test.ts +233 -0
- package/Tests/Server/Services/AccessTokenProjectUserGrant.test.ts +249 -0
- package/Tests/Server/Services/AlertMeasurementService.test.ts +665 -0
- package/Tests/Server/Services/AlertMeasurementValueService.test.ts +389 -0
- package/Tests/Server/Services/DetectionRuleService.test.ts +254 -0
- package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +21 -8
- package/Tests/Server/Services/GlobalSsoProviderAuthorization.test.ts +1242 -0
- package/Tests/Server/Services/IncidentMeasurementService.test.ts +394 -0
- package/Tests/Server/Services/IncidentMeasurementValueService.test.ts +816 -0
- package/Tests/Server/Services/LlmCostBudgetService.test.ts +104 -0
- package/Tests/Server/Services/LogAggregationAttributeOperators.test.ts +405 -0
- package/Tests/Server/Services/LogErrorPatternAggregation.test.ts +804 -0
- package/Tests/Server/Services/MonitorResourceProbeAgreementHydration.test.ts +459 -0
- package/Tests/Server/Services/MonitorResourceProbeAgreementReuse.test.ts +10 -0
- package/Tests/Server/Services/MutableMetricNameRouting.test.ts +83 -0
- package/Tests/Server/Services/ScheduledMaintenanceMeasurementService.test.ts +750 -0
- package/Tests/Server/Services/ScheduledMaintenanceMeasurementValueService.test.ts +478 -0
- package/Tests/Server/Services/UserAuthenticationService.test.ts +216 -4
- package/Tests/Server/Services/UserTwoFactorAuthAdmin.test.ts +1190 -0
- package/Tests/Server/Types/AnalyticsDatabase/AggregateUtilBucketTimestamp.test.ts +416 -0
- package/Tests/Server/Types/Database/Permissions/ScopedRoleSharedResourceAccess.test.ts +466 -0
- package/Tests/Server/Types/Database/QueryHelperManyToManyAndEmptyValues.test.ts +551 -0
- package/Tests/Server/Types/Database/QueryHelperOperators.test.ts +265 -0
- package/Tests/Server/Types/Database/QueryHelperTextAndStructuralOperators.test.ts +206 -0
- package/Tests/Server/Types/Database/SelectUtil.test.ts +348 -0
- package/Tests/Server/Utils/AnalyticsDatabase/ClusterAwareSchema.test.ts +6 -0
- package/Tests/Server/Utils/AnalyticsDatabase/FractionalAttributeThreshold.test.ts +224 -0
- package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +172 -2
- package/Tests/Server/Utils/Attribution.test.ts +228 -1
- package/Tests/Server/Utils/CronTab.test.ts +116 -0
- package/Tests/Server/Utils/GlobalSSOToken.test.ts +581 -0
- package/Tests/Server/Utils/GlobalSsoAuthorization.test.ts +1401 -0
- package/Tests/Server/Utils/Marketing/AdUploadableConversionTypes.test.ts +315 -0
- package/Tests/Server/Utils/Marketing/ConversionUploadProvider.test.ts +124 -7
- package/Tests/Server/Utils/Marketing/GoogleAds.test.ts +253 -1
- package/Tests/Server/Utils/Marketing/LinkedIn.test.ts +282 -0
- package/Tests/Server/Utils/Marketing/Meta.test.ts +304 -0
- package/Tests/Server/Utils/Marketing/MicrosoftAds.test.ts +263 -0
- package/Tests/Server/Utils/Marketing/Reddit.test.ts +259 -0
- package/Tests/Server/Utils/Measurement/MeasurementDefinitionValidator.test.ts +322 -0
- package/Tests/Server/Utils/Measurement/MeasurementMetricWriter.test.ts +373 -0
- package/Tests/Server/Utils/Monitor/Criteria/APIRequestCriteriaEvaluateOverTime.test.ts +508 -0
- package/Tests/Server/Utils/Monitor/Criteria/APIRequestCriteriaPortTimings.test.ts +30 -9
- package/Tests/Server/Utils/Monitor/Criteria/CountAnomaly.test.ts +221 -0
- package/Tests/Server/Utils/Monitor/Criteria/EvaluateOverTime.test.ts +987 -0
- package/Tests/Server/Utils/Monitor/Criteria/ExternalStatusPageMonitorCriteria.test.ts +916 -0
- package/Tests/Server/Utils/Monitor/Criteria/LogMonitorCriteria.test.ts +236 -0
- package/Tests/Server/Utils/Monitor/Criteria/ProfileMonitorCriteria.test.ts +382 -0
- package/Tests/Server/Utils/Monitor/Criteria/SecurityEventsMonitorCriteria.test.ts +147 -0
- package/Tests/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.test.ts +1219 -0
- package/Tests/Server/Utils/Monitor/Criteria/TraceMonitorCriteria.test.ts +274 -0
- package/Tests/Server/Utils/Monitor/MonitorResourceIngestedStepSelection.test.ts +86 -0
- package/Tests/Server/Utils/Monitor/SecurityEventsMonitorDataExtractor.test.ts +93 -0
- package/Tests/Server/Utils/SecurityEvent/DetectionRuleEvaluator.test.ts +660 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsClient.test.ts +308 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPoller.test.ts +271 -0
- package/Tests/Server/Utils/SecurityEvent/SecurityEventRow.test.ts +272 -0
- package/Tests/Server/Utils/SecurityEvent/SigmaClickhouseCompiler.test.ts +511 -0
- package/Tests/Server/Utils/StatusPageContentSecurityPolicy.test.ts +136 -0
- package/Tests/Server/Utils/StatusPageCustomizationAccess.test.ts +223 -0
- package/Tests/Server/Utils/Telemetry/LlmCostBudgetEvaluator.test.ts +497 -0
- package/Tests/Server/Utils/Telemetry/LlmSpan.test.ts +380 -0
- package/Tests/Server/Utils/Telemetry/LogErrorPatternSql.test.ts +207 -0
- package/Tests/Server/Utils/UserPermission/ProjectUserGrant.test.ts +293 -0
- package/Tests/Types/Monitor/MonitorStepConfigHelpers.test.ts +165 -0
- package/Tests/Types/Monitor/MonitorStepInfraMonitorUtils.test.ts +194 -0
- package/Tests/Types/Monitor/MonitorStepSecurityEventsMonitor.test.ts +201 -0
- package/Tests/Types/NetworkDevice/NetworkDeviceLinkRuleScope.test.ts +215 -0
- package/Tests/Types/SecurityEvent/OcsfEventClass.test.ts +105 -0
- package/Tests/Types/SecurityEvent/OcsfSeverity.test.ts +111 -0
- package/Tests/Types/Telemetry/LlmCostCatalog.test.ts +516 -0
- package/Tests/UI/Components/ActiveFilterChipsOperatorValues.test.tsx +222 -0
- package/Tests/UI/Components/BulkActionPermissionGating.test.tsx +296 -0
- package/Tests/UI/Components/CardModelDetailPermissionGating.test.tsx +305 -0
- package/Tests/UI/Components/CustomFields/CustomFieldsDetail.test.tsx +23 -0
- package/Tests/UI/Components/DictionaryFilterOperatorDisplay.test.ts +239 -0
- package/Tests/UI/Components/DisabledButtonTooltip.test.tsx +267 -0
- package/Tests/UI/Components/DuplicateModel.test.tsx +37 -0
- package/Tests/UI/Components/Forms/FormSubmitAnalytics.test.tsx +206 -0
- package/Tests/UI/Components/ModelCardPermissionGating.test.tsx +348 -0
- package/Tests/UI/Components/ModelDelete.test.tsx +25 -1
- package/Tests/UI/Components/ModelFormCreatePermission.test.tsx +342 -0
- package/Tests/UI/Components/ModelTable/BaseModelTablePermissionGating.test.tsx +680 -0
- package/Tests/UI/Components/OrderedStatesListCreateGate.test.tsx +174 -0
- package/Tests/UI/Components/SavedViewsDropdownSearch.test.tsx +1127 -0
- package/Tests/UI/Components/SavedViewsFacetSection.test.tsx +958 -0
- package/Tests/UI/Components/SavedViewsList.test.ts +699 -0
- package/Tests/UI/Components/SavedViewsSidebarIntegration.test.tsx +640 -0
- package/Tests/UI/Components/SavedViewsSurfaceParity.test.tsx +679 -0
- package/Tests/UI/Components/TableViewLoadFailure.test.tsx +248 -0
- package/Tests/UI/Types/UseComponentOutsideClick.test.tsx +226 -0
- package/Tests/UI/Utils/AIChatExport/ConversationMarkdown.test.ts +774 -0
- package/Tests/UI/Utils/AIChatExport/MarkdownBlocks.test.ts +791 -0
- package/Tests/UI/Utils/AIChatExport/MarkdownSafety.test.ts +544 -0
- package/Tests/UI/Utils/PermissionGate.test.ts +467 -0
- package/Tests/Utils/Analytics.test.ts +187 -0
- package/Tests/Utils/Measurement/MeasurementEvaluator.test.ts +639 -0
- package/Tests/Utils/Monitor/MonitorMetricType.test.ts +80 -0
- package/Tests/Utils/Monitor/MonitorSummarySnapshotUtil.test.ts +1 -0
- package/Tests/Utils/Monitor/NetworkDeviceLinkRuleUtil.test.ts +1576 -0
- package/Tests/Utils/NetworkDevice/DeviceHealthStateUtil.test.ts +433 -0
- package/Tests/Utils/NetworkDiscovery/UnclaimedScanDiagnosis.test.ts +214 -0
- package/Tests/Utils/SecurityEvent/GenericNormalizer.test.ts +204 -0
- package/Tests/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.test.ts +252 -0
- package/Tests/Utils/SecurityEvent/NormalizerHelpers.test.ts +274 -0
- package/Tests/Utils/SecurityEvent/OcsfNormalizer.test.ts +208 -0
- package/Tests/Utils/SecurityEvent/SecurityEventNormalizer.test.ts +172 -0
- package/Tests/Utils/SecurityEvent/SigmaRuleParser.test.ts +471 -0
- package/Tests/Utils/SecurityEvent/UdmNormalizer.test.ts +361 -0
- package/Tests/Utils/Telemetry/CrossSignalScope.test.ts +82 -0
- package/Tests/Utils/Telemetry/LogErrorPattern.test.ts +463 -0
- package/Types/AI/AIChatTypes.ts +1 -0
- package/Types/Alerts/AlertMeasurementAnchorType.ts +14 -0
- package/Types/Alerts/AlertStateRole.ts +11 -0
- package/Types/AnalyticsDatabase/AnalyticsTableName.ts +16 -0
- package/Types/Dashboard/Chart/ChartType.ts +1 -0
- package/Types/Dashboard/DashboardComponentType.ts +2 -0
- package/Types/Dashboard/DashboardComponents/DashboardSecurityEventsFlowComponent.ts +18 -0
- package/Types/Dashboard/DashboardComponents/DashboardSecurityEventsListComponent.ts +16 -0
- package/Types/Incident/IncidentMeasurementAnchorType.ts +34 -0
- package/Types/Incident/IncidentStateRole.ts +14 -0
- package/Types/Marketing/Attribution.ts +75 -0
- package/Types/Marketing/MarketingConversion.ts +43 -1
- package/Types/Measurement/MeasurementAggregationType.ts +43 -0
- package/Types/Measurement/MeasurementAnchorKind.ts +23 -0
- package/Types/Measurement/MeasurementOccurrence.ts +14 -0
- package/Types/Measurement/MeasurementStatus.ts +34 -0
- package/Types/MeteredPlan/ProductType.ts +1 -0
- package/Types/Monitor/CriteriaFilter.ts +12 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +64 -0
- package/Types/Monitor/MonitorStep.ts +28 -0
- package/Types/Monitor/MonitorStepSecurityEventsMonitor.ts +100 -0
- package/Types/Monitor/MonitorType.ts +20 -0
- package/Types/Monitor/SecurityEventsMonitor/SecurityEventsMonitorResponse.ts +17 -0
- package/Types/NetworkDevice/NetworkDeviceLinkRuleScope.ts +51 -0
- package/Types/Permission.ts +399 -2
- package/Types/ScheduledMaintenance/ScheduledMaintenanceMeasurementAnchorType.ts +20 -0
- package/Types/ScheduledMaintenance/ScheduledMaintenanceStateRole.ts +16 -0
- package/Types/SecurityEvent/NormalizedSecurityEvent.ts +92 -0
- package/Types/SecurityEvent/OcsfEventClass.ts +205 -0
- package/Types/SecurityEvent/OcsfSeverity.ts +88 -0
- package/Types/SecurityEvent/SecurityEventFormat.ts +23 -0
- package/Types/SecurityEvent/SigmaRule.ts +70 -0
- package/Types/Telemetry/LlmConventions.ts +20 -1
- package/Types/Telemetry/LlmCostCatalog.ts +557 -0
- package/Types/Telemetry/ServiceType.ts +1 -0
- package/Types/Telemetry/TelemetryRetentionConfig.ts +5 -1
- package/Types/Telemetry/TelemetryType.ts +1 -0
- package/Types/TwoFactorAuthStatus.ts +42 -0
- package/Types/UserAuthenticationStatus.ts +18 -0
- package/UI/Components/ActionButton/ActionButtonSchema.ts +7 -0
- package/UI/Components/BulkUpdate/BulkArchiveActions.tsx +35 -2
- package/UI/Components/BulkUpdate/BulkLabelActions.tsx +34 -1
- package/UI/Components/BulkUpdate/BulkOwnerActions.tsx +45 -1
- package/UI/Components/BulkUpdate/BulkUpdateForm.tsx +3 -0
- package/UI/Components/Button/Button.tsx +37 -2
- package/UI/Components/Card/Card.tsx +6 -0
- package/UI/Components/CustomFields/CustomFieldsDetail.tsx +24 -1
- package/UI/Components/Dictionary/DictionaryFilterOperator.ts +57 -0
- package/UI/Components/DuplicateModel/DuplicateModel.tsx +16 -0
- package/UI/Components/FormModal/BasicFormModal.tsx +12 -0
- package/UI/Components/Forms/BasicForm.tsx +13 -1
- package/UI/Components/Forms/BasicModelForm.tsx +2 -1
- package/UI/Components/Forms/ModelForm.tsx +64 -3
- package/UI/Components/Forms/Utils/FormAnalyticsName.ts +39 -0
- package/UI/Components/List/ListRow.tsx +6 -0
- package/UI/Components/LogsViewer/components/ActiveFilterChips.tsx +34 -7
- package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +7 -40
- package/UI/Components/LogsViewer/components/SavedViewsDropdown.tsx +155 -3
- package/UI/Components/ModelDelete/ModelDelete.tsx +20 -0
- package/UI/Components/ModelDetail/CardModelDetail.tsx +36 -23
- package/UI/Components/ModelFormModal/ModelFormModal.tsx +6 -1
- package/UI/Components/ModelList/ModelList.tsx +21 -2
- package/UI/Components/ModelList/StaticModelList.tsx +11 -0
- package/UI/Components/ModelTable/BaseModelTable.tsx +168 -62
- package/UI/Components/ModelTable/ModelTable.tsx +16 -10
- package/UI/Components/ModelTable/TableView.tsx +36 -4
- package/UI/Components/MoreMenu/MoreMenuItem.tsx +36 -4
- package/UI/Components/OrderedStatesList/Item.tsx +6 -0
- package/UI/Components/OrderedStatesList/OrderedStatesList.tsx +81 -47
- package/UI/Components/ResetObjectID/ResetObjectID.tsx +16 -0
- package/UI/Components/SavedViews/SavedViewsFacetSection.tsx +242 -0
- package/UI/Components/SavedViews/SavedViewsList.ts +168 -0
- package/UI/Components/SavedViews/SavedViewsSearchInput.tsx +46 -0
- package/UI/Components/SavedViews/SavedViewsShowMoreButton.tsx +44 -0
- package/UI/Components/Table/TableRow.tsx +12 -0
- package/UI/Components/TelemetryViewer/components/SavedViewsDropdown.tsx +152 -2
- package/UI/Types/UseComponentOutsideClick.ts +47 -0
- package/UI/Utils/PermissionGate.ts +277 -0
- package/Utils/Analytics.ts +55 -2
- package/Utils/Dashboard/Components/DashboardSecurityEventsFlowComponent.ts +84 -0
- package/Utils/Dashboard/Components/DashboardSecurityEventsListComponent.ts +110 -0
- package/Utils/Dashboard/Components/Index.ts +14 -0
- package/Utils/Measurement/MeasurementEvaluator.ts +359 -0
- package/Utils/Monitor/MonitorMetricType.ts +40 -0
- package/Utils/Monitor/MonitorSummarySnapshotUtil.ts +1 -0
- package/Utils/Monitor/NetworkDeviceLinkRuleUtil.ts +669 -37
- package/Utils/NetworkDevice/DeviceHealthStateUtil.ts +231 -0
- package/Utils/NetworkDiscovery/UnclaimedScanDiagnosis.ts +115 -0
- package/Utils/SecurityEvent/GenericNormalizer.ts +208 -0
- package/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.ts +206 -0
- package/Utils/SecurityEvent/NormalizerHelpers.ts +263 -0
- package/Utils/SecurityEvent/OcsfNormalizer.ts +194 -0
- package/Utils/SecurityEvent/SecurityEventNormalizer.ts +82 -0
- package/Utils/SecurityEvent/Sigma/SigmaRuleParser.ts +579 -0
- package/Utils/SecurityEvent/UdmNormalizer.ts +442 -0
- package/Utils/Telemetry/CrossSignalScope.ts +46 -9
- package/Utils/Telemetry/LogErrorPattern.ts +350 -0
- package/build/dist/Models/AnalyticsModels/Index.js +10 -0
- package/build/dist/Models/AnalyticsModels/Index.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/LogCountBaseline.js +159 -0
- package/build/dist/Models/AnalyticsModels/LogCountBaseline.js.map +1 -0
- package/build/dist/Models/AnalyticsModels/SecurityEvent.js +596 -0
- package/build/dist/Models/AnalyticsModels/SecurityEvent.js.map +1 -0
- package/build/dist/Models/AnalyticsModels/Span.js +24 -1
- package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/SpanCountBaseline.js +181 -0
- package/build/dist/Models/AnalyticsModels/SpanCountBaseline.js.map +1 -0
- package/build/dist/Models/DatabaseModels/Alert.js +43 -0
- package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertMeasurement.js +1143 -0
- package/build/dist/Models/DatabaseModels/AlertMeasurement.js.map +1 -0
- package/build/dist/Models/DatabaseModels/AlertMeasurementValue.js +523 -0
- package/build/dist/Models/DatabaseModels/AlertMeasurementValue.js.map +1 -0
- package/build/dist/Models/DatabaseModels/AlertStateTimeline.js +9 -2
- package/build/dist/Models/DatabaseModels/AlertStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/BillingPaymentMethod.js +10 -11
- package/build/dist/Models/DatabaseModels/BillingPaymentMethod.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DetectionRule.js +517 -0
- package/build/dist/Models/DatabaseModels/DetectionRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/GlobalOidc.js +21 -0
- package/build/dist/Models/DatabaseModels/GlobalOidc.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalSso.js +21 -0
- package/build/dist/Models/DatabaseModels/GlobalSso.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js +410 -0
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +1 -0
- package/build/dist/Models/DatabaseModels/Incident.js +43 -0
- package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentMeasurement.js +1143 -0
- package/build/dist/Models/DatabaseModels/IncidentMeasurement.js.map +1 -0
- package/build/dist/Models/DatabaseModels/IncidentMeasurementValue.js +523 -0
- package/build/dist/Models/DatabaseModels/IncidentMeasurementValue.js.map +1 -0
- package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js +9 -2
- package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncomingCallPolicyLabelRule.js +36 -0
- package/build/dist/Models/DatabaseModels/IncomingCallPolicyLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerRule.js +42 -0
- package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +20 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Label.js +11 -0
- package/build/dist/Models/DatabaseModels/Label.js.map +1 -1
- package/build/dist/Models/DatabaseModels/LlmCostBudget.js +681 -0
- package/build/dist/Models/DatabaseModels/LlmCostBudget.js.map +1 -0
- package/build/dist/Models/DatabaseModels/LlmModelPrice.js +503 -0
- package/build/dist/Models/DatabaseModels/LlmModelPrice.js.map +1 -0
- package/build/dist/Models/DatabaseModels/LogSavedView.js +87 -0
- package/build/dist/Models/DatabaseModels/LogSavedView.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MarketingConversion.js +237 -11
- package/build/dist/Models/DatabaseModels/MarketingConversion.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MetricSavedView.js +59 -0
- package/build/dist/Models/DatabaseModels/MetricSavedView.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceLinkRule.js +47 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceLinkRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyLabelRule.js +36 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyOwnerRule.js +42 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleLabelRule.js +36 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerRule.js +42 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Probe.js +21 -0
- package/build/dist/Models/DatabaseModels/Probe.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RunbookLabelRule.js +36 -0
- package/build/dist/Models/DatabaseModels/RunbookLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RunbookOwnerRule.js +42 -0
- package/build/dist/Models/DatabaseModels/RunbookOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceMeasurement.js +1133 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceMeasurement.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceMeasurementValue.js +515 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceMeasurementValue.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js +9 -2
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPage.js +4 -4
- package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageLabelRule.js +36 -0
- package/build/dist/Models/DatabaseModels/StatusPageLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageOwnerRule.js +42 -0
- package/build/dist/Models/DatabaseModels/StatusPageOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TableView.js +15 -0
- package/build/dist/Models/DatabaseModels/TableView.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Team.js +13 -0
- package/build/dist/Models/DatabaseModels/Team.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TeamMember.js +8 -0
- package/build/dist/Models/DatabaseModels/TeamMember.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TraceSavedView.js +52 -0
- package/build/dist/Models/DatabaseModels/TraceSavedView.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkflowLabelRule.js +36 -0
- package/build/dist/Models/DatabaseModels/WorkflowLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkflowOwnerRule.js +42 -0
- package/build/dist/Models/DatabaseModels/WorkflowOwnerRule.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +25 -4
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/API/TelemetryAPI.js +136 -0
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/API/UserAPI.js +75 -2
- package/build/dist/Server/API/UserAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +35 -1
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787800000000-AddScopeToNetworkDeviceLinkRule.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787800000000-AddScopeToNetworkDeviceLinkRule.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787900000000-AddRestrictToAttachedProjectsToGlobalSso.js +29 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787900000000-AddRestrictToAttachedProjectsToGlobalSso.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1788000000000-AddDetectionRuleAndGoogleSecOpsConnection.js +36 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1788000000000-AddDetectionRuleAndGoogleSecOpsConnection.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1788100000000-AddMeasurements.js +162 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1788100000000-AddMeasurements.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1788200000000-AddLlmCostBudget.js +40 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1788200000000-AddLlmCostBudget.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1788300000000-AddLlmModelPrice.js +22 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1788300000000-AddLlmModelPrice.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1788400000000-AddMarketingConversionAttribution.js +52 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1788400000000-AddMarketingConversionAttribution.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1788500000000-RemoveLlmCostBudgetAlertColumns.js +38 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1788500000000-RemoveLlmCostBudgetAlertColumns.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +16 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/IdentityRateLimit.js +491 -0
- package/build/dist/Server/Middleware/IdentityRateLimit.js.map +1 -0
- package/build/dist/Server/Middleware/SlackAuthorization.js +28 -4
- package/build/dist/Server/Middleware/SlackAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/UserAuthorization.js +197 -22
- package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/WhatsAppAuthorization.js +32 -2
- package/build/dist/Server/Middleware/WhatsAppAuthorization.js.map +1 -1
- package/build/dist/Server/Services/AccessTokenService.js +13 -2
- package/build/dist/Server/Services/AccessTokenService.js.map +1 -1
- package/build/dist/Server/Services/AlertMeasurementService.js +250 -0
- package/build/dist/Server/Services/AlertMeasurementService.js.map +1 -0
- package/build/dist/Server/Services/AlertMeasurementValueService.js +400 -0
- package/build/dist/Server/Services/AlertMeasurementValueService.js.map +1 -0
- package/build/dist/Server/Services/AlertService.js +37 -0
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/AlertStateTimelineService.js +48 -0
- package/build/dist/Server/Services/AlertStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/DetectionRuleService.js +50 -0
- package/build/dist/Server/Services/DetectionRuleService.js.map +1 -0
- package/build/dist/Server/Services/GlobalOidcProjectService.js +105 -0
- package/build/dist/Server/Services/GlobalOidcProjectService.js.map +1 -1
- package/build/dist/Server/Services/GlobalOidcService.js +127 -0
- package/build/dist/Server/Services/GlobalOidcService.js.map +1 -1
- package/build/dist/Server/Services/GlobalSsoProjectService.js +105 -0
- package/build/dist/Server/Services/GlobalSsoProjectService.js.map +1 -1
- package/build/dist/Server/Services/GlobalSsoService.js +127 -0
- package/build/dist/Server/Services/GlobalSsoService.js.map +1 -1
- package/build/dist/Server/Services/GoogleSecOpsConnectionService.js +55 -0
- package/build/dist/Server/Services/GoogleSecOpsConnectionService.js.map +1 -0
- package/build/dist/Server/Services/IncidentMeasurementService.js +252 -0
- package/build/dist/Server/Services/IncidentMeasurementService.js.map +1 -0
- package/build/dist/Server/Services/IncidentMeasurementValueService.js +413 -0
- package/build/dist/Server/Services/IncidentMeasurementValueService.js.map +1 -0
- package/build/dist/Server/Services/IncidentService.js +41 -0
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/IncidentStateTimelineService.js +50 -0
- package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +30 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/LlmCostBudgetService.js +89 -0
- package/build/dist/Server/Services/LlmCostBudgetService.js.map +1 -0
- package/build/dist/Server/Services/LlmModelPriceService.js +163 -0
- package/build/dist/Server/Services/LlmModelPriceService.js.map +1 -0
- package/build/dist/Server/Services/LogAggregationService.js +709 -0
- package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
- package/build/dist/Server/Services/LogCountBaselineService.js +112 -0
- package/build/dist/Server/Services/LogCountBaselineService.js.map +1 -0
- package/build/dist/Server/Services/MutableMetricService.js +28 -9
- package/build/dist/Server/Services/MutableMetricService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceMeasurementService.js +254 -0
- package/build/dist/Server/Services/ScheduledMaintenanceMeasurementService.js.map +1 -0
- package/build/dist/Server/Services/ScheduledMaintenanceMeasurementValueService.js +434 -0
- package/build/dist/Server/Services/ScheduledMaintenanceMeasurementValueService.js.map +1 -0
- package/build/dist/Server/Services/ScheduledMaintenanceService.js +37 -0
- package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js +134 -0
- package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/SecurityEventService.js +64 -0
- package/build/dist/Server/Services/SecurityEventService.js.map +1 -0
- package/build/dist/Server/Services/SpanCountBaselineService.js +122 -0
- package/build/dist/Server/Services/SpanCountBaselineService.js.map +1 -0
- package/build/dist/Server/Services/StatusPageService.js +4 -3
- package/build/dist/Server/Services/StatusPageService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryUsageBillingService.js +15 -3
- package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
- package/build/dist/Server/Services/UserEmailService.js +4 -4
- package/build/dist/Server/Services/UserService.js +262 -42
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Services/UserTotpAuthService.js +0 -73
- package/build/dist/Server/Services/UserTotpAuthService.js.map +1 -1
- package/build/dist/Server/Services/UserWebAuthnService.js +1 -73
- package/build/dist/Server/Services/UserWebAuthnService.js.map +1 -1
- package/build/dist/Server/Types/Billing/MeteredPlan/AllMeteredPlans.js +13 -0
- package/build/dist/Server/Types/Billing/MeteredPlan/AllMeteredPlans.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/TenantPermission.js +10 -0
- package/build/dist/Server/Types/Database/Permissions/TenantPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/Index.js +3 -0
- package/build/dist/Server/Utils/AI/Toolbox/Index.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/SecurityEventTools.js +257 -0
- package/build/dist/Server/Utils/AI/Toolbox/SecurityEventTools.js.map +1 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +13 -4
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
- package/build/dist/Server/Utils/Attribution.js +77 -33
- package/build/dist/Server/Utils/Attribution.js.map +1 -1
- package/build/dist/Server/Utils/CronTab.js +66 -0
- package/build/dist/Server/Utils/CronTab.js.map +1 -1
- package/build/dist/Server/Utils/GlobalSsoAuthorization.js +112 -0
- package/build/dist/Server/Utils/GlobalSsoAuthorization.js.map +1 -0
- package/build/dist/Server/Utils/Marketing/ConversionUploadProvider.js +57 -4
- package/build/dist/Server/Utils/Marketing/ConversionUploadProvider.js.map +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/GoogleAds.js +53 -9
- package/build/dist/Server/Utils/Marketing/Providers/GoogleAds.js.map +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/LinkedIn.js +42 -18
- package/build/dist/Server/Utils/Marketing/Providers/LinkedIn.js.map +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/Meta.js +43 -19
- package/build/dist/Server/Utils/Marketing/Providers/Meta.js.map +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/MicrosoftAds.js +25 -12
- package/build/dist/Server/Utils/Marketing/Providers/MicrosoftAds.js.map +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/Reddit.js +35 -16
- package/build/dist/Server/Utils/Marketing/Providers/Reddit.js.map +1 -1
- package/build/dist/Server/Utils/Measurement/MeasurementDefinitionValidator.js +109 -0
- package/build/dist/Server/Utils/Measurement/MeasurementDefinitionValidator.js.map +1 -0
- package/build/dist/Server/Utils/Measurement/MeasurementMetricWriter.js +131 -0
- package/build/dist/Server/Utils/Measurement/MeasurementMetricWriter.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js +37 -35
- package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/CountAnomaly.js +111 -0
- package/build/dist/Server/Utils/Monitor/Criteria/CountAnomaly.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.js +21 -25
- package/build/dist/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.js +20 -22
- package/build/dist/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +370 -42
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/ExternalStatusPageMonitorCriteria.js +21 -25
- package/build/dist/Server/Utils/Monitor/Criteria/ExternalStatusPageMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js +21 -25
- package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/LogMonitorCriteria.js +84 -1
- package/build/dist/Server/Utils/Monitor/Criteria/LogMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.js +21 -25
- package/build/dist/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SecurityEventsMonitorCriteria.js +35 -0
- package/build/dist/Server/Utils/Monitor/Criteria/SecurityEventsMonitorCriteria.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.js +64 -52
- package/build/dist/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +25 -29
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/TraceMonitorCriteria.js +84 -1
- package/build/dist/Server/Utils/Monitor/Criteria/TraceMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaDataExtractor.js +7 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaDataExtractor.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +20 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +9 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResource.js +133 -23
- package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js +6 -5
- package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorStepsReferenceExtractor.js +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorStepsReferenceExtractor.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js +404 -0
- package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.js +145 -0
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js +176 -0
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/SecurityEventRow.js +69 -0
- package/build/dist/Server/Utils/SecurityEvent/SecurityEventRow.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.js +493 -0
- package/build/dist/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.js.map +1 -0
- package/build/dist/Server/Utils/StatusPageContentSecurityPolicy.js +39 -0
- package/build/dist/Server/Utils/StatusPageContentSecurityPolicy.js.map +1 -0
- package/build/dist/Server/Utils/StatusPageCustomizationAccess.js +85 -0
- package/build/dist/Server/Utils/StatusPageCustomizationAccess.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/LlmCostBudgetEvaluator.js +317 -0
- package/build/dist/Server/Utils/Telemetry/LlmCostBudgetEvaluator.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/LlmSpan.js +56 -4
- package/build/dist/Server/Utils/Telemetry/LlmSpan.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/LogErrorPatternSql.js +112 -0
- package/build/dist/Server/Utils/Telemetry/LogErrorPatternSql.js.map +1 -0
- package/build/dist/Server/Utils/UserPermission/UserPermission.js +46 -1
- package/build/dist/Server/Utils/UserPermission/UserPermission.js.map +1 -1
- package/build/dist/Types/AI/AIChatTypes.js +1 -0
- package/build/dist/Types/AI/AIChatTypes.js.map +1 -1
- package/build/dist/Types/Alerts/AlertMeasurementAnchorType.js +15 -0
- package/build/dist/Types/Alerts/AlertMeasurementAnchorType.js.map +1 -0
- package/build/dist/Types/Alerts/AlertStateRole.js +12 -0
- package/build/dist/Types/Alerts/AlertStateRole.js.map +1 -0
- package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js +16 -0
- package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js.map +1 -1
- package/build/dist/Types/Dashboard/Chart/ChartType.js +1 -0
- package/build/dist/Types/Dashboard/Chart/ChartType.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponentType.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardSecurityEventsFlowComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardSecurityEventsFlowComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardSecurityEventsListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardSecurityEventsListComponent.js.map +1 -0
- package/build/dist/Types/Incident/IncidentMeasurementAnchorType.js +29 -0
- package/build/dist/Types/Incident/IncidentMeasurementAnchorType.js.map +1 -0
- package/build/dist/Types/Incident/IncidentStateRole.js +15 -0
- package/build/dist/Types/Incident/IncidentStateRole.js.map +1 -0
- package/build/dist/Types/Marketing/Attribution.js +68 -0
- package/build/dist/Types/Marketing/Attribution.js.map +1 -0
- package/build/dist/Types/Marketing/MarketingConversion.js +40 -1
- package/build/dist/Types/Marketing/MarketingConversion.js.map +1 -1
- package/build/dist/Types/Measurement/MeasurementAggregationType.js +40 -0
- package/build/dist/Types/Measurement/MeasurementAggregationType.js.map +1 -0
- package/build/dist/Types/Measurement/MeasurementAnchorKind.js +22 -0
- package/build/dist/Types/Measurement/MeasurementAnchorKind.js.map +1 -0
- package/build/dist/Types/Measurement/MeasurementOccurrence.js +15 -0
- package/build/dist/Types/Measurement/MeasurementOccurrence.js.map +1 -0
- package/build/dist/Types/Measurement/MeasurementStatus.js +32 -0
- package/build/dist/Types/Measurement/MeasurementStatus.js.map +1 -0
- package/build/dist/Types/MeteredPlan/ProductType.js +1 -0
- package/build/dist/Types/MeteredPlan/ProductType.js.map +1 -1
- package/build/dist/Types/Monitor/CriteriaFilter.js +3 -0
- package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +59 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +17 -0
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepSecurityEventsMonitor.js +64 -0
- package/build/dist/Types/Monitor/MonitorStepSecurityEventsMonitor.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorType.js +19 -0
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/Types/Monitor/SecurityEventsMonitor/SecurityEventsMonitorResponse.js +2 -0
- package/build/dist/Types/Monitor/SecurityEventsMonitor/SecurityEventsMonitorResponse.js.map +1 -0
- package/build/dist/Types/NetworkDevice/NetworkDeviceLinkRuleScope.js +46 -0
- package/build/dist/Types/NetworkDevice/NetworkDeviceLinkRuleScope.js.map +1 -0
- package/build/dist/Types/Permission.js +347 -2
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/ScheduledMaintenance/ScheduledMaintenanceMeasurementAnchorType.js +19 -0
- package/build/dist/Types/ScheduledMaintenance/ScheduledMaintenanceMeasurementAnchorType.js.map +1 -0
- package/build/dist/Types/ScheduledMaintenance/ScheduledMaintenanceStateRole.js +17 -0
- package/build/dist/Types/ScheduledMaintenance/ScheduledMaintenanceStateRole.js.map +1 -0
- package/build/dist/Types/SecurityEvent/NormalizedSecurityEvent.js +2 -0
- package/build/dist/Types/SecurityEvent/NormalizedSecurityEvent.js.map +1 -0
- package/build/dist/Types/SecurityEvent/OcsfEventClass.js +181 -0
- package/build/dist/Types/SecurityEvent/OcsfEventClass.js.map +1 -0
- package/build/dist/Types/SecurityEvent/OcsfSeverity.js +81 -0
- package/build/dist/Types/SecurityEvent/OcsfSeverity.js.map +1 -0
- package/build/dist/Types/SecurityEvent/SecurityEventFormat.js +21 -0
- package/build/dist/Types/SecurityEvent/SecurityEventFormat.js.map +1 -0
- package/build/dist/Types/SecurityEvent/SigmaRule.js +16 -0
- package/build/dist/Types/SecurityEvent/SigmaRule.js.map +1 -0
- package/build/dist/Types/Telemetry/LlmConventions.js +19 -1
- package/build/dist/Types/Telemetry/LlmConventions.js.map +1 -1
- package/build/dist/Types/Telemetry/LlmCostCatalog.js +484 -0
- package/build/dist/Types/Telemetry/LlmCostCatalog.js.map +1 -0
- package/build/dist/Types/Telemetry/ServiceType.js +1 -0
- package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
- package/build/dist/Types/Telemetry/TelemetryRetentionConfig.js.map +1 -1
- package/build/dist/Types/Telemetry/TelemetryType.js +1 -0
- package/build/dist/Types/Telemetry/TelemetryType.js.map +1 -1
- package/build/dist/Types/TwoFactorAuthStatus.js +41 -0
- package/build/dist/Types/TwoFactorAuthStatus.js.map +1 -0
- package/build/dist/UI/Components/BulkUpdate/BulkArchiveActions.js +16 -2
- package/build/dist/UI/Components/BulkUpdate/BulkArchiveActions.js.map +1 -1
- package/build/dist/UI/Components/BulkUpdate/BulkLabelActions.js +15 -1
- package/build/dist/UI/Components/BulkUpdate/BulkLabelActions.js.map +1 -1
- package/build/dist/UI/Components/BulkUpdate/BulkOwnerActions.js +20 -1
- package/build/dist/UI/Components/BulkUpdate/BulkOwnerActions.js.map +1 -1
- package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js +1 -1
- package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js.map +1 -1
- package/build/dist/UI/Components/Button/Button.js +22 -1
- package/build/dist/UI/Components/Button/Button.js.map +1 -1
- package/build/dist/UI/Components/Card/Card.js +1 -1
- package/build/dist/UI/Components/Card/Card.js.map +1 -1
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +14 -1
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
- package/build/dist/UI/Components/Dictionary/DictionaryFilterOperator.js +47 -0
- package/build/dist/UI/Components/Dictionary/DictionaryFilterOperator.js.map +1 -1
- package/build/dist/UI/Components/DuplicateModel/DuplicateModel.js +8 -0
- package/build/dist/UI/Components/DuplicateModel/DuplicateModel.js.map +1 -1
- package/build/dist/UI/Components/FormModal/BasicFormModal.js +2 -1
- package/build/dist/UI/Components/FormModal/BasicFormModal.js.map +1 -1
- package/build/dist/UI/Components/Forms/BasicForm.js +10 -1
- package/build/dist/UI/Components/Forms/BasicForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/BasicModelForm.js +2 -1
- package/build/dist/UI/Components/Forms/BasicModelForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/ModelForm.js +44 -2
- package/build/dist/UI/Components/Forms/ModelForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/Utils/FormAnalyticsName.js +33 -0
- package/build/dist/UI/Components/Forms/Utils/FormAnalyticsName.js.map +1 -0
- package/build/dist/UI/Components/List/ListRow.js +4 -1
- package/build/dist/UI/Components/List/ListRow.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/ActiveFilterChips.js +32 -7
- package/build/dist/UI/Components/LogsViewer/components/ActiveFilterChips.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +2 -17
- package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/SavedViewsDropdown.js +93 -4
- package/build/dist/UI/Components/LogsViewer/components/SavedViewsDropdown.js.map +1 -1
- package/build/dist/UI/Components/ModelDelete/ModelDelete.js +13 -0
- package/build/dist/UI/Components/ModelDelete/ModelDelete.js.map +1 -1
- package/build/dist/UI/Components/ModelDetail/CardModelDetail.js +27 -11
- package/build/dist/UI/Components/ModelDetail/CardModelDetail.js.map +1 -1
- package/build/dist/UI/Components/ModelFormModal/ModelFormModal.js +2 -1
- package/build/dist/UI/Components/ModelFormModal/ModelFormModal.js.map +1 -1
- package/build/dist/UI/Components/ModelList/ModelList.js +13 -2
- package/build/dist/UI/Components/ModelList/ModelList.js.map +1 -1
- package/build/dist/UI/Components/ModelList/StaticModelList.js +4 -1
- package/build/dist/UI/Components/ModelList/StaticModelList.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +101 -40
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/ModelTable.js +9 -7
- package/build/dist/UI/Components/ModelTable/ModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/TableView.js +32 -4
- package/build/dist/UI/Components/ModelTable/TableView.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js +19 -2
- package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js.map +1 -1
- package/build/dist/UI/Components/OrderedStatesList/Item.js +4 -1
- package/build/dist/UI/Components/OrderedStatesList/Item.js.map +1 -1
- package/build/dist/UI/Components/OrderedStatesList/OrderedStatesList.js +33 -32
- package/build/dist/UI/Components/OrderedStatesList/OrderedStatesList.js.map +1 -1
- package/build/dist/UI/Components/ResetObjectID/ResetObjectID.js +8 -0
- package/build/dist/UI/Components/ResetObjectID/ResetObjectID.js.map +1 -1
- package/build/dist/UI/Components/SavedViews/SavedViewsFacetSection.js +98 -0
- package/build/dist/UI/Components/SavedViews/SavedViewsFacetSection.js.map +1 -0
- package/build/dist/UI/Components/SavedViews/SavedViewsList.js +99 -0
- package/build/dist/UI/Components/SavedViews/SavedViewsList.js.map +1 -0
- package/build/dist/UI/Components/SavedViews/SavedViewsSearchInput.js +17 -0
- package/build/dist/UI/Components/SavedViews/SavedViewsSearchInput.js.map +1 -0
- package/build/dist/UI/Components/SavedViews/SavedViewsShowMoreButton.js +15 -0
- package/build/dist/UI/Components/SavedViews/SavedViewsShowMoreButton.js.map +1 -0
- package/build/dist/UI/Components/Table/TableRow.js +8 -2
- package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/SavedViewsDropdown.js +93 -4
- package/build/dist/UI/Components/TelemetryViewer/components/SavedViewsDropdown.js.map +1 -1
- package/build/dist/UI/Types/UseComponentOutsideClick.js +39 -0
- package/build/dist/UI/Types/UseComponentOutsideClick.js.map +1 -1
- package/build/dist/UI/Utils/PermissionGate.js +164 -0
- package/build/dist/UI/Utils/PermissionGate.js.map +1 -0
- package/build/dist/Utils/Analytics.js +50 -2
- package/build/dist/Utils/Analytics.js.map +1 -1
- package/build/dist/Utils/Dashboard/Components/DashboardSecurityEventsFlowComponent.js +70 -0
- package/build/dist/Utils/Dashboard/Components/DashboardSecurityEventsFlowComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardSecurityEventsListComponent.js +92 -0
- package/build/dist/Utils/Dashboard/Components/DashboardSecurityEventsListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/Index.js +8 -0
- package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
- package/build/dist/Utils/Measurement/MeasurementEvaluator.js +210 -0
- package/build/dist/Utils/Measurement/MeasurementEvaluator.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorMetricType.js +37 -0
- package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Utils/Monitor/MonitorSummarySnapshotUtil.js +1 -0
- package/build/dist/Utils/Monitor/MonitorSummarySnapshotUtil.js.map +1 -1
- package/build/dist/Utils/Monitor/NetworkDeviceLinkRuleUtil.js +359 -37
- package/build/dist/Utils/Monitor/NetworkDeviceLinkRuleUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js +108 -0
- package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/UnclaimedScanDiagnosis.js +87 -0
- package/build/dist/Utils/NetworkDiscovery/UnclaimedScanDiagnosis.js.map +1 -0
- package/build/dist/Utils/SecurityEvent/GenericNormalizer.js +176 -0
- package/build/dist/Utils/SecurityEvent/GenericNormalizer.js.map +1 -0
- package/build/dist/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.js +146 -0
- package/build/dist/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.js.map +1 -0
- package/build/dist/Utils/SecurityEvent/NormalizerHelpers.js +196 -0
- package/build/dist/Utils/SecurityEvent/NormalizerHelpers.js.map +1 -0
- package/build/dist/Utils/SecurityEvent/OcsfNormalizer.js +136 -0
- package/build/dist/Utils/SecurityEvent/OcsfNormalizer.js.map +1 -0
- package/build/dist/Utils/SecurityEvent/SecurityEventNormalizer.js +64 -0
- package/build/dist/Utils/SecurityEvent/SecurityEventNormalizer.js.map +1 -0
- package/build/dist/Utils/SecurityEvent/Sigma/SigmaRuleParser.js +388 -0
- package/build/dist/Utils/SecurityEvent/Sigma/SigmaRuleParser.js.map +1 -0
- package/build/dist/Utils/SecurityEvent/UdmNormalizer.js +328 -0
- package/build/dist/Utils/SecurityEvent/UdmNormalizer.js.map +1 -0
- package/build/dist/Utils/Telemetry/CrossSignalScope.js +29 -7
- package/build/dist/Utils/Telemetry/CrossSignalScope.js.map +1 -1
- package/build/dist/Utils/Telemetry/LogErrorPattern.js +284 -0
- package/build/dist/Utils/Telemetry/LogErrorPattern.js.map +1 -0
- package/package.json +3 -1
|
@@ -4,6 +4,10 @@ import IconProp from "../../../Types/Icon/IconProp";
|
|
|
4
4
|
import ObjectID from "../../../Types/ObjectID";
|
|
5
5
|
import API from "../../Utils/API/API";
|
|
6
6
|
import ModelAPI from "../../Utils/ModelAPI/ModelAPI";
|
|
7
|
+
import PermissionGate, {
|
|
8
|
+
ModelAction,
|
|
9
|
+
PermissionGateResult,
|
|
10
|
+
} from "../../Utils/PermissionGate";
|
|
7
11
|
import { ButtonStyleType } from "../Button/Button";
|
|
8
12
|
import {
|
|
9
13
|
BulkActionButtonSchema,
|
|
@@ -103,6 +107,35 @@ function useBulkArchiveActions<T extends BaseModel>(
|
|
|
103
107
|
onBulkActionEnd();
|
|
104
108
|
};
|
|
105
109
|
|
|
110
|
+
/*
|
|
111
|
+
* Bulk actions are handed straight to the table's action bar, which never
|
|
112
|
+
* looks at permissions - so a viewer on an otherwise gated table could still
|
|
113
|
+
* relabel, reassign or archive every row they had selected. Each of these
|
|
114
|
+
* actions is an update of the records it touches.
|
|
115
|
+
*/
|
|
116
|
+
const updateGate: PermissionGateResult = PermissionGate.check(
|
|
117
|
+
new config.modelType(),
|
|
118
|
+
ModelAction.Update,
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
type GateActionFunction = (
|
|
122
|
+
action: BulkActionButtonSchema<T>,
|
|
123
|
+
) => BulkActionButtonSchema<T>;
|
|
124
|
+
|
|
125
|
+
const gateAction: GateActionFunction = (
|
|
126
|
+
action: BulkActionButtonSchema<T>,
|
|
127
|
+
): BulkActionButtonSchema<T> => {
|
|
128
|
+
if (updateGate.isAllowed || !updateGate.disabledReason) {
|
|
129
|
+
return action;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
return {
|
|
133
|
+
...action,
|
|
134
|
+
disabled: true,
|
|
135
|
+
tooltip: updateGate.disabledReason,
|
|
136
|
+
};
|
|
137
|
+
};
|
|
138
|
+
|
|
106
139
|
const archiveAction: BulkActionButtonSchema<T> = {
|
|
107
140
|
title: "Archive",
|
|
108
141
|
icon: IconProp.Archive,
|
|
@@ -142,8 +175,8 @@ function useBulkArchiveActions<T extends BaseModel>(
|
|
|
142
175
|
};
|
|
143
176
|
|
|
144
177
|
return {
|
|
145
|
-
archiveBulkActions: [archiveAction],
|
|
146
|
-
unarchiveBulkActions: [unarchiveAction],
|
|
178
|
+
archiveBulkActions: [gateAction(archiveAction)],
|
|
179
|
+
unarchiveBulkActions: [gateAction(unarchiveAction)],
|
|
147
180
|
};
|
|
148
181
|
}
|
|
149
182
|
|
|
@@ -18,6 +18,10 @@ import ObjectID from "../../../Types/ObjectID";
|
|
|
18
18
|
import API from "../../Utils/API/API";
|
|
19
19
|
import ModelAPI from "../../Utils/ModelAPI/ModelAPI";
|
|
20
20
|
import ProjectUtil from "../../Utils/Project";
|
|
21
|
+
import PermissionGate, {
|
|
22
|
+
ModelAction,
|
|
23
|
+
PermissionGateResult,
|
|
24
|
+
} from "../../Utils/PermissionGate";
|
|
21
25
|
import { ButtonStyleType } from "../Button/Button";
|
|
22
26
|
import BasicFormModal from "../FormModal/BasicFormModal";
|
|
23
27
|
import Modal from "../Modal/Modal";
|
|
@@ -381,6 +385,35 @@ function useBulkLabelActions<T extends BaseModel>(
|
|
|
381
385
|
},
|
|
382
386
|
);
|
|
383
387
|
|
|
388
|
+
/*
|
|
389
|
+
* Bulk actions are handed straight to the table's action bar, which never
|
|
390
|
+
* looks at permissions - so a viewer on an otherwise gated table could still
|
|
391
|
+
* relabel, reassign or archive every row they had selected. Each of these
|
|
392
|
+
* actions is an update of the records it touches.
|
|
393
|
+
*/
|
|
394
|
+
const updateGate: PermissionGateResult = PermissionGate.check(
|
|
395
|
+
new config.modelType(),
|
|
396
|
+
ModelAction.Update,
|
|
397
|
+
);
|
|
398
|
+
|
|
399
|
+
type GateActionFunction = (
|
|
400
|
+
action: BulkActionButtonSchema<T>,
|
|
401
|
+
) => BulkActionButtonSchema<T>;
|
|
402
|
+
|
|
403
|
+
const gateAction: GateActionFunction = (
|
|
404
|
+
action: BulkActionButtonSchema<T>,
|
|
405
|
+
): BulkActionButtonSchema<T> => {
|
|
406
|
+
if (updateGate.isAllowed || !updateGate.disabledReason) {
|
|
407
|
+
return action;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
return {
|
|
411
|
+
...action,
|
|
412
|
+
disabled: true,
|
|
413
|
+
tooltip: updateGate.disabledReason,
|
|
414
|
+
};
|
|
415
|
+
};
|
|
416
|
+
|
|
384
417
|
const addLabelsAction: BulkActionButtonSchema<T> = {
|
|
385
418
|
title: "Add Labels",
|
|
386
419
|
buttonStyleType: ButtonStyleType.NORMAL,
|
|
@@ -496,7 +529,7 @@ function useBulkLabelActions<T extends BaseModel>(
|
|
|
496
529
|
);
|
|
497
530
|
|
|
498
531
|
return {
|
|
499
|
-
bulkActions: [addLabelsAction, removeLabelsAction],
|
|
532
|
+
bulkActions: [gateAction(addLabelsAction), gateAction(removeLabelsAction)],
|
|
500
533
|
modals: modals,
|
|
501
534
|
};
|
|
502
535
|
}
|
|
@@ -14,6 +14,10 @@ import ObjectID from "../../../Types/ObjectID";
|
|
|
14
14
|
import API from "../../Utils/API/API";
|
|
15
15
|
import ModelAPI from "../../Utils/ModelAPI/ModelAPI";
|
|
16
16
|
import ProjectUtil from "../../Utils/Project";
|
|
17
|
+
import PermissionGate, {
|
|
18
|
+
ModelAction,
|
|
19
|
+
PermissionGateResult,
|
|
20
|
+
} from "../../Utils/PermissionGate";
|
|
17
21
|
import { ButtonStyleType } from "../Button/Button";
|
|
18
22
|
import { DropdownOption, DropdownOptionGroup } from "../Dropdown/Dropdown";
|
|
19
23
|
import BasicFormModal from "../FormModal/BasicFormModal";
|
|
@@ -411,6 +415,43 @@ function useBulkOwnerActions<T extends BaseModel>(
|
|
|
411
415
|
return groups;
|
|
412
416
|
}, [userOptions, teamOptions]);
|
|
413
417
|
|
|
418
|
+
/*
|
|
419
|
+
* Bulk actions are handed straight to the table's action bar, which never
|
|
420
|
+
* looks at permissions - so a viewer on an otherwise gated table could still
|
|
421
|
+
* reassign every row they had selected. Ownership is stored as rows in the
|
|
422
|
+
* owner junction tables, so adding an owner is a create there and removing
|
|
423
|
+
* one is a delete.
|
|
424
|
+
*/
|
|
425
|
+
const addGate: PermissionGateResult = PermissionGate.check(
|
|
426
|
+
new config.ownerUserModelType(),
|
|
427
|
+
ModelAction.Create,
|
|
428
|
+
);
|
|
429
|
+
|
|
430
|
+
const removeGate: PermissionGateResult = PermissionGate.check(
|
|
431
|
+
new config.ownerUserModelType(),
|
|
432
|
+
ModelAction.Delete,
|
|
433
|
+
);
|
|
434
|
+
|
|
435
|
+
type GateActionFunction = (
|
|
436
|
+
action: BulkActionButtonSchema<T>,
|
|
437
|
+
gate: PermissionGateResult,
|
|
438
|
+
) => BulkActionButtonSchema<T>;
|
|
439
|
+
|
|
440
|
+
const gateAction: GateActionFunction = (
|
|
441
|
+
action: BulkActionButtonSchema<T>,
|
|
442
|
+
gate: PermissionGateResult,
|
|
443
|
+
): BulkActionButtonSchema<T> => {
|
|
444
|
+
if (gate.isAllowed || !gate.disabledReason) {
|
|
445
|
+
return action;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
return {
|
|
449
|
+
...action,
|
|
450
|
+
disabled: true,
|
|
451
|
+
tooltip: gate.disabledReason,
|
|
452
|
+
};
|
|
453
|
+
};
|
|
454
|
+
|
|
414
455
|
const addOwnerAction: BulkActionButtonSchema<T> = {
|
|
415
456
|
title: "Add Owner",
|
|
416
457
|
buttonStyleType: ButtonStyleType.NORMAL,
|
|
@@ -507,7 +548,10 @@ function useBulkOwnerActions<T extends BaseModel>(
|
|
|
507
548
|
);
|
|
508
549
|
|
|
509
550
|
return {
|
|
510
|
-
bulkActions: [
|
|
551
|
+
bulkActions: [
|
|
552
|
+
gateAction(addOwnerAction, addGate),
|
|
553
|
+
gateAction(removeOwnerAction, removeGate),
|
|
554
|
+
],
|
|
511
555
|
modals: modals,
|
|
512
556
|
};
|
|
513
557
|
}
|
|
@@ -50,6 +50,8 @@ export interface BulkActionButtonSchema<T extends GenericObject> {
|
|
|
50
50
|
className?: string | undefined;
|
|
51
51
|
onClick: (props: BulkActionOnClickProps<T>) => Promise<void>;
|
|
52
52
|
disabled?: boolean | undefined;
|
|
53
|
+
/* Why the action is unavailable - shown on hover of the locked menu item. */
|
|
54
|
+
tooltip?: string | undefined;
|
|
53
55
|
shortcutKey?: undefined | ShortcutKey;
|
|
54
56
|
confirmMessage?: ((items: Array<T>) => string) | undefined;
|
|
55
57
|
confirmTitle?: ((items: Array<T>) => string) | undefined;
|
|
@@ -214,6 +216,7 @@ const BulkUpdateForm: <T extends GenericObject>(
|
|
|
214
216
|
className={itemClassName}
|
|
215
217
|
iconClassName={iconClassName}
|
|
216
218
|
isDisabled={isDisabled}
|
|
219
|
+
tooltip={button.tooltip}
|
|
217
220
|
onClick={() => {
|
|
218
221
|
triggerButtonClick(button);
|
|
219
222
|
}}
|
|
@@ -254,6 +254,18 @@ const Button: FunctionComponent<ComponentProps> = ({
|
|
|
254
254
|
|
|
255
255
|
buttonStyleCssClass += ` ` + buttonSize;
|
|
256
256
|
|
|
257
|
+
const isDisabled: boolean = Boolean(disabled || isLoading);
|
|
258
|
+
|
|
259
|
+
/*
|
|
260
|
+
* A disabled <button> swallows the pointer without dispatching anything, so
|
|
261
|
+
* the hover never reaches the wrapper that carries the tooltip. Taking the
|
|
262
|
+
* button out of hit-testing hands the pointer to that wrapper instead. Only
|
|
263
|
+
* applied when there is a tooltip to show, so nothing else changes.
|
|
264
|
+
*/
|
|
265
|
+
if (isDisabled && translatedTooltip) {
|
|
266
|
+
buttonStyleCssClass += ` pointer-events-none`;
|
|
267
|
+
}
|
|
268
|
+
|
|
257
269
|
if (className) {
|
|
258
270
|
buttonStyleCssClass += ` ` + className;
|
|
259
271
|
}
|
|
@@ -278,10 +290,10 @@ const Button: FunctionComponent<ComponentProps> = ({
|
|
|
278
290
|
}}
|
|
279
291
|
data-testid={dataTestId}
|
|
280
292
|
type={type}
|
|
281
|
-
disabled={
|
|
293
|
+
disabled={isDisabled}
|
|
282
294
|
className={buttonStyleCssClass}
|
|
283
295
|
aria-label={computedAriaLabel}
|
|
284
|
-
aria-disabled={
|
|
296
|
+
aria-disabled={isDisabled}
|
|
285
297
|
aria-expanded={ariaExpanded}
|
|
286
298
|
aria-haspopup={ariaHaspopup}
|
|
287
299
|
aria-controls={ariaControls}
|
|
@@ -314,6 +326,29 @@ const Button: FunctionComponent<ComponentProps> = ({
|
|
|
314
326
|
};
|
|
315
327
|
|
|
316
328
|
if (translatedTooltip) {
|
|
329
|
+
/*
|
|
330
|
+
* Tippy makes its child the trigger element, and a disabled control is
|
|
331
|
+
* both unhoverable and unfocusable - tippy.js even bails out of show()
|
|
332
|
+
* when the trigger has a `disabled` attribute. Explaining WHY a button is
|
|
333
|
+
* disabled is exactly when the tooltip matters most, so wrap the disabled
|
|
334
|
+
* button in an element that can still be hovered and tabbed to.
|
|
335
|
+
*/
|
|
336
|
+
if (isDisabled) {
|
|
337
|
+
return (
|
|
338
|
+
<Tooltip text={translatedTooltip}>
|
|
339
|
+
<span
|
|
340
|
+
className="inline-flex"
|
|
341
|
+
tabIndex={0}
|
|
342
|
+
data-testid={
|
|
343
|
+
dataTestId ? `${dataTestId}-disabled-wrapper` : undefined
|
|
344
|
+
}
|
|
345
|
+
>
|
|
346
|
+
{getButton()}
|
|
347
|
+
</span>
|
|
348
|
+
</Tooltip>
|
|
349
|
+
);
|
|
350
|
+
}
|
|
351
|
+
|
|
317
352
|
return <Tooltip text={translatedTooltip}>{getButton()}</Tooltip>;
|
|
318
353
|
}
|
|
319
354
|
return getButton();
|
|
@@ -9,6 +9,11 @@ export interface CardButtonSchema {
|
|
|
9
9
|
buttonStyle?: ButtonStyleType | undefined;
|
|
10
10
|
onClick: () => void;
|
|
11
11
|
disabled?: boolean | undefined;
|
|
12
|
+
/*
|
|
13
|
+
* Shown on hover. The reason a disabled button is disabled belongs here -
|
|
14
|
+
* Button keeps a disabled button hoverable precisely so this can be read.
|
|
15
|
+
*/
|
|
16
|
+
tooltip?: string | undefined;
|
|
12
17
|
icon: IconProp;
|
|
13
18
|
isLoading?: undefined | boolean;
|
|
14
19
|
className?: string | undefined;
|
|
@@ -104,6 +109,7 @@ const Card: FunctionComponent<ComponentProps> = (
|
|
|
104
109
|
disabled={
|
|
105
110
|
(button as CardButtonSchema).disabled
|
|
106
111
|
}
|
|
112
|
+
tooltip={(button as CardButtonSchema).tooltip}
|
|
107
113
|
icon={(button as CardButtonSchema).icon}
|
|
108
114
|
shortcutKey={
|
|
109
115
|
(button as CardButtonSchema).shortcutKey
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import API from "../../Utils/API/API";
|
|
2
2
|
import ModelAPI, { ListResult } from "../../Utils/ModelAPI/ModelAPI";
|
|
3
|
+
import PermissionGate, {
|
|
4
|
+
ModelAction,
|
|
5
|
+
PermissionGateResult,
|
|
6
|
+
} from "../../Utils/PermissionGate";
|
|
3
7
|
import { ButtonStyleType } from "../Button/Button";
|
|
4
8
|
import Card from "../Card/Card";
|
|
5
9
|
import ComponentLoader from "../ComponentLoader/ComponentLoader";
|
|
@@ -194,17 +198,36 @@ const CustomFieldsDetail: FunctionComponent<ComponentProps> = (
|
|
|
194
198
|
const canEdit: boolean =
|
|
195
199
|
isEditable && !isLoading && schemaList.length > 0 && Boolean(model);
|
|
196
200
|
|
|
201
|
+
/*
|
|
202
|
+
* Custom field values live on the record itself, so editing them is an
|
|
203
|
+
* update of that record. Without the permission the button stays put and
|
|
204
|
+
* explains itself instead of disappearing.
|
|
205
|
+
*/
|
|
206
|
+
const updateGate: PermissionGateResult = PermissionGate.check(
|
|
207
|
+
new props.modelType(),
|
|
208
|
+
ModelAction.Update,
|
|
209
|
+
);
|
|
210
|
+
|
|
211
|
+
const showEditButton: boolean =
|
|
212
|
+
canEdit && (updateGate.isAllowed || Boolean(updateGate.disabledReason));
|
|
213
|
+
|
|
197
214
|
return (
|
|
198
215
|
<Card
|
|
199
216
|
title={props.title}
|
|
200
217
|
description={props.description}
|
|
201
218
|
buttons={
|
|
202
|
-
|
|
219
|
+
showEditButton
|
|
203
220
|
? [
|
|
204
221
|
{
|
|
205
222
|
title: "Edit Fields",
|
|
206
223
|
buttonStyle: ButtonStyleType.NORMAL,
|
|
224
|
+
disabled: !updateGate.isAllowed,
|
|
225
|
+
tooltip: updateGate.disabledReason,
|
|
207
226
|
onClick: () => {
|
|
227
|
+
if (!updateGate.isAllowed) {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
|
|
208
231
|
setShowModelForm(true);
|
|
209
232
|
},
|
|
210
233
|
icon: IconProp.Edit,
|
|
@@ -450,3 +450,60 @@ export const buildDictionaryValue: (input: {
|
|
|
450
450
|
return trimmed;
|
|
451
451
|
}
|
|
452
452
|
};
|
|
453
|
+
|
|
454
|
+
/**
|
|
455
|
+
* Render a stored dictionary entry value as plain text, for the places that
|
|
456
|
+
* show a filter rather than edit it (the log viewer's filter chips, tooltips,
|
|
457
|
+
* summaries).
|
|
458
|
+
*
|
|
459
|
+
* Every operator other than `EqualTo` is stored as an operator *instance*
|
|
460
|
+
* (`Includes`, `Search`, `NotEqual`, ...) — see `buildDictionaryValue`. Those
|
|
461
|
+
* are objects, and handing one to React as a child throws "Objects are not
|
|
462
|
+
* valid as a React child (found: object with keys {_values})", which took the
|
|
463
|
+
* whole monitoring-criteria modal down with it and left no way to reach Save.
|
|
464
|
+
* Anything that renders an attribute filter as a React child has to come
|
|
465
|
+
* through here.
|
|
466
|
+
*
|
|
467
|
+
* Equality renders bare (`web`) because that is the implicit operator and how
|
|
468
|
+
* these filters have always read; every other operator is prefixed with its
|
|
469
|
+
* label so the chip says what it actually matches (`contains web`,
|
|
470
|
+
* `is any of web, api`, `is not empty`).
|
|
471
|
+
*/
|
|
472
|
+
export const formatDictionaryValueForDisplay: (value: unknown) => string = (
|
|
473
|
+
value: unknown,
|
|
474
|
+
): string => {
|
|
475
|
+
if (value === null || value === undefined) {
|
|
476
|
+
return "";
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
const detected: RawValueAndOperator = detectOperatorFromValue(value);
|
|
480
|
+
const option: DictionaryFilterOperatorOption = getOperatorOption(
|
|
481
|
+
detected.operator,
|
|
482
|
+
);
|
|
483
|
+
|
|
484
|
+
// IsEmpty / IsNotEmpty carry no value — the label is the whole filter.
|
|
485
|
+
if (option.hidesValueInput) {
|
|
486
|
+
return option.label;
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
if (option.expectsMultiValue) {
|
|
490
|
+
const values: Array<string> = detected.rawValues ?? [];
|
|
491
|
+
|
|
492
|
+
/*
|
|
493
|
+
* An empty membership list is a no-op downstream (StatementGenerator
|
|
494
|
+
* skips the predicate rather than emitting `IN ()`), so there are no
|
|
495
|
+
* values to name — show the operator alone rather than a dangling label.
|
|
496
|
+
*/
|
|
497
|
+
return values.length > 0
|
|
498
|
+
? `${option.label} ${values.join(", ")}`
|
|
499
|
+
: option.label;
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
if (detected.operator === DictionaryFilterOperator.EqualTo) {
|
|
503
|
+
return detected.rawValue;
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
return detected.rawValue === ""
|
|
507
|
+
? option.label
|
|
508
|
+
: `${option.label} ${detected.rawValue}`;
|
|
509
|
+
};
|
|
@@ -2,6 +2,10 @@ import API from "../../Utils/API/API";
|
|
|
2
2
|
import ModelAPI from "../../Utils/ModelAPI/ModelAPI";
|
|
3
3
|
import Navigation from "../../Utils/Navigation";
|
|
4
4
|
import { ButtonStyleType } from "../Button/Button";
|
|
5
|
+
import PermissionGate, {
|
|
6
|
+
ModelAction,
|
|
7
|
+
PermissionGateResult,
|
|
8
|
+
} from "../../Utils/PermissionGate";
|
|
5
9
|
import Card from "../Card/Card";
|
|
6
10
|
import BasicFormModal from "../FormModal/BasicFormModal";
|
|
7
11
|
import { ModelField } from "../Forms/ModelForm";
|
|
@@ -29,6 +33,12 @@ const DuplicateModel: <TBaseModel extends BaseModel>(
|
|
|
29
33
|
props: ComponentProps<TBaseModel>,
|
|
30
34
|
): ReactElement => {
|
|
31
35
|
const model: TBaseModel = new props.modelType();
|
|
36
|
+
|
|
37
|
+
/* Duplicating writes a brand new record, so it needs create permission. */
|
|
38
|
+
const createGate: PermissionGateResult = PermissionGate.check(
|
|
39
|
+
model,
|
|
40
|
+
ModelAction.Create,
|
|
41
|
+
);
|
|
32
42
|
const [showModal, setShowModal] = useState<boolean>(false);
|
|
33
43
|
const [isLoading, setIsLoading] = useState<boolean>(false);
|
|
34
44
|
const [error, setError] = useState<string>("");
|
|
@@ -109,7 +119,13 @@ const DuplicateModel: <TBaseModel extends BaseModel>(
|
|
|
109
119
|
{
|
|
110
120
|
title: `Duplicate ${model.singularName}`,
|
|
111
121
|
buttonStyle: ButtonStyleType.NORMAL,
|
|
122
|
+
disabled: !createGate.isAllowed,
|
|
123
|
+
tooltip: createGate.disabledReason,
|
|
112
124
|
onClick: () => {
|
|
125
|
+
if (!createGate.isAllowed) {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
|
|
113
129
|
setShowModal(true);
|
|
114
130
|
},
|
|
115
131
|
isLoading: isLoading,
|
|
@@ -5,12 +5,19 @@ import ErrorMessage from "../ErrorMessage/ErrorMessage";
|
|
|
5
5
|
import BasicForm, {
|
|
6
6
|
BaseComponentProps as BasicFormComponentProps,
|
|
7
7
|
} from "../Forms/BasicForm";
|
|
8
|
+
import FormAnalyticsName from "../Forms/Utils/FormAnalyticsName";
|
|
8
9
|
import Modal, { ModalWidth } from "../Modal/Modal";
|
|
9
10
|
import GenericObject from "../../../Types/GenericObject";
|
|
10
11
|
import React, { ReactElement, useEffect, useRef, useState } from "react";
|
|
11
12
|
|
|
12
13
|
export interface ComponentProps<T extends GenericObject> {
|
|
13
14
|
title: string;
|
|
15
|
+
/*
|
|
16
|
+
* Identifies this form in the "FORM SUBMIT" analytics event. Falls back to
|
|
17
|
+
* formProps.name and then to the modal title, so every modal reports a
|
|
18
|
+
* distinguishable conversion without each caller having to name it.
|
|
19
|
+
*/
|
|
20
|
+
name?: string | undefined;
|
|
14
21
|
isLoading?: boolean | undefined;
|
|
15
22
|
error?: string | undefined;
|
|
16
23
|
onClose?: undefined | (() => void);
|
|
@@ -51,6 +58,11 @@ const BasicFormModal: <T extends GenericObject>(
|
|
|
51
58
|
{!isLoading && (
|
|
52
59
|
<BasicForm
|
|
53
60
|
{...props.formProps}
|
|
61
|
+
name={FormAnalyticsName.resolve(
|
|
62
|
+
props.name,
|
|
63
|
+
props.formProps.name,
|
|
64
|
+
props.title,
|
|
65
|
+
)}
|
|
54
66
|
hideSubmitButton={true}
|
|
55
67
|
ref={formRef}
|
|
56
68
|
onLoadingChange={(isFormLoading: boolean) => {
|
|
@@ -20,6 +20,7 @@ import FormFieldSchemaType from "./Types/FormFieldSchemaType";
|
|
|
20
20
|
import { FormStep } from "./Types/FormStep";
|
|
21
21
|
import FormValues from "./Types/FormValues";
|
|
22
22
|
import Validation from "./Validation";
|
|
23
|
+
import FormAnalyticsName from "./Utils/FormAnalyticsName";
|
|
23
24
|
import OneUptimeDate from "../../../Types/Date";
|
|
24
25
|
import Dictionary from "../../../Types/Dictionary";
|
|
25
26
|
import { VoidFunction } from "../../../Types/FunctionTypes";
|
|
@@ -447,7 +448,18 @@ const BasicForm: ForwardRefExoticComponent<any> = forwardRef(
|
|
|
447
448
|
}
|
|
448
449
|
}
|
|
449
450
|
|
|
450
|
-
|
|
451
|
+
const analyticsName: string | undefined = FormAnalyticsName.resolve(
|
|
452
|
+
props.name,
|
|
453
|
+
);
|
|
454
|
+
|
|
455
|
+
/*
|
|
456
|
+
* Unnamed forms are embedded sub-forms (filter builders, argument
|
|
457
|
+
* editors) rather than conversions. Skip them instead of reporting an
|
|
458
|
+
* event named after a missing prop.
|
|
459
|
+
*/
|
|
460
|
+
if (analyticsName) {
|
|
461
|
+
UiAnalytics.capture("FORM SUBMIT: " + analyticsName);
|
|
462
|
+
}
|
|
451
463
|
|
|
452
464
|
props.onSubmit(values, () => {
|
|
453
465
|
setDidSomethingChange(false);
|
|
@@ -8,6 +8,7 @@ import BasicForm, {
|
|
|
8
8
|
import Fields from "./Types/Fields";
|
|
9
9
|
import { FormStep } from "./Types/FormStep";
|
|
10
10
|
import FormValues from "./Types/FormValues";
|
|
11
|
+
import FormAnalyticsName from "./Utils/FormAnalyticsName";
|
|
11
12
|
import BaseModel from "../../../Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel";
|
|
12
13
|
import React, {
|
|
13
14
|
MutableRefObject,
|
|
@@ -113,7 +114,7 @@ const BasicModelForm: <TBaseModel extends BaseModel>(
|
|
|
113
114
|
onValidate={props.onValidate ? props.onValidate : DefaultValidateFunction}
|
|
114
115
|
disableAutofocus={props.disableAutofocus}
|
|
115
116
|
steps={props.steps}
|
|
116
|
-
name={props.name}
|
|
117
|
+
name={FormAnalyticsName.resolve(props.name, props.title)}
|
|
117
118
|
onFormStepChange={props.onFormStepChange}
|
|
118
119
|
submitButtonStyleType={props.submitButtonStyleType}
|
|
119
120
|
onSubmit={props.onSubmit}
|
|
@@ -5,7 +5,12 @@ import ModelAPI, {
|
|
|
5
5
|
ModelAPIHttpResponse,
|
|
6
6
|
RequestOptions,
|
|
7
7
|
} from "../../Utils/ModelAPI/ModelAPI";
|
|
8
|
+
import ErrorMessage from "../ErrorMessage/ErrorMessage";
|
|
8
9
|
import PermissionUtil from "../../Utils/Permission";
|
|
10
|
+
import PermissionGate, {
|
|
11
|
+
ModelAction,
|
|
12
|
+
PermissionGateResult,
|
|
13
|
+
} from "../../Utils/PermissionGate";
|
|
9
14
|
import User from "../../Utils/User";
|
|
10
15
|
import { ButtonStyleType } from "../Button/Button";
|
|
11
16
|
import {
|
|
@@ -21,6 +26,7 @@ import Field from "./Types/Field";
|
|
|
21
26
|
import Fields from "./Types/Fields";
|
|
22
27
|
import { FormStep } from "./Types/FormStep";
|
|
23
28
|
import FormValues from "./Types/FormValues";
|
|
29
|
+
import FormAnalyticsName from "./Utils/FormAnalyticsName";
|
|
24
30
|
import AnalyticsBaseModel from "../../../Models/AnalyticsModels/AnalyticsBaseModel/AnalyticsBaseModel";
|
|
25
31
|
import AccessControlModel from "../../../Models/DatabaseModels/DatabaseBaseModel/AccessControlModel";
|
|
26
32
|
import BaseModel from "../../../Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel";
|
|
@@ -179,8 +185,14 @@ const ModelForm: <TBaseModel extends BaseModel>(
|
|
|
179
185
|
return true; // master admin can do anything.
|
|
180
186
|
}
|
|
181
187
|
|
|
182
|
-
|
|
183
|
-
|
|
188
|
+
/*
|
|
189
|
+
* A copy. The Public permission is appended below, and pushing into the
|
|
190
|
+
* array the util handed back mutates the snapshot every other permission
|
|
191
|
+
* check on the page reads from.
|
|
192
|
+
*/
|
|
193
|
+
let userPermissions: Array<Permission> = [
|
|
194
|
+
...(PermissionUtil.getGlobalPermissions()?.globalPermissions || []),
|
|
195
|
+
];
|
|
184
196
|
if (
|
|
185
197
|
PermissionUtil.getProjectPermissions() &&
|
|
186
198
|
PermissionUtil.getProjectPermissions()?.permissions &&
|
|
@@ -845,6 +857,47 @@ const ModelForm: <TBaseModel extends BaseModel>(
|
|
|
845
857
|
);
|
|
846
858
|
}
|
|
847
859
|
|
|
860
|
+
/*
|
|
861
|
+
* A create form for a model the viewer cannot create is worse than no form:
|
|
862
|
+
* the per-field access control above strips every column, so the wizard
|
|
863
|
+
* renders empty steps that all read as complete, and the submit fails with
|
|
864
|
+
* whatever the server happens to validate first - which is how creating a
|
|
865
|
+
* monitor as a Viewer produced "Monitor type required to create monitor"
|
|
866
|
+
* with not a word about permissions (issue #3306). Say the real reason.
|
|
867
|
+
*
|
|
868
|
+
* Deliberately narrow, because a false positive here blanks a page:
|
|
869
|
+
*
|
|
870
|
+
* - create only. An update form is reached through an Edit button that is
|
|
871
|
+
* gated already, and gating the form as well only risks a dead end.
|
|
872
|
+
* - only when the form posts to the model's own CRUD endpoint. Sign-in,
|
|
873
|
+
* sign-up, password reset and status page subscribe are all ModelForms
|
|
874
|
+
* with formType Create that submit somewhere else entirely; the model's
|
|
875
|
+
* create permission has nothing to do with whether the visitor may use
|
|
876
|
+
* them, and a signed-in user opening a status page in the same browser
|
|
877
|
+
* would otherwise be locked out of its login form by an unrelated
|
|
878
|
+
* project permission.
|
|
879
|
+
* - never for a model Public may create, which is the marker for "anybody
|
|
880
|
+
* may do this".
|
|
881
|
+
*/
|
|
882
|
+
const isModelCrudCreate: boolean =
|
|
883
|
+
props.formType === FormType.Create && !props.createOrUpdateApiUrl;
|
|
884
|
+
|
|
885
|
+
const isPublicCreate: boolean = PermissionGate.getModelPermissions(
|
|
886
|
+
model,
|
|
887
|
+
ModelAction.Create,
|
|
888
|
+
).includes(Permission.Public);
|
|
889
|
+
|
|
890
|
+
if (isModelCrudCreate && !isPublicCreate) {
|
|
891
|
+
const createGate: PermissionGateResult = PermissionGate.check(
|
|
892
|
+
model,
|
|
893
|
+
ModelAction.Create,
|
|
894
|
+
);
|
|
895
|
+
|
|
896
|
+
if (!createGate.isAllowed && createGate.disabledReason) {
|
|
897
|
+
return <ErrorMessage message={createGate.disabledReason} />;
|
|
898
|
+
}
|
|
899
|
+
}
|
|
900
|
+
|
|
848
901
|
return (
|
|
849
902
|
<div>
|
|
850
903
|
<BasicModelForm<TBaseModel>
|
|
@@ -854,7 +907,15 @@ const ModelForm: <TBaseModel extends BaseModel>(
|
|
|
854
907
|
disableAutofocus={props.disableAutofocus}
|
|
855
908
|
model={model}
|
|
856
909
|
id={props.id}
|
|
857
|
-
name={
|
|
910
|
+
name={FormAnalyticsName.resolve(
|
|
911
|
+
props.name,
|
|
912
|
+
props.title,
|
|
913
|
+
model.singularName
|
|
914
|
+
? `${
|
|
915
|
+
props.formType === FormType.Create ? "Create" : "Update"
|
|
916
|
+
} ${model.singularName}`
|
|
917
|
+
: undefined,
|
|
918
|
+
)}
|
|
858
919
|
onFormStepChange={props.onFormStepChange}
|
|
859
920
|
onIsLastFormStep={props.onIsLastFormStep}
|
|
860
921
|
fields={fields}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Matches "undefined" / "null" as a whole word, which is what a missing value
|
|
3
|
+
* turns into once it is interpolated into a title (`Duplicate ${undefined}`).
|
|
4
|
+
* Case sensitive on purpose: titles are written in Title Case, so a real word
|
|
5
|
+
* like "Null" in a form title is left alone.
|
|
6
|
+
*/
|
|
7
|
+
const STRINGIFIED_EMPTY_VALUE: RegExp = /\b(undefined|null)\b/;
|
|
8
|
+
|
|
9
|
+
/*
|
|
10
|
+
* Resolves the human readable name that identifies a form in the
|
|
11
|
+
* "FORM SUBMIT" analytics event.
|
|
12
|
+
*
|
|
13
|
+
* Wrappers around BasicForm pass a chain of candidates - the explicit name
|
|
14
|
+
* first, then whatever title they already render - and the first usable one
|
|
15
|
+
* wins. When no candidate is usable the caller is expected to skip the capture
|
|
16
|
+
* altogether, because an event named after a missing value collapses distinct
|
|
17
|
+
* conversions into one indistinguishable event.
|
|
18
|
+
*/
|
|
19
|
+
export default class FormAnalyticsName {
|
|
20
|
+
public static resolve(
|
|
21
|
+
...candidates: Array<string | undefined | null>
|
|
22
|
+
): string | undefined {
|
|
23
|
+
for (const candidate of candidates) {
|
|
24
|
+
if (typeof candidate !== "string") {
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const name: string = candidate.trim();
|
|
29
|
+
|
|
30
|
+
if (!name || STRINGIFIED_EMPTY_VALUE.test(name)) {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return name;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -120,7 +120,13 @@ const ListRow: ListRowFunction = <T extends GenericObject>(
|
|
|
120
120
|
icon={button.icon}
|
|
121
121
|
buttonStyle={button.buttonStyleType}
|
|
122
122
|
isLoading={isButtonLoading[i]}
|
|
123
|
+
disabled={button.disabled}
|
|
124
|
+
tooltip={button.tooltip}
|
|
123
125
|
onClick={() => {
|
|
126
|
+
if (button.disabled) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
|
|
124
130
|
if (button.onClick) {
|
|
125
131
|
isButtonLoading[i] = true;
|
|
126
132
|
setIsButtonLoading(isButtonLoading);
|