@oneuptime/common 12.0.23 → 12.0.24
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/DatabaseModels/DetectionRule.ts +55 -0
- package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +27 -7
- package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +67 -0
- package/Models/DatabaseModels/Project.ts +68 -0
- package/Models/DatabaseModels/User.ts +68 -0
- package/Server/API/TelemetryAPI.ts +29 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1789400000000-AddNameToNetworkDeviceDiscoveryScan.ts +28 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1789500000000-AddCampaignUtmFields.ts +49 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1789512000000-AddDetectionRuleDistinctCountColumns.ts +33 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
- package/Server/Middleware/GzipRequestBody.ts +311 -0
- package/Server/Middleware/MultipartFormData.ts +87 -3
- package/Server/Services/DetectionRuleService.ts +73 -6
- package/Server/Services/Index.ts +205 -0
- package/Server/Services/NetworkDeviceDiscoveryScanService.ts +59 -0
- package/Server/Services/NetworkDeviceService.ts +148 -0
- package/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.ts +65 -0
- package/Server/Services/OnCallDutyPolicyFeedService.ts +1 -1
- package/Server/Services/ProjectService.ts +29 -19
- package/Server/Services/SecurityEventService.ts +90 -13
- package/Server/Services/StatusPageResourceService.ts +223 -0
- package/Server/Services/TelemetryAttributeService.ts +17 -0
- package/Server/Services/UserService.ts +4 -6
- package/Server/Types/Markdown.ts +161 -67
- package/Server/Utils/AI/Toolbox/OnCallTools.ts +12 -4
- package/Server/Utils/AnalyticsDatabase/Statement.ts +13 -1
- package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +297 -6
- package/Server/Utils/Attribution.ts +4 -0
- package/Server/Utils/Marketing/MarketingEventUtil.ts +45 -7
- package/Server/Utils/SecurityEvent/DetectionRuleEvaluator.ts +55 -3
- package/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.ts +21 -0
- package/Server/Utils/StartServer.ts +12 -32
- package/Server/Utils/Telemetry/LlmCostBudgetEvaluator.ts +101 -4
- package/Server/Utils/Telemetry/LlmMetricSpend.ts +130 -0
- package/Server/Views/Partials/AnalyticsConsent.ejs +159 -102
- package/Server/Views/Partials/Head.ejs +2 -1
- package/Tests/App/Dashboard/AdminUserNotificationMethodsPage.test.tsx +776 -38
- package/Tests/App/Dashboard/CorrelateFilterBuilder.test.tsx +359 -0
- package/Tests/App/Dashboard/CorrelateGraph.test.tsx +865 -0
- package/Tests/App/Dashboard/CorrelationGraph.test.ts +346 -0
- package/Tests/App/Dashboard/CriteriaFilterConditionDropdown.test.tsx +256 -0
- package/Tests/App/Dashboard/CriteriaFilterDefaults.test.ts +738 -0
- package/Tests/App/Dashboard/CriteriaFilterMonitorTypeChange.test.ts +1122 -0
- package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +283 -0
- package/Tests/App/Dashboard/ExternalStatusPageCriteriaFilter.test.ts +407 -0
- package/Tests/App/Dashboard/MetricSeriesInvestigateMenu.test.tsx +5 -14
- package/Tests/App/Dashboard/MonitorCriteriaActionToggles.test.tsx +426 -0
- package/Tests/App/Dashboard/MonitorStepsCriteriaAlignmentWiring.test.tsx +352 -0
- package/Tests/App/Dashboard/OnCallLayerCardOverrides.test.tsx +278 -0
- package/Tests/App/Dashboard/OnCallLayerShiftPreviewOverrides.test.ts +237 -0
- package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +2 -2
- package/Tests/App/Dashboard/OnCallSchedulePreviewOverrides.test.tsx +460 -0
- package/Tests/App/Dashboard/SecurityEventAttributeUtil.test.ts +171 -0
- package/Tests/App/Dashboard/SecurityEventCorrelation.test.ts +857 -0
- package/Tests/App/Dashboard/SecurityEventDetailObservables.test.tsx +194 -0
- package/Tests/App/Dashboard/SecurityEventsDetectionRulesPage.test.tsx +124 -0
- package/Tests/App/Dashboard/SecurityEventsMonitorStepForm.test.tsx +79 -19
- package/Tests/App/Dashboard/SecurityEventsTableColumns.test.tsx +382 -0
- package/Tests/App/StatusPage/BulkAddStatusPageMonitors.test.ts +216 -0
- package/Tests/App/StatusPage/BulkAddStatusPageMonitorsModal.test.tsx +590 -11
- package/Tests/App/StatusPage/StatusPageResourceExplorer.test.tsx +757 -0
- package/Tests/Models/DiscoveryScanNameColumn.test.ts +293 -0
- package/Tests/Server/API/SecurityEventAttributesAPI.test.ts +564 -0
- package/Tests/Server/Infrastructure/Postgres/SchemaMigrationsOrdering.test.ts +120 -4
- package/Tests/Server/Middleware/GzipRequestBody.test.ts +725 -0
- package/Tests/Server/Middleware/MultipartFormData.test.ts +298 -0
- package/Tests/Server/Services/AddDetectionRuleDistinctCountColumnsMigration.test.ts +311 -0
- package/Tests/Server/Services/DetectionRuleService.test.ts +134 -2
- package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +7 -1
- package/Tests/Server/Services/FeedRetentionConsistency.test.ts +131 -0
- package/Tests/Server/Services/NetworkDeviceDiscoveryScanService.test.ts +194 -0
- package/Tests/Server/Services/NetworkDeviceMonitorStatusStamp.test.ts +800 -0
- package/Tests/Server/Services/OnCallScheduleAttachRosterRefresh.test.ts +244 -0
- package/Tests/Server/Services/SecurityEventService.test.ts +376 -0
- package/Tests/Server/Services/StatusPageResourceDuplicates.test.ts +703 -0
- package/Tests/Server/Services/TelemetryAttributeServiceSecurityEvent.test.ts +256 -0
- package/Tests/Server/Types/Workflow/Components/ComponentRegistryParity.test.ts +417 -0
- package/Tests/Server/Utils/AnalyticsDatabase/StatementGeneratorWhereOperators.test.ts +677 -0
- package/Tests/Server/Utils/Marketing/MarketingEventUtil.test.ts +43 -0
- package/Tests/Server/Utils/Monitor/Criteria/ProfileMonitorCriteria.test.ts +15 -11
- package/Tests/Server/Utils/SecurityEvent/DetectionRuleEvaluator.test.ts +369 -8
- package/Tests/Server/Utils/SecurityEvent/SigmaClickhouseCompiler.test.ts +35 -0
- package/Tests/Server/Utils/Telemetry/LlmCostBudgetEvaluator.test.ts +368 -4
- package/Tests/Server/Utils/Telemetry/LlmMetricSpend.test.ts +245 -0
- package/Tests/Server/Views/AnalyticsConsentPartial.test.ts +48 -5
- package/Tests/Types/Code/YamlSyntax.test.ts +396 -0
- package/Tests/Types/Monitor/MetricAndProfileDefaultCriteria.test.ts +957 -0
- package/Tests/Types/Monitor/MonitorCriteriaActionValidation.test.ts +598 -0
- package/Tests/Types/Monitor/MonitorCriteriaInstance.test.ts +49 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +6 -6
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.test.ts +4 -4
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationUtil.test.ts +4 -3
- package/Tests/Types/Telemetry/LlmMetricConventions.test.ts +193 -0
- package/Tests/UI/Components/AiInvestigationSettingsCard.test.tsx +0 -12
- package/Tests/UI/Components/CardModelDetailEdit.test.tsx +1 -17
- package/Tests/UI/Components/CodeEditor.test.tsx +474 -10
- package/Tests/UI/Components/Detail/YamlField.test.tsx +105 -0
- package/Tests/UI/Components/EntityDropdownLabelsBulkAdd.test.tsx +319 -0
- package/Tests/UI/Components/Forms/FormFieldYaml.test.tsx +231 -0
- package/Tests/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.test.ts +1 -0
- package/Tests/UI/Components/Forms/ValidationYAML.test.ts +234 -0
- package/Tests/UI/Components/ModelTable/AttributeColumns.test.tsx +573 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableAttributeColumns.test.tsx +824 -0
- package/Tests/UI/Components/ModelTable/ColumnCustomizationModalAddableColumns.test.tsx +707 -0
- package/Tests/UI/Components/SideOver.test.tsx +1 -1
- package/Tests/UI/Components/StatusPage/ResourceGridSelection.test.tsx +294 -0
- package/Tests/UI/Components/StatusPage/ResourceListSelection.test.tsx +436 -0
- package/Tests/UI/Components/TableBulkCsvExport.test.tsx +6 -2
- package/Tests/UI/Components/Toggle.test.tsx +25 -0
- package/Tests/UI/Components/YamlEditor.test.tsx +847 -0
- package/Tests/Utils/NetworkDevice/DeviceReachabilityUtil.test.ts +252 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveredHostUtil.test.ts +221 -0
- package/Tests/Utils/NetworkDiscovery/ScanNameUtil.test.ts +312 -0
- package/Tests/Utils/StatusPage/ResourceExplorer.test.ts +468 -0
- package/Tests/Utils/Telemetry/LlmMetricQuery.test.ts +472 -0
- package/Types/Code/YamlSyntax.ts +396 -0
- package/Types/Exception/ExceptionCode.ts +1 -0
- package/Types/Exception/PayloadTooLargeException.ts +8 -0
- package/Types/Marketing/Attribution.ts +10 -0
- package/Types/Marketing/MarketingEvent.ts +4 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +116 -56
- package/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.ts +2 -1
- package/Types/SecurityEvent/DetectionFindingConstants.ts +11 -0
- package/Types/Telemetry/LlmMetricConventions.ts +124 -0
- package/UI/Components/AutocompleteTextInput/AutocompleteTextInput.tsx +3 -0
- package/UI/Components/BulkUpdate/BulkUpdateForm.tsx +10 -1
- package/UI/Components/CodeEditor/CodeEditor.tsx +241 -79
- package/UI/Components/CodeEditor/YamlEditor.tsx +369 -0
- package/UI/Components/Detail/Detail.tsx +10 -0
- package/UI/Components/EntityDropdown/EntityDropdown.tsx +33 -0
- package/UI/Components/Forms/Fields/FormField.tsx +31 -0
- package/UI/Components/Forms/Types/Field.ts +8 -0
- package/UI/Components/Forms/Types/FormFieldSchemaType.ts +1 -0
- package/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.ts +2 -0
- package/UI/Components/Forms/Validation.ts +46 -0
- package/UI/Components/Input/Input.tsx +3 -0
- package/UI/Components/ModelTable/AttributeColumns.tsx +321 -0
- package/UI/Components/ModelTable/BaseModelTable.tsx +263 -14
- package/UI/Components/ModelTable/Column.ts +8 -0
- package/UI/Components/ModelTable/ColumnCustomizationModal.tsx +310 -0
- package/UI/Components/ModelTable/ColumnPreference.ts +13 -1
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesModal.tsx +2 -2
- package/UI/Components/SideOver/SideOver.tsx +5 -5
- package/UI/Components/StatusPage/ResourceGrid.tsx +82 -2
- package/UI/Components/StatusPage/ResourceList.tsx +197 -38
- package/UI/Components/Toggle/Toggle.tsx +9 -1
- package/UI/Components/Types/FieldType.ts +1 -0
- package/Utils/NetworkDevice/DeviceReachabilityUtil.ts +73 -1
- package/Utils/NetworkDiscovery/ScanNameUtil.ts +181 -0
- package/Utils/StatusPage/ResourceExplorer.ts +258 -0
- package/Utils/Telemetry/LlmMetricQuery.ts +204 -0
- package/build/dist/Models/DatabaseModels/DetectionRule.js +57 -0
- package/build/dist/Models/DatabaseModels/DetectionRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js +27 -7
- package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +69 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +76 -0
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/User.js +76 -0
- package/build/dist/Models/DatabaseModels/User.js.map +1 -1
- package/build/dist/Server/API/TelemetryAPI.js +17 -0
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789400000000-AddNameToNetworkDeviceDiscoveryScan.js +21 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789400000000-AddNameToNetworkDeviceDiscoveryScan.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789500000000-AddCampaignUtmFields.js +42 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789500000000-AddCampaignUtmFields.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789512000000-AddDetectionRuleDistinctCountColumns.js +22 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789512000000-AddDetectionRuleDistinctCountColumns.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/GzipRequestBody.js +224 -0
- package/build/dist/Server/Middleware/GzipRequestBody.js.map +1 -0
- package/build/dist/Server/Middleware/MultipartFormData.js +71 -2
- package/build/dist/Server/Middleware/MultipartFormData.js.map +1 -1
- package/build/dist/Server/Services/DetectionRuleService.js +49 -4
- package/build/dist/Server/Services/DetectionRuleService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +204 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js +50 -0
- package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceService.js +124 -0
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js +68 -13
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyFeedService.js +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyFeedService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +25 -45
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/SecurityEventService.js +57 -5
- package/build/dist/Server/Services/SecurityEventService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageResourceService.js +140 -0
- package/build/dist/Server/Services/StatusPageResourceService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryAttributeService.js +17 -0
- package/build/dist/Server/Services/TelemetryAttributeService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +2 -12
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Types/Markdown.js +147 -61
- package/build/dist/Server/Types/Markdown.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/OnCallTools.js +12 -4
- package/build/dist/Server/Utils/AI/Toolbox/OnCallTools.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js +12 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +246 -9
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
- package/build/dist/Server/Utils/Attribution.js.map +1 -1
- package/build/dist/Server/Utils/Marketing/MarketingEventUtil.js +27 -7
- package/build/dist/Server/Utils/Marketing/MarketingEventUtil.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js +42 -7
- package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.js +18 -0
- package/build/dist/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.js.map +1 -1
- package/build/dist/Server/Utils/StartServer.js +12 -21
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/LlmCostBudgetEvaluator.js +76 -5
- package/build/dist/Server/Utils/Telemetry/LlmCostBudgetEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/LlmMetricSpend.js +102 -0
- package/build/dist/Server/Utils/Telemetry/LlmMetricSpend.js.map +1 -0
- package/build/dist/Types/Code/YamlSyntax.js +212 -0
- package/build/dist/Types/Code/YamlSyntax.js.map +1 -0
- package/build/dist/Types/Exception/ExceptionCode.js +1 -0
- package/build/dist/Types/Exception/ExceptionCode.js.map +1 -1
- package/build/dist/Types/Exception/PayloadTooLargeException.js +8 -0
- package/build/dist/Types/Exception/PayloadTooLargeException.js.map +1 -0
- package/build/dist/Types/Marketing/Attribution.js +10 -0
- package/build/dist/Types/Marketing/Attribution.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +112 -51
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js +2 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js.map +1 -1
- package/build/dist/Types/SecurityEvent/DetectionFindingConstants.js +9 -0
- package/build/dist/Types/SecurityEvent/DetectionFindingConstants.js.map +1 -1
- package/build/dist/Types/Telemetry/LlmMetricConventions.js +98 -0
- package/build/dist/Types/Telemetry/LlmMetricConventions.js.map +1 -0
- package/build/dist/UI/Components/AutocompleteTextInput/AutocompleteTextInput.js +1 -1
- package/build/dist/UI/Components/AutocompleteTextInput/AutocompleteTextInput.js.map +1 -1
- package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js +5 -2
- package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js.map +1 -1
- package/build/dist/UI/Components/CodeEditor/CodeEditor.js +206 -76
- package/build/dist/UI/Components/CodeEditor/CodeEditor.js.map +1 -1
- package/build/dist/UI/Components/CodeEditor/YamlEditor.js +201 -0
- package/build/dist/UI/Components/CodeEditor/YamlEditor.js.map +1 -0
- package/build/dist/UI/Components/Detail/Detail.js +9 -0
- package/build/dist/UI/Components/Detail/Detail.js.map +1 -1
- package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js +16 -1
- package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/FormField.js +14 -1
- package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
- package/build/dist/UI/Components/Forms/Types/Field.js.map +1 -1
- package/build/dist/UI/Components/Forms/Types/FormFieldSchemaType.js +1 -0
- package/build/dist/UI/Components/Forms/Types/FormFieldSchemaType.js.map +1 -1
- package/build/dist/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.js +2 -0
- package/build/dist/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.js.map +1 -1
- package/build/dist/UI/Components/Forms/Validation.js +27 -0
- package/build/dist/UI/Components/Forms/Validation.js.map +1 -1
- package/build/dist/UI/Components/Input/Input.js +1 -1
- package/build/dist/UI/Components/Input/Input.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/AttributeColumns.js +159 -0
- package/build/dist/UI/Components/ModelTable/AttributeColumns.js.map +1 -0
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +179 -17
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/ColumnCustomizationModal.js +133 -2
- package/build/dist/UI/Components/ModelTable/ColumnCustomizationModal.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/ColumnPreference.js +7 -1
- package/build/dist/UI/Components/ModelTable/ColumnPreference.js.map +1 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesModal.js +2 -2
- package/build/dist/UI/Components/SideOver/SideOver.js +5 -5
- package/build/dist/UI/Components/StatusPage/ResourceGrid.js +28 -2
- package/build/dist/UI/Components/StatusPage/ResourceGrid.js.map +1 -1
- package/build/dist/UI/Components/StatusPage/ResourceList.js +87 -20
- package/build/dist/UI/Components/StatusPage/ResourceList.js.map +1 -1
- package/build/dist/UI/Components/Toggle/Toggle.js +9 -1
- package/build/dist/UI/Components/Toggle/Toggle.js.map +1 -1
- package/build/dist/UI/Components/Types/FieldType.js +1 -0
- package/build/dist/UI/Components/Types/FieldType.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js +37 -1
- package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/ScanNameUtil.js +120 -0
- package/build/dist/Utils/NetworkDiscovery/ScanNameUtil.js.map +1 -0
- package/build/dist/Utils/StatusPage/ResourceExplorer.js +171 -0
- package/build/dist/Utils/StatusPage/ResourceExplorer.js.map +1 -1
- package/build/dist/Utils/Telemetry/LlmMetricQuery.js +119 -0
- package/build/dist/Utils/Telemetry/LlmMetricQuery.js.map +1 -0
- package/jest.config.json +2 -0
- package/package.json +1 -1
- package/tsconfig.json +2 -1
- package/Tests/UI/Components/Toast.test.tsx +0 -197
- package/Tests/UI/Components/ToastStacking.test.tsx +0 -198
- package/UI/Components/Toast/Toast.tsx +0 -189
- package/UI/Components/Toast/ToastInit.tsx +0 -110
- package/build/dist/UI/Components/Toast/Toast.js +0 -123
- package/build/dist/UI/Components/Toast/Toast.js.map +0 -1
- package/build/dist/UI/Components/Toast/ToastInit.js +0 -53
- package/build/dist/UI/Components/Toast/ToastInit.js.map +0 -1
|
@@ -7,6 +7,7 @@ import React, {
|
|
|
7
7
|
FunctionComponent,
|
|
8
8
|
ReactElement,
|
|
9
9
|
useEffect,
|
|
10
|
+
useMemo,
|
|
10
11
|
useRef,
|
|
11
12
|
useState,
|
|
12
13
|
} from "react";
|
|
@@ -30,6 +31,12 @@ export interface ComponentProps {
|
|
|
30
31
|
showLineNumbers?: boolean | undefined;
|
|
31
32
|
disableSpellCheck?: boolean | undefined;
|
|
32
33
|
ariaLabelledby?: string | undefined;
|
|
34
|
+
/** Ids of the elements describing this control (hint, status, error). */
|
|
35
|
+
ariaDescribedby?: string | undefined;
|
|
36
|
+
/** Marks the control invalid to assistive technology. */
|
|
37
|
+
ariaInvalid?: boolean | undefined;
|
|
38
|
+
/** CSS height handed to Monaco. Defaults to "30vh". */
|
|
39
|
+
height?: string | undefined;
|
|
33
40
|
}
|
|
34
41
|
|
|
35
42
|
/*
|
|
@@ -106,6 +113,17 @@ const CodeEditor: FunctionComponent<ComponentProps> = (
|
|
|
106
113
|
if (props.type === CodeType.CSS) {
|
|
107
114
|
setPlaceholder(`/* ${props.placeholder}. This is in CSS. */`);
|
|
108
115
|
}
|
|
116
|
+
|
|
117
|
+
/*
|
|
118
|
+
* Help text, never `setPlaceholder`: whatever setPlaceholder holds is
|
|
119
|
+
* rendered into `defaultValue` below, i.e. it becomes real document
|
|
120
|
+
* text. The JS and CSS arms above get away with it because they wrap
|
|
121
|
+
* the hint in a comment; an unwrapped YAML hint would be content the
|
|
122
|
+
* user can accidentally save, and the server would reject it.
|
|
123
|
+
*/
|
|
124
|
+
if (props.type === CodeType.YAML) {
|
|
125
|
+
setHelpText(`${props.placeholder}`);
|
|
126
|
+
}
|
|
109
127
|
}
|
|
110
128
|
}, [props.placeholder, props.type]);
|
|
111
129
|
|
|
@@ -121,21 +139,222 @@ const CodeEditor: FunctionComponent<ComponentProps> = (
|
|
|
121
139
|
"block w-full rounded-md border bg-white py-2 pl-3 pr-3 text-sm placeholder-gray-500 focus:border-red-500 focus:text-gray-900 focus:placeholder-gray-400 focus:outline-none focus:ring-2 focus:ring-red-500 sm:text-sm border-red-300 pr-10 text-red-900 placeholder-red-300 focus:border-red-500 focus:outline-none focus:ring-red-500";
|
|
122
140
|
}
|
|
123
141
|
|
|
142
|
+
const isYaml: boolean = props.type === CodeType.YAML;
|
|
143
|
+
|
|
144
|
+
type GetInputAreaFunction = (editor: any) => HTMLTextAreaElement | null;
|
|
145
|
+
|
|
146
|
+
/*
|
|
147
|
+
* Monaco's real focusable control. The wrapper <div> this component returns
|
|
148
|
+
* has no role, and ARIA forbids naming a role=generic element - so every
|
|
149
|
+
* accessibility attribute has to land here instead.
|
|
150
|
+
*/
|
|
151
|
+
const getInputArea: GetInputAreaFunction = (
|
|
152
|
+
editor: any,
|
|
153
|
+
): HTMLTextAreaElement | null => {
|
|
154
|
+
const domNode: HTMLElement | null = editor?.getDomNode?.() || null;
|
|
155
|
+
|
|
156
|
+
if (!domNode) {
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
return domNode.querySelector("textarea");
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
type ApplyAriaFunction = (editor: any) => void;
|
|
164
|
+
|
|
165
|
+
const applyAria: ApplyAriaFunction = (editor: any): void => {
|
|
166
|
+
const inputArea: HTMLTextAreaElement | null = getInputArea(editor);
|
|
167
|
+
|
|
168
|
+
if (!inputArea) {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/*
|
|
173
|
+
* aria-labelledby wins over the aria-label Monaco puts here itself
|
|
174
|
+
* ("Editor content"), so the field's own label names the editor.
|
|
175
|
+
*/
|
|
176
|
+
if (props.ariaLabelledby) {
|
|
177
|
+
inputArea.setAttribute("aria-labelledby", props.ariaLabelledby);
|
|
178
|
+
} else {
|
|
179
|
+
inputArea.removeAttribute("aria-labelledby");
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
if (props.ariaDescribedby) {
|
|
183
|
+
inputArea.setAttribute("aria-describedby", props.ariaDescribedby);
|
|
184
|
+
} else {
|
|
185
|
+
inputArea.removeAttribute("aria-describedby");
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
if (props.ariaInvalid) {
|
|
189
|
+
inputArea.setAttribute("aria-invalid", "true");
|
|
190
|
+
} else {
|
|
191
|
+
inputArea.removeAttribute("aria-invalid");
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
type ApplyModelOptionsFunction = (editor: any) => void;
|
|
196
|
+
|
|
197
|
+
/*
|
|
198
|
+
* Per-model, not per-editor and emphatically not global: a literal tab is
|
|
199
|
+
* illegal as YAML indentation, and Monaco's model defaults are four spaces
|
|
200
|
+
* with indentation detected from the initial content - so a rule pasted in
|
|
201
|
+
* tab-indented would keep emitting tabs the parser rejects.
|
|
202
|
+
*/
|
|
203
|
+
const applyModelOptions: ApplyModelOptionsFunction = (editor: any): void => {
|
|
204
|
+
if (!isYaml) {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
const model: any = editor?.getModel?.();
|
|
209
|
+
|
|
210
|
+
if (!model || typeof model.updateOptions !== "function") {
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
model.updateOptions({ tabSize: 2, insertSpaces: true });
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
/*
|
|
218
|
+
* Markdown is prose, so it follows the caller's preference. YAML is code:
|
|
219
|
+
* red squiggles under every key name in a Sigma rule are pure noise, so
|
|
220
|
+
* spell check is off for it regardless of what the caller asked for.
|
|
221
|
+
*/
|
|
222
|
+
const shouldSpellCheck: boolean = isYaml ? false : !props.disableSpellCheck;
|
|
223
|
+
const managesSpellCheck: boolean = props.type === CodeType.Markdown || isYaml;
|
|
224
|
+
|
|
225
|
+
type ApplySpellCheckFunction = (editor: any) => void;
|
|
226
|
+
|
|
227
|
+
const applySpellCheck: ApplySpellCheckFunction = (editor: any): void => {
|
|
228
|
+
if (!editor || !managesSpellCheck) {
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
const domNode: HTMLElement | null = editor.getDomNode();
|
|
233
|
+
|
|
234
|
+
if (!domNode) {
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
const textareaElement: HTMLTextAreaElement | null =
|
|
239
|
+
domNode.querySelector("textarea");
|
|
240
|
+
|
|
241
|
+
if (textareaElement) {
|
|
242
|
+
textareaElement.spellcheck = shouldSpellCheck;
|
|
243
|
+
}
|
|
244
|
+
};
|
|
245
|
+
|
|
124
246
|
// Handle spell check configuration for Monaco Editor
|
|
125
247
|
useEffect(() => {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
if (domNode) {
|
|
130
|
-
const textareaElement: HTMLTextAreaElement | null =
|
|
131
|
-
domNode.querySelector("textarea");
|
|
132
|
-
if (textareaElement) {
|
|
133
|
-
textareaElement.spellcheck = !props.disableSpellCheck;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
248
|
+
applySpellCheck(editorRef.current);
|
|
249
|
+
applyModelOptions(editorRef.current);
|
|
250
|
+
// eslint-disable-next-line
|
|
137
251
|
}, [props.disableSpellCheck, props.type]);
|
|
138
252
|
|
|
253
|
+
useEffect(() => {
|
|
254
|
+
applyAria(editorRef.current);
|
|
255
|
+
// eslint-disable-next-line
|
|
256
|
+
}, [props.ariaLabelledby, props.ariaDescribedby, props.ariaInvalid]);
|
|
257
|
+
|
|
258
|
+
/*
|
|
259
|
+
* Memoised: @monaco-editor/react calls editor.updateOptions() whenever this
|
|
260
|
+
* object's identity changes, so an inline literal reconfigured the editor on
|
|
261
|
+
* every parent re-render - which for the indentation options below would
|
|
262
|
+
* reset them mid-keystroke.
|
|
263
|
+
*/
|
|
264
|
+
const editorOptions: Record<string, unknown> = useMemo(() => {
|
|
265
|
+
return {
|
|
266
|
+
acceptSuggestionOnCommitCharacter: false,
|
|
267
|
+
acceptSuggestionOnEnter: "off",
|
|
268
|
+
accessibilitySupport: "auto",
|
|
269
|
+
fontSize: 14,
|
|
270
|
+
automaticLayout: true,
|
|
271
|
+
codeLens: false,
|
|
272
|
+
colorDecorators: true,
|
|
273
|
+
contextmenu: false,
|
|
274
|
+
cursorBlinking: "blink",
|
|
275
|
+
tabIndex: props.tabIndex || 0,
|
|
276
|
+
minimap: { enabled: false },
|
|
277
|
+
cursorStyle: "line",
|
|
278
|
+
disableLayerHinting: false,
|
|
279
|
+
disableMonospaceOptimizations: false,
|
|
280
|
+
dragAndDrop: false,
|
|
281
|
+
fixedOverflowWidgets: false,
|
|
282
|
+
folding: true,
|
|
283
|
+
foldingStrategy: "auto",
|
|
284
|
+
fontLigatures: false,
|
|
285
|
+
formatOnPaste: false,
|
|
286
|
+
formatOnType: false,
|
|
287
|
+
|
|
288
|
+
hideCursorInOverviewRuler: false,
|
|
289
|
+
links: true,
|
|
290
|
+
mouseWheelZoom: false,
|
|
291
|
+
multiCursorMergeOverlapping: true,
|
|
292
|
+
multiCursorModifier: "alt",
|
|
293
|
+
overviewRulerBorder: true,
|
|
294
|
+
overviewRulerLanes: 2,
|
|
295
|
+
quickSuggestions: false,
|
|
296
|
+
quickSuggestionsDelay: 100,
|
|
297
|
+
readOnly: props.readOnly || false,
|
|
298
|
+
renderControlCharacters: false,
|
|
299
|
+
/*
|
|
300
|
+
* Long scalars - a URL, a base64 blob, a Sigma `condition:` line - run
|
|
301
|
+
* off the right edge, and with wordWrap off for code there is no other
|
|
302
|
+
* way to reach them. Wrapping YAML instead is not an option: the
|
|
303
|
+
* indentation IS the syntax, and a wrapped line reads as a deeper one.
|
|
304
|
+
*/
|
|
305
|
+
scrollbar: {
|
|
306
|
+
horizontal: isYaml ? "auto" : "hidden",
|
|
307
|
+
},
|
|
308
|
+
renderLineHighlight: "all",
|
|
309
|
+
suggestOnTriggerCharacters: false,
|
|
310
|
+
/*
|
|
311
|
+
* In YAML whitespace is the syntax. Rendering it at the boundaries makes
|
|
312
|
+
* the indentation depth countable and, more importantly, makes a literal
|
|
313
|
+
* tab visible - tabs are illegal as YAML indentation and are otherwise
|
|
314
|
+
* indistinguishable from spaces.
|
|
315
|
+
*/
|
|
316
|
+
renderWhitespace: isYaml ? "boundary" : "none",
|
|
317
|
+
revealHorizontalRightPadding: 30,
|
|
318
|
+
roundedSelection: true,
|
|
319
|
+
rulers: [],
|
|
320
|
+
scrollBeyondLastColumn: 5,
|
|
321
|
+
// Half a short editor as blank runway is wasted space in a form field.
|
|
322
|
+
scrollBeyondLastLine: !isYaml,
|
|
323
|
+
selectOnLineNumbers: true,
|
|
324
|
+
/*
|
|
325
|
+
* Every YAML parse error - ours and the server's - is reported as a
|
|
326
|
+
* line and column, so the gutter is what makes the message actionable.
|
|
327
|
+
*/
|
|
328
|
+
lineNumbers: props.showLineNumbers || isYaml ? "on" : "off",
|
|
329
|
+
selectionClipboard: true,
|
|
330
|
+
selectionHighlight: true,
|
|
331
|
+
showFoldingControls: "mouseover",
|
|
332
|
+
smoothScrolling: false,
|
|
333
|
+
wordBasedSuggestions: "off",
|
|
334
|
+
wordWrap: props.type === CodeType.Markdown ? "on" : "off",
|
|
335
|
+
tabCompletion: "off",
|
|
336
|
+
// The YAML chrome owns the padding, so the editor supplies its own.
|
|
337
|
+
padding: isYaml ? { top: 10, bottom: 10 } : undefined,
|
|
338
|
+
/*
|
|
339
|
+
* tabSize / insertSpaces / detectIndentation deliberately do NOT belong
|
|
340
|
+
* here. They are IGlobalEditorOptions: monaco's standalone editor pipes
|
|
341
|
+
* whatever it is constructed with through updateConfigurationService,
|
|
342
|
+
* which writes every registered `editor.*` key into a PROCESS-WIDE
|
|
343
|
+
* config service - and those three are exactly the ones ModelService
|
|
344
|
+
* reads back, pushing them onto every model on the page. Setting them
|
|
345
|
+
* here would mean the last editor to mount dictates the indentation of
|
|
346
|
+
* all the others. They are applied to this editor's own model instead,
|
|
347
|
+
* in applyModelOptions below.
|
|
348
|
+
*/
|
|
349
|
+
};
|
|
350
|
+
}, [
|
|
351
|
+
props.tabIndex,
|
|
352
|
+
props.readOnly,
|
|
353
|
+
props.showLineNumbers,
|
|
354
|
+
props.type,
|
|
355
|
+
isYaml,
|
|
356
|
+
]);
|
|
357
|
+
|
|
139
358
|
return (
|
|
140
359
|
<div
|
|
141
360
|
data-testid={props.dataTestId}
|
|
@@ -159,7 +378,13 @@ const CodeEditor: FunctionComponent<ComponentProps> = (
|
|
|
159
378
|
<Editor
|
|
160
379
|
theme={theme === Theme.Dark ? "vs-dark" : "light"}
|
|
161
380
|
defaultLanguage={props.type}
|
|
162
|
-
|
|
381
|
+
/*
|
|
382
|
+
* `defaultLanguage` is applied only when the model is created, so a
|
|
383
|
+
* caller that swaps CodeType after mount keeps the old grammar.
|
|
384
|
+
* `language` is the prop that drives setModelLanguage afterwards.
|
|
385
|
+
*/
|
|
386
|
+
language={props.type}
|
|
387
|
+
height={props.height || "30vh"}
|
|
163
388
|
value={value}
|
|
164
389
|
onChange={(code: string | undefined) => {
|
|
165
390
|
if (code === undefined) {
|
|
@@ -176,76 +401,13 @@ const CodeEditor: FunctionComponent<ComponentProps> = (
|
|
|
176
401
|
}}
|
|
177
402
|
onMount={(editor: any, _monaco: any) => {
|
|
178
403
|
editorRef.current = editor;
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
const domNode: HTMLElement | null = editor.getDomNode();
|
|
183
|
-
if (domNode) {
|
|
184
|
-
const textareaElement: HTMLTextAreaElement | null =
|
|
185
|
-
domNode.querySelector("textarea");
|
|
186
|
-
if (textareaElement) {
|
|
187
|
-
textareaElement.spellcheck = !props.disableSpellCheck;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
}
|
|
404
|
+
applySpellCheck(editor);
|
|
405
|
+
applyModelOptions(editor);
|
|
406
|
+
applyAria(editor);
|
|
191
407
|
}}
|
|
192
408
|
defaultValue={value || placeholder || ""}
|
|
193
409
|
className={className}
|
|
194
|
-
options={
|
|
195
|
-
acceptSuggestionOnCommitCharacter: false,
|
|
196
|
-
acceptSuggestionOnEnter: "off",
|
|
197
|
-
accessibilitySupport: "auto",
|
|
198
|
-
fontSize: 14,
|
|
199
|
-
automaticLayout: true,
|
|
200
|
-
codeLens: false,
|
|
201
|
-
colorDecorators: true,
|
|
202
|
-
contextmenu: false,
|
|
203
|
-
cursorBlinking: "blink",
|
|
204
|
-
tabIndex: props.tabIndex || 0,
|
|
205
|
-
minimap: { enabled: false },
|
|
206
|
-
cursorStyle: "line",
|
|
207
|
-
disableLayerHinting: false,
|
|
208
|
-
disableMonospaceOptimizations: false,
|
|
209
|
-
dragAndDrop: false,
|
|
210
|
-
fixedOverflowWidgets: false,
|
|
211
|
-
folding: true,
|
|
212
|
-
foldingStrategy: "auto",
|
|
213
|
-
fontLigatures: false,
|
|
214
|
-
formatOnPaste: false,
|
|
215
|
-
formatOnType: false,
|
|
216
|
-
|
|
217
|
-
hideCursorInOverviewRuler: false,
|
|
218
|
-
links: true,
|
|
219
|
-
mouseWheelZoom: false,
|
|
220
|
-
multiCursorMergeOverlapping: true,
|
|
221
|
-
multiCursorModifier: "alt",
|
|
222
|
-
overviewRulerBorder: true,
|
|
223
|
-
overviewRulerLanes: 2,
|
|
224
|
-
quickSuggestions: false,
|
|
225
|
-
quickSuggestionsDelay: 100,
|
|
226
|
-
readOnly: props.readOnly || false,
|
|
227
|
-
renderControlCharacters: false,
|
|
228
|
-
scrollbar: {
|
|
229
|
-
horizontal: "hidden",
|
|
230
|
-
},
|
|
231
|
-
renderLineHighlight: "all",
|
|
232
|
-
suggestOnTriggerCharacters: false,
|
|
233
|
-
renderWhitespace: "none",
|
|
234
|
-
revealHorizontalRightPadding: 30,
|
|
235
|
-
roundedSelection: true,
|
|
236
|
-
rulers: [],
|
|
237
|
-
scrollBeyondLastColumn: 5,
|
|
238
|
-
scrollBeyondLastLine: true,
|
|
239
|
-
selectOnLineNumbers: true,
|
|
240
|
-
lineNumbers: props.showLineNumbers ? "on" : "off",
|
|
241
|
-
selectionClipboard: true,
|
|
242
|
-
selectionHighlight: true,
|
|
243
|
-
showFoldingControls: "mouseover",
|
|
244
|
-
smoothScrolling: false,
|
|
245
|
-
wordBasedSuggestions: "off",
|
|
246
|
-
wordWrap: props.type === CodeType.Markdown ? "on" : "off",
|
|
247
|
-
tabCompletion: "off",
|
|
248
|
-
}}
|
|
410
|
+
options={editorOptions}
|
|
249
411
|
/>
|
|
250
412
|
{props.error && (
|
|
251
413
|
<p className="mt-1 text-sm text-red-400">{props.error}</p>
|