@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
package/Server/Utils/CronTab.ts
CHANGED
|
@@ -15,4 +15,77 @@ export default class CronTab {
|
|
|
15
15
|
throw new BadDataException(`Invalid cron expression: ${crontab}`);
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Longest gap (in seconds) between two consecutive runs of this cron.
|
|
21
|
+
*
|
|
22
|
+
* Used to reason about how much data an evaluation window can possibly
|
|
23
|
+
* contain: a monitor polled once every five minutes produces at most one
|
|
24
|
+
* sample per five minutes, so "all values over the last 5 minutes" can
|
|
25
|
+
* never be backed by more than one sample. Callers use this to decide
|
|
26
|
+
* whether a window is actually covered by data or is merely still
|
|
27
|
+
* filling up.
|
|
28
|
+
*
|
|
29
|
+
* The *longest* gap is deliberate. Irregular expressions (say
|
|
30
|
+
* `0,1,30 * * * *`) have both very short and very long gaps; taking the
|
|
31
|
+
* shortest would make callers demand data at a cadence the cron does not
|
|
32
|
+
* actually deliver, and they would wait forever.
|
|
33
|
+
*
|
|
34
|
+
* Returns null when the expression is missing or unparseable so callers
|
|
35
|
+
* can fall back to inferring the cadence from the data itself.
|
|
36
|
+
*/
|
|
37
|
+
@CaptureSpan()
|
|
38
|
+
public static getIntervalInSeconds(
|
|
39
|
+
crontab: string | undefined | null,
|
|
40
|
+
referenceDate?: Date | undefined,
|
|
41
|
+
): number | null {
|
|
42
|
+
if (!crontab) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
try {
|
|
47
|
+
const interval: CronExpression = CronParser.parseExpression(crontab, {
|
|
48
|
+
currentDate: referenceDate || new Date(),
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
/*
|
|
52
|
+
* Six executions -> five gaps. Enough to cover a full hour-wrap for
|
|
53
|
+
* every interval offered in the UI without walking the schedule far
|
|
54
|
+
* into the future.
|
|
55
|
+
*/
|
|
56
|
+
const executionTimes: Array<Date> = [];
|
|
57
|
+
|
|
58
|
+
for (let i: number = 0; i < 6; i++) {
|
|
59
|
+
executionTimes.push(interval.next().toDate());
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
let longestGapInSeconds: number = 0;
|
|
63
|
+
|
|
64
|
+
for (let i: number = 1; i < executionTimes.length; i++) {
|
|
65
|
+
const gapInSeconds: number =
|
|
66
|
+
(executionTimes[i]!.getTime() - executionTimes[i - 1]!.getTime()) /
|
|
67
|
+
1000;
|
|
68
|
+
|
|
69
|
+
if (gapInSeconds > longestGapInSeconds) {
|
|
70
|
+
longestGapInSeconds = gapInSeconds;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (longestGapInSeconds <= 0) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return longestGapInSeconds;
|
|
79
|
+
} catch (error) {
|
|
80
|
+
/*
|
|
81
|
+
* Debug rather than error: this runs on the criteria-evaluation hot
|
|
82
|
+
* path, and monitors created before the interval was a cron (or
|
|
83
|
+
* through a Terraform example using the "Every 5 minutes" label) would
|
|
84
|
+
* otherwise log on every single check. Callers treat null as "cadence
|
|
85
|
+
* unknown" and fall back to inferring it from the data.
|
|
86
|
+
*/
|
|
87
|
+
logger.debug(error);
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
18
91
|
}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import ObjectID from "../../Types/ObjectID";
|
|
2
|
+
import InMemoryTTLCache from "../Infrastructure/InMemoryTTLCache";
|
|
3
|
+
|
|
4
|
+
/*
|
|
5
|
+
* The stateful half of Global SSO enforcement.
|
|
6
|
+
*
|
|
7
|
+
* A Global SSO/OIDC token is a 30-day, self-contained JWT with no project
|
|
8
|
+
* binding, so on its own it answers only "this person authenticated against
|
|
9
|
+
* SOME instance-wide identity provider at some point in the last month". Two
|
|
10
|
+
* questions it cannot answer:
|
|
11
|
+
*
|
|
12
|
+
* 1. IS THE PROVIDER STILL TRUSTED? Turning a provider off, or deleting it,
|
|
13
|
+
* has to actually cut off access. Without a check at request time the
|
|
14
|
+
* "Enabled" toggle does nothing to anyone already signed in, for up to
|
|
15
|
+
* thirty days. This check is UNCONDITIONAL - "disabled" has only one
|
|
16
|
+
* possible meaning.
|
|
17
|
+
*
|
|
18
|
+
* 2. DOES THE PROVIDER GOVERN THIS PROJECT? Deliberately OPT-IN, per
|
|
19
|
+
* provider, via `restrictToAttachedProjects`. The attachment rows
|
|
20
|
+
* (GlobalSsoProject / GlobalOidcProject) were introduced as the
|
|
21
|
+
* PROVISIONING allow-list - "a SAML assertion can only ever provision a
|
|
22
|
+
* user into projects that a master admin has explicitly attached here",
|
|
23
|
+
* per the model's own docstring - and the login routers gate a session on
|
|
24
|
+
* membership of ANY project, not of an attached one. Reading attachments
|
|
25
|
+
* as an access boundary by default would therefore lock existing users
|
|
26
|
+
* out of projects they legitimately reach today, immediately on upgrade,
|
|
27
|
+
* with no way to recover from inside the product. So it stays off unless
|
|
28
|
+
* an admin asks for it.
|
|
29
|
+
*
|
|
30
|
+
* Both answers come from Postgres and run on every authenticated request
|
|
31
|
+
* against an SSO-enforced project, so both are cached in-process for 60
|
|
32
|
+
* seconds, and concurrent misses share one query.
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
export const GLOBAL_SSO_AUTHORIZATION_CACHE_TTL_MS: number = 60_000;
|
|
36
|
+
|
|
37
|
+
/** What the enforcement path needs to know about a global provider. */
|
|
38
|
+
export interface GlobalProviderTrust {
|
|
39
|
+
// The provider row exists and its "Enabled" toggle is on.
|
|
40
|
+
isUsable: boolean;
|
|
41
|
+
// The admin opted this provider into attachment-scoped access.
|
|
42
|
+
restrictToAttachedProjects: boolean;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/*
|
|
46
|
+
* Absence of an entry means "not yet looked up", which is why these are read
|
|
47
|
+
* with an explicit `undefined` check rather than a truthiness test: a cached
|
|
48
|
+
* "this provider is disabled" must not be mistaken for a cache miss and
|
|
49
|
+
* re-queried on every single request.
|
|
50
|
+
*/
|
|
51
|
+
export const globalSsoProviderTrustCache: InMemoryTTLCache<GlobalProviderTrust> =
|
|
52
|
+
new InMemoryTTLCache(10_000);
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* A provider's attachment rows.
|
|
56
|
+
*
|
|
57
|
+
* `hasAnyAttachmentRows` distinguishes "this provider has no attachments at
|
|
58
|
+
* all" from "it has attachments but every one of them is disabled". Collapsing
|
|
59
|
+
* those two would mean an admin disabling the last attachment WIDENS the
|
|
60
|
+
* provider to every project - the exact opposite of the intent.
|
|
61
|
+
*/
|
|
62
|
+
export interface GlobalProviderAttachments {
|
|
63
|
+
hasAnyAttachmentRows: boolean;
|
|
64
|
+
enabledProjectIds: Array<string>;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export const globalSsoAttachmentsCache: InMemoryTTLCache<GlobalProviderAttachments> =
|
|
68
|
+
new InMemoryTTLCache(10_000);
|
|
69
|
+
|
|
70
|
+
export type GlobalProviderKind = "sso" | "oidc";
|
|
71
|
+
|
|
72
|
+
/*
|
|
73
|
+
* Namespaced by kind. A Global SSO provider and a Global OIDC provider are
|
|
74
|
+
* different rows in different tables and could in principle share an id;
|
|
75
|
+
* collapsing the keys would let one vouch for the other.
|
|
76
|
+
*/
|
|
77
|
+
export function globalProviderCacheKey(
|
|
78
|
+
providerKind: GlobalProviderKind,
|
|
79
|
+
providerId: ObjectID,
|
|
80
|
+
): string {
|
|
81
|
+
return `${providerKind}:${providerId.toString()}`;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Decides whether a provider's attachments cover `projectId`, for a provider
|
|
86
|
+
* that has opted into attachment-scoped access.
|
|
87
|
+
*
|
|
88
|
+
* A provider with no attachment rows at all is instance-wide, matching the
|
|
89
|
+
* "default-all" reading the login routers use. A provider that HAS attachment
|
|
90
|
+
* rows governs exactly the enabled ones - so disabling them all denies rather
|
|
91
|
+
* than widens.
|
|
92
|
+
*/
|
|
93
|
+
export function doAttachmentsGovernProject(
|
|
94
|
+
attachments: GlobalProviderAttachments,
|
|
95
|
+
projectId: ObjectID,
|
|
96
|
+
): boolean {
|
|
97
|
+
if (!attachments.hasAnyAttachmentRows) {
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return attachments.enabledProjectIds.includes(projectId.toString());
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/** Drops every cached answer. Used by the write hooks and by tests. */
|
|
105
|
+
export function clearGlobalSsoAuthorizationCaches(): void {
|
|
106
|
+
globalSsoProviderTrustCache.clear();
|
|
107
|
+
globalSsoAttachmentsCache.clear();
|
|
108
|
+
inFlightTrustLookups.clear();
|
|
109
|
+
inFlightAttachmentLookups.clear();
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/*
|
|
113
|
+
* In-flight de-duplication.
|
|
114
|
+
*
|
|
115
|
+
* The multi-tenant permission path fans out over every project the user
|
|
116
|
+
* belongs to CONCURRENTLY. Without this, a cold cache means N simultaneous
|
|
117
|
+
* copies of the same two queries - for a user in fifty projects, a hundred
|
|
118
|
+
* queries where two would do. Worse, failures are never cached, so a database
|
|
119
|
+
* that is already struggling gets the full fan-out again on every request.
|
|
120
|
+
*
|
|
121
|
+
* Sharing the promise collapses all of that to one query per provider, and a
|
|
122
|
+
* rejection is shared too rather than being retried N times in the same tick.
|
|
123
|
+
*/
|
|
124
|
+
const inFlightTrustLookups: Map<
|
|
125
|
+
string,
|
|
126
|
+
Promise<GlobalProviderTrust>
|
|
127
|
+
> = new Map();
|
|
128
|
+
const inFlightAttachmentLookups: Map<
|
|
129
|
+
string,
|
|
130
|
+
Promise<GlobalProviderAttachments>
|
|
131
|
+
> = new Map();
|
|
132
|
+
|
|
133
|
+
async function loadOnce<T>(
|
|
134
|
+
inFlight: Map<string, Promise<T>>,
|
|
135
|
+
key: string,
|
|
136
|
+
load: () => Promise<T>,
|
|
137
|
+
): Promise<T> {
|
|
138
|
+
const existing: Promise<T> | undefined = inFlight.get(key);
|
|
139
|
+
|
|
140
|
+
if (existing) {
|
|
141
|
+
return existing;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
const pending: Promise<T> = load().finally((): void => {
|
|
145
|
+
/*
|
|
146
|
+
* Only clear the slot if it is still OURS. A cache clear between the two
|
|
147
|
+
* (every write to a Global SSO/OIDC service does exactly that, twice) lets
|
|
148
|
+
* a NEWER lookup take the key while this one is still on the wire; a blind
|
|
149
|
+
* delete would evict that newer entry when this one settles, and the fan-
|
|
150
|
+
* out that follows would stop de-duplicating - the one situation this
|
|
151
|
+
* exists for.
|
|
152
|
+
*/
|
|
153
|
+
if (inFlight.get(key) === pending) {
|
|
154
|
+
inFlight.delete(key);
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
inFlight.set(key, pending);
|
|
159
|
+
|
|
160
|
+
return pending;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export function loadTrustOnce(
|
|
164
|
+
key: string,
|
|
165
|
+
load: () => Promise<GlobalProviderTrust>,
|
|
166
|
+
): Promise<GlobalProviderTrust> {
|
|
167
|
+
return loadOnce(inFlightTrustLookups, key, load);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
export function loadAttachmentsOnce(
|
|
171
|
+
key: string,
|
|
172
|
+
load: () => Promise<GlobalProviderAttachments>,
|
|
173
|
+
): Promise<GlobalProviderAttachments> {
|
|
174
|
+
return loadOnce(inFlightAttachmentLookups, key, load);
|
|
175
|
+
}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { AxiosError } from "axios";
|
|
2
|
+
import Attribution from "../Attribution";
|
|
2
3
|
import { JSONObject } from "../../../Types/JSON";
|
|
3
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
AdUploadableMarketingConversionTypes,
|
|
6
|
+
LeadMarketingConversionTypes,
|
|
7
|
+
MarketingConversionType,
|
|
8
|
+
} from "../../../Types/Marketing/MarketingConversion";
|
|
4
9
|
import MarketingConversion from "../../../Models/DatabaseModels/MarketingConversion";
|
|
5
10
|
|
|
6
11
|
/*
|
|
@@ -11,15 +16,34 @@ import MarketingConversion from "../../../Models/DatabaseModels/MarketingConvers
|
|
|
11
16
|
*
|
|
12
17
|
* Contract:
|
|
13
18
|
* - getSkipReason returns a human-readable reason when this conversion can
|
|
14
|
-
* never be uploaded to this platform (
|
|
15
|
-
*
|
|
16
|
-
* type). Null
|
|
19
|
+
* never be uploaded to this platform (conversion type with no ad-platform
|
|
20
|
+
* mapping, no identifier this platform can match on, outside the platform's
|
|
21
|
+
* upload window, provider not configured for this conversion type). Null
|
|
22
|
+
* means uploadable. It is implemented here and must not be overridden —
|
|
23
|
+
* providers implement getProviderSkipReason instead, which only runs for
|
|
24
|
+
* conversion types that are ad-uploadable at all.
|
|
17
25
|
* - upload() sends one batch. Per-conversion PERMANENT rejections are
|
|
18
26
|
* returned in the result keyed by array index; they will not be retried.
|
|
19
27
|
* Transport/auth-level failures must THROW — the whole batch stays pending
|
|
20
28
|
* and is retried on the next run (bounded by the job's attempt cap), so
|
|
21
29
|
* providers should be safe against duplicate delivery where the platform
|
|
22
30
|
* supports an idempotency/dedup key.
|
|
31
|
+
*
|
|
32
|
+
* IDENTIFIERS
|
|
33
|
+
*
|
|
34
|
+
* A conversion can be matched to an ad click two ways, and most platforms
|
|
35
|
+
* accept either:
|
|
36
|
+
*
|
|
37
|
+
* - the click id the visitor carried (gclid, fbclid, msclkid, ...), which is
|
|
38
|
+
* exact but only survives as far as the browser storage that held it; and
|
|
39
|
+
* - the SHA-256 of the person's email, which every platform calls "enhanced
|
|
40
|
+
* conversions"/"enhanced matching" and which survives a change of device,
|
|
41
|
+
* a cleared browser, and the weeks between a demo and the deal it led to.
|
|
42
|
+
*
|
|
43
|
+
* Providers must consider a conversion uploadable when EITHER is present.
|
|
44
|
+
* Requiring the click id — which is what every provider here used to do — threw
|
|
45
|
+
* away exactly the sales-led conversions the enhanced-matching mechanism was
|
|
46
|
+
* designed for.
|
|
23
47
|
*/
|
|
24
48
|
|
|
25
49
|
export interface ConversionUploadBatchResult {
|
|
@@ -30,14 +54,28 @@ export interface ConversionUploadBatchResult {
|
|
|
30
54
|
export interface ConversionSkip {
|
|
31
55
|
reason: string;
|
|
32
56
|
/*
|
|
33
|
-
* Permanent skips (
|
|
34
|
-
* are recorded as Skipped and never revisited. Non-permanent skips
|
|
57
|
+
* Permanent skips (no usable identifier, outside the platform's upload
|
|
58
|
+
* window) are recorded as Skipped and never revisited. Non-permanent skips
|
|
35
59
|
* (missing provider configuration such as a conversion action id) leave
|
|
36
60
|
* the conversion pending so it uploads once the configuration is added.
|
|
37
61
|
*/
|
|
38
62
|
isPermanent: boolean;
|
|
39
63
|
}
|
|
40
64
|
|
|
65
|
+
/*
|
|
66
|
+
* A per-conversion-type mapping. Written as a Record over the enum rather than
|
|
67
|
+
* a switch or a two-way branch on purpose: the compiler refuses a Record that
|
|
68
|
+
* omits a member, so adding a MarketingConversionType is a build error in every
|
|
69
|
+
* provider until that provider states what the new type means on its platform.
|
|
70
|
+
*
|
|
71
|
+
* That is the guarantee Docs/analytics/enterprise-conversion-tracking.md asks
|
|
72
|
+
* for. Before it existed, providers chose their conversion action with
|
|
73
|
+
* `isSignUp(conversion) ? signUp : paidSubscription`, so a booked meeting added
|
|
74
|
+
* to the uploadable list would have been reported to every ad platform as a
|
|
75
|
+
* purchase.
|
|
76
|
+
*/
|
|
77
|
+
export type ConversionTypeMapping<T> = Record<MarketingConversionType, T>;
|
|
78
|
+
|
|
41
79
|
export default abstract class ConversionUploadProvider {
|
|
42
80
|
// Stable key used in MarketingConversion.uploadState. Never change it.
|
|
43
81
|
public abstract readonly key: string;
|
|
@@ -52,7 +90,28 @@ export default abstract class ConversionUploadProvider {
|
|
|
52
90
|
|
|
53
91
|
public abstract isConfigured(): boolean;
|
|
54
92
|
|
|
55
|
-
|
|
93
|
+
/*
|
|
94
|
+
* Screens conversion types the ledger records but no ad platform has a
|
|
95
|
+
* mapping for, before any provider sees them.
|
|
96
|
+
*/
|
|
97
|
+
public getSkipReason(conversion: MarketingConversion): ConversionSkip | null {
|
|
98
|
+
if (
|
|
99
|
+
!AdUploadableMarketingConversionTypes.includes(
|
|
100
|
+
conversion.conversionType as MarketingConversionType,
|
|
101
|
+
)
|
|
102
|
+
) {
|
|
103
|
+
return {
|
|
104
|
+
reason: `Conversion type ${
|
|
105
|
+
conversion.conversionType || "unknown"
|
|
106
|
+
} has no ad platform conversion mapping`,
|
|
107
|
+
isPermanent: true,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return this.getProviderSkipReason(conversion);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
protected abstract getProviderSkipReason(
|
|
56
115
|
conversion: MarketingConversion,
|
|
57
116
|
): ConversionSkip | null;
|
|
58
117
|
|
|
@@ -69,7 +128,64 @@ export default abstract class ConversionUploadProvider {
|
|
|
69
128
|
return typeof value === "string" && value ? value : undefined;
|
|
70
129
|
}
|
|
71
130
|
|
|
131
|
+
/*
|
|
132
|
+
* The hashed email this conversion can be matched on, or undefined.
|
|
133
|
+
*
|
|
134
|
+
* Prefers the stored emailHash and falls back to hashing the email column,
|
|
135
|
+
* so rows written before emailHash existed still match. Both paths go
|
|
136
|
+
* through Attribution so the digest is identical whichever one produced it.
|
|
137
|
+
*/
|
|
138
|
+
protected getHashedEmail(
|
|
139
|
+
conversion: MarketingConversion,
|
|
140
|
+
): string | undefined {
|
|
141
|
+
if (conversion.emailHash) {
|
|
142
|
+
return conversion.emailHash;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return Attribution.hashEmail(conversion.email) || undefined;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/*
|
|
149
|
+
* Resolve a per-type value, or undefined when the column holds a string that
|
|
150
|
+
* is not a known conversion type. The column is a plain varchar, so this
|
|
151
|
+
* cannot be assumed away even though the mapping itself is exhaustive.
|
|
152
|
+
*/
|
|
153
|
+
protected resolveByConversionType<T>(
|
|
154
|
+
conversion: MarketingConversion,
|
|
155
|
+
mapping: ConversionTypeMapping<T>,
|
|
156
|
+
): T | undefined {
|
|
157
|
+
const conversionType: MarketingConversionType =
|
|
158
|
+
conversion.conversionType as MarketingConversionType;
|
|
159
|
+
|
|
160
|
+
if (!Object.values(MarketingConversionType).includes(conversionType)) {
|
|
161
|
+
return undefined;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
return mapping[conversionType];
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/*
|
|
168
|
+
* A sales-led lead (booked meeting, enterprise licence request) rather than
|
|
169
|
+
* a completed transaction.
|
|
170
|
+
*/
|
|
171
|
+
protected isLead(conversion: MarketingConversion): boolean {
|
|
172
|
+
return LeadMarketingConversionTypes.includes(
|
|
173
|
+
conversion.conversionType as MarketingConversionType,
|
|
174
|
+
);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/*
|
|
178
|
+
* The revenue to report for this conversion, in USD.
|
|
179
|
+
*
|
|
180
|
+
* Leads return undefined regardless of what the row holds. A booked meeting
|
|
181
|
+
* is not money, and reporting one as revenue would let a bidding algorithm
|
|
182
|
+
* optimise towards booking meetings that never close.
|
|
183
|
+
*/
|
|
72
184
|
protected getValueInUSD(conversion: MarketingConversion): number | undefined {
|
|
185
|
+
if (this.isLead(conversion)) {
|
|
186
|
+
return undefined;
|
|
187
|
+
}
|
|
188
|
+
|
|
73
189
|
if (
|
|
74
190
|
conversion.conversionValueInUSDCents === undefined ||
|
|
75
191
|
conversion.conversionValueInUSDCents === null ||
|
|
@@ -80,10 +196,6 @@ export default abstract class ConversionUploadProvider {
|
|
|
80
196
|
return conversion.conversionValueInUSDCents / 100;
|
|
81
197
|
}
|
|
82
198
|
|
|
83
|
-
protected isSignUp(conversion: MarketingConversion): boolean {
|
|
84
|
-
return conversion.conversionType === MarketingConversionType.SignUp;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
199
|
protected isOlderThanDays(
|
|
88
200
|
conversion: MarketingConversion,
|
|
89
201
|
days: number,
|
|
@@ -3,7 +3,9 @@ import {
|
|
|
3
3
|
GoogleAdsApiVersion,
|
|
4
4
|
GoogleAdsCustomerId,
|
|
5
5
|
GoogleAdsDeveloperToken,
|
|
6
|
+
GoogleAdsEnhancedConversionsForLeadsEnabled,
|
|
6
7
|
GoogleAdsLoginCustomerId,
|
|
8
|
+
GoogleAdsMeetingBookedConversionActionId,
|
|
7
9
|
GoogleAdsOAuthClientId,
|
|
8
10
|
GoogleAdsOAuthClientSecret,
|
|
9
11
|
GoogleAdsOAuthRefreshToken,
|
|
@@ -12,9 +14,11 @@ import {
|
|
|
12
14
|
} from "../../../EnvironmentConfig";
|
|
13
15
|
import ConversionUploadProvider, {
|
|
14
16
|
ConversionSkip,
|
|
17
|
+
ConversionTypeMapping,
|
|
15
18
|
ConversionUploadBatchResult,
|
|
16
19
|
} from "../ConversionUploadProvider";
|
|
17
20
|
import { JSONObject } from "../../../../Types/JSON";
|
|
21
|
+
import { MarketingConversionType } from "../../../../Types/Marketing/MarketingConversion";
|
|
18
22
|
import MarketingConversion from "../../../../Models/DatabaseModels/MarketingConversion";
|
|
19
23
|
import logger from "../../Logger";
|
|
20
24
|
|
|
@@ -26,8 +30,16 @@ const GOOGLE_MAX_CONVERSION_AGE_IN_DAYS: number = 90;
|
|
|
26
30
|
/*
|
|
27
31
|
* Google Ads offline click conversions
|
|
28
32
|
* (customers/{id}:uploadClickConversions) with OAuth2 refresh-token auth.
|
|
29
|
-
* Supports gclid, wbraid and gbraid click ids
|
|
30
|
-
*
|
|
33
|
+
* Supports gclid, wbraid and gbraid click ids, plus enhanced conversions — a
|
|
34
|
+
* SHA-256 email in userIdentifiers. Uses partialFailure so valid conversions
|
|
35
|
+
* succeed even when others in the batch fail.
|
|
36
|
+
*
|
|
37
|
+
* A hashed email is attached to EVERY upload that has one, which only improves
|
|
38
|
+
* matching. Uploading a conversion that has ONLY a hashed email — enhanced
|
|
39
|
+
* conversions for leads, and the only way a sales-led deal months after the
|
|
40
|
+
* click is ever attributed — additionally requires the account to be set up
|
|
41
|
+
* for it, so it is gated on
|
|
42
|
+
* GOOGLE_ADS_ENHANCED_CONVERSIONS_FOR_LEADS_ENABLED.
|
|
31
43
|
*/
|
|
32
44
|
export default class GoogleAdsProvider extends ConversionUploadProvider {
|
|
33
45
|
public override readonly key: string = "google";
|
|
@@ -46,12 +58,17 @@ export default class GoogleAdsProvider extends ConversionUploadProvider {
|
|
|
46
58
|
);
|
|
47
59
|
}
|
|
48
60
|
|
|
49
|
-
|
|
61
|
+
protected override getProviderSkipReason(
|
|
50
62
|
conversion: MarketingConversion,
|
|
51
63
|
): ConversionSkip | null {
|
|
52
|
-
if (
|
|
64
|
+
if (
|
|
65
|
+
!this.getGoogleClickId(conversion) &&
|
|
66
|
+
!this.canUploadAsLead(conversion)
|
|
67
|
+
) {
|
|
53
68
|
return {
|
|
54
|
-
reason:
|
|
69
|
+
reason: GoogleAdsEnhancedConversionsForLeadsEnabled
|
|
70
|
+
? "No Google click id (gclid/wbraid/gbraid) and no email to match on"
|
|
71
|
+
: "No Google click id (gclid/wbraid/gbraid)",
|
|
55
72
|
isPermanent: true,
|
|
56
73
|
};
|
|
57
74
|
}
|
|
@@ -94,10 +111,49 @@ export default class GoogleAdsProvider extends ConversionUploadProvider {
|
|
|
94
111
|
return null;
|
|
95
112
|
}
|
|
96
113
|
|
|
114
|
+
/*
|
|
115
|
+
* Enhanced conversions for leads: this conversion has no click id, but it
|
|
116
|
+
* has an email and the account is configured to match on one.
|
|
117
|
+
*/
|
|
118
|
+
private canUploadAsLead(conversion: MarketingConversion): boolean {
|
|
119
|
+
return Boolean(
|
|
120
|
+
GoogleAdsEnhancedConversionsForLeadsEnabled &&
|
|
121
|
+
this.getHashedEmail(conversion),
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/*
|
|
126
|
+
* userIdentifiers per the enhanced-conversions spec. FIRST_PARTY is the
|
|
127
|
+
* correct source: the address was given to OneUptime directly, not bought or
|
|
128
|
+
* inferred.
|
|
129
|
+
*/
|
|
130
|
+
private getUserIdentifiers(
|
|
131
|
+
conversion: MarketingConversion,
|
|
132
|
+
): Array<JSONObject> {
|
|
133
|
+
const hashedEmail: string | undefined = this.getHashedEmail(conversion);
|
|
134
|
+
|
|
135
|
+
if (!hashedEmail) {
|
|
136
|
+
return [];
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
return [
|
|
140
|
+
{
|
|
141
|
+
hashedEmail: hashedEmail,
|
|
142
|
+
userIdentifierSource: "FIRST_PARTY",
|
|
143
|
+
},
|
|
144
|
+
];
|
|
145
|
+
}
|
|
146
|
+
|
|
97
147
|
private getConversionActionId(conversion: MarketingConversion): string {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
:
|
|
148
|
+
const mapping: ConversionTypeMapping<string> = {
|
|
149
|
+
[MarketingConversionType.SignUp]: GoogleAdsSignUpConversionActionId,
|
|
150
|
+
[MarketingConversionType.MeetingBooked]:
|
|
151
|
+
GoogleAdsMeetingBookedConversionActionId,
|
|
152
|
+
[MarketingConversionType.PaidSubscription]:
|
|
153
|
+
GoogleAdsPaidSubscriptionConversionActionId,
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
return this.resolveByConversionType(conversion, mapping) || "";
|
|
101
157
|
}
|
|
102
158
|
|
|
103
159
|
private async getAccessToken(): Promise<string> {
|
|
@@ -174,6 +230,13 @@ export default class GoogleAdsProvider extends ConversionUploadProvider {
|
|
|
174
230
|
),
|
|
175
231
|
};
|
|
176
232
|
|
|
233
|
+
const userIdentifiers: Array<JSONObject> =
|
|
234
|
+
this.getUserIdentifiers(conversion);
|
|
235
|
+
|
|
236
|
+
if (userIdentifiers.length > 0) {
|
|
237
|
+
payload["userIdentifiers"] = userIdentifiers;
|
|
238
|
+
}
|
|
239
|
+
|
|
177
240
|
const valueInUSD: number | undefined = this.getValueInUSD(conversion);
|
|
178
241
|
|
|
179
242
|
if (valueInUSD !== undefined) {
|
|
@@ -2,14 +2,17 @@ import axios, { AxiosError } from "axios";
|
|
|
2
2
|
import {
|
|
3
3
|
LinkedInApiVersion,
|
|
4
4
|
LinkedInConversionsAccessToken,
|
|
5
|
+
LinkedInMeetingBookedConversionId,
|
|
5
6
|
LinkedInPaidSubscriptionConversionId,
|
|
6
7
|
LinkedInSignUpConversionId,
|
|
7
8
|
} from "../../../EnvironmentConfig";
|
|
8
9
|
import ConversionUploadProvider, {
|
|
9
10
|
ConversionSkip,
|
|
11
|
+
ConversionTypeMapping,
|
|
10
12
|
ConversionUploadBatchResult,
|
|
11
13
|
} from "../ConversionUploadProvider";
|
|
12
14
|
import { JSONObject } from "../../../../Types/JSON";
|
|
15
|
+
import { MarketingConversionType } from "../../../../Types/Marketing/MarketingConversion";
|
|
13
16
|
import MarketingConversion from "../../../../Models/DatabaseModels/MarketingConversion";
|
|
14
17
|
|
|
15
18
|
const REQUEST_TIMEOUT_MS: number = 30000;
|
|
@@ -18,11 +21,12 @@ const REQUEST_TIMEOUT_MS: number = 30000;
|
|
|
18
21
|
const LINKEDIN_MAX_CONVERSION_AGE_IN_DAYS: number = 90;
|
|
19
22
|
|
|
20
23
|
/*
|
|
21
|
-
* LinkedIn Conversions API (api.linkedin.com/rest/conversionEvents)
|
|
22
|
-
* the li_fat_id first-party click id
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
24
|
+
* LinkedIn Conversions API (api.linkedin.com/rest/conversionEvents) matching
|
|
25
|
+
* on the li_fat_id first-party click id, a SHA-256 email, or both — LinkedIn
|
|
26
|
+
* accepts several userIds and resolves whichever it can. Conversion rules are
|
|
27
|
+
* referenced by urn:lla:llaPartnerConversion:{id}. Events are posted one at a
|
|
28
|
+
* time (small volumes); auth-level failures abort the batch for retry, other
|
|
29
|
+
* per-event rejections are recorded as permanent.
|
|
26
30
|
*
|
|
27
31
|
* Note: LinkedIn access tokens expire (typically 60 days) — the token in
|
|
28
32
|
* LINKEDIN_CONVERSIONS_ACCESS_TOKEN must be rotated externally.
|
|
@@ -41,12 +45,12 @@ export default class LinkedInProvider extends ConversionUploadProvider {
|
|
|
41
45
|
return Boolean(LinkedInConversionsAccessToken);
|
|
42
46
|
}
|
|
43
47
|
|
|
44
|
-
|
|
48
|
+
protected override getProviderSkipReason(
|
|
45
49
|
conversion: MarketingConversion,
|
|
46
50
|
): ConversionSkip | null {
|
|
47
|
-
if (
|
|
51
|
+
if (this.getUserIds(conversion).length === 0) {
|
|
48
52
|
return {
|
|
49
|
-
reason: "No LinkedIn click id (li_fat_id)",
|
|
53
|
+
reason: "No LinkedIn click id (li_fat_id) and no email to match on",
|
|
50
54
|
isPermanent: true,
|
|
51
55
|
};
|
|
52
56
|
}
|
|
@@ -71,9 +75,48 @@ export default class LinkedInProvider extends ConversionUploadProvider {
|
|
|
71
75
|
}
|
|
72
76
|
|
|
73
77
|
private getConversionRuleId(conversion: MarketingConversion): string {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
:
|
|
78
|
+
const mapping: ConversionTypeMapping<string> = {
|
|
79
|
+
[MarketingConversionType.SignUp]: LinkedInSignUpConversionId,
|
|
80
|
+
[MarketingConversionType.MeetingBooked]:
|
|
81
|
+
LinkedInMeetingBookedConversionId,
|
|
82
|
+
[MarketingConversionType.PaidSubscription]:
|
|
83
|
+
LinkedInPaidSubscriptionConversionId,
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
return this.resolveByConversionType(conversion, mapping) || "";
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/*
|
|
90
|
+
* Every identifier LinkedIn can resolve this person by. Sending both when
|
|
91
|
+
* both exist raises the match rate; sending only the email is how a demo
|
|
92
|
+
* booked on one device and a licence signed on another are still joined to
|
|
93
|
+
* the click that started it.
|
|
94
|
+
*/
|
|
95
|
+
private getUserIds(conversion: MarketingConversion): Array<JSONObject> {
|
|
96
|
+
const userIds: Array<JSONObject> = [];
|
|
97
|
+
|
|
98
|
+
const clickId: string | undefined = this.getClickId(
|
|
99
|
+
conversion,
|
|
100
|
+
"li_fat_id",
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
if (clickId) {
|
|
104
|
+
userIds.push({
|
|
105
|
+
idType: "LINKEDIN_FIRST_PARTY_ADS_TRACKING_UUID",
|
|
106
|
+
idValue: clickId,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const hashedEmail: string | undefined = this.getHashedEmail(conversion);
|
|
111
|
+
|
|
112
|
+
if (hashedEmail) {
|
|
113
|
+
userIds.push({
|
|
114
|
+
idType: "SHA256_EMAIL",
|
|
115
|
+
idValue: hashedEmail,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return userIds;
|
|
77
120
|
}
|
|
78
121
|
|
|
79
122
|
public override async upload(
|
|
@@ -92,12 +135,7 @@ export default class LinkedInProvider extends ConversionUploadProvider {
|
|
|
92
135
|
// Dedup key: a retried batch must not double-count conversions.
|
|
93
136
|
eventId: conversion.id!.toString(),
|
|
94
137
|
user: {
|
|
95
|
-
userIds:
|
|
96
|
-
{
|
|
97
|
-
idType: "LINKEDIN_FIRST_PARTY_ADS_TRACKING_UUID",
|
|
98
|
-
idValue: this.getClickId(conversion, "li_fat_id") || "",
|
|
99
|
-
},
|
|
100
|
-
],
|
|
138
|
+
userIds: this.getUserIds(conversion),
|
|
101
139
|
},
|
|
102
140
|
};
|
|
103
141
|
|