@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
|
@@ -27,6 +27,7 @@ import Pill from "../Pill/Pill";
|
|
|
27
27
|
import Table from "../Table/Table";
|
|
28
28
|
import FieldType from "../Types/FieldType";
|
|
29
29
|
import ColumnCustomizationModal from "./ColumnCustomizationModal";
|
|
30
|
+
import { getAttributeColumns, getAttributeKeysFromColumnPreference, normalizeAttributeKeys, } from "./AttributeColumns";
|
|
30
31
|
import { applyColumnPreference, buildColumnPreference, fromJSON as columnPreferenceFromJSON, getCustomizableColumns, isEmptyColumnPreference, sanitizeColumnPreference, getColumnIds, toJSON as columnPreferenceToJSON, } from "./ColumnPreference";
|
|
31
32
|
import { CustomFieldsColumnKey } from "./CustomFieldColumns";
|
|
32
33
|
import useCustomFieldColumns from "./useCustomFieldColumns";
|
|
@@ -79,7 +80,7 @@ export var ModalType;
|
|
|
79
80
|
ModalType[ModalType["Edit"] = 1] = "Edit";
|
|
80
81
|
})(ModalType || (ModalType = {}));
|
|
81
82
|
const BaseModelTable = (props) => {
|
|
82
|
-
var _a, _b, _c;
|
|
83
|
+
var _a, _b, _c, _d;
|
|
83
84
|
const { translateValue, translateString } = useTranslateValue();
|
|
84
85
|
const tx = (value) => {
|
|
85
86
|
var _a;
|
|
@@ -148,12 +149,6 @@ const BaseModelTable = (props) => {
|
|
|
148
149
|
const isColumnCustomizationEnabled = Boolean(!props.disableColumnCustomization &&
|
|
149
150
|
props.userPreferencesKey &&
|
|
150
151
|
showAs !== ShowAs.OrderedStatesList);
|
|
151
|
-
const allColumns = useMemo(() => {
|
|
152
|
-
if (customFieldColumns.columns.length === 0) {
|
|
153
|
-
return props.columns || [];
|
|
154
|
-
}
|
|
155
|
-
return [...(props.columns || []), ...customFieldColumns.columns];
|
|
156
|
-
}, [props.columns, customFieldColumns.columns]);
|
|
157
152
|
const readStoredColumnPreference = () => {
|
|
158
153
|
if (!props.userPreferencesKey) {
|
|
159
154
|
return null;
|
|
@@ -165,6 +160,59 @@ const BaseModelTable = (props) => {
|
|
|
165
160
|
};
|
|
166
161
|
const [columnPreference, setColumnPreference] = useState(readStoredColumnPreference);
|
|
167
162
|
const [showColumnCustomizationModal, setShowColumnCustomizationModal] = useState(false);
|
|
163
|
+
/*
|
|
164
|
+
* ---------------------------------------------------------------------
|
|
165
|
+
* Attribute columns
|
|
166
|
+
* ---------------------------------------------------------------------
|
|
167
|
+
*
|
|
168
|
+
* A column per viewer-chosen key inside the model's map column. There is no
|
|
169
|
+
* second store for "which keys did they pick": a column exists precisely
|
|
170
|
+
* when its id is in the stored layout, and the id encodes the key. That is
|
|
171
|
+
* what makes "Reset to default" take them away, a saved TableView bring its
|
|
172
|
+
* own, and the two halves of a layout impossible to desynchronize.
|
|
173
|
+
*
|
|
174
|
+
* Derived from the RAW preference, before sanitizing: sanitizing drops ids
|
|
175
|
+
* that name no current column, and these are only current columns *because*
|
|
176
|
+
* their ids are in there.
|
|
177
|
+
*/
|
|
178
|
+
const attributeColumnKey = useMemo(() => {
|
|
179
|
+
var _a;
|
|
180
|
+
const columnKey = (_a = props.attributeColumnsProps) === null || _a === void 0 ? void 0 : _a.columnKey;
|
|
181
|
+
if (!columnKey || !isColumnCustomizationEnabled) {
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
/*
|
|
185
|
+
* A key that is not a column on the model would make getSelectFromColumns
|
|
186
|
+
* throw and blank the whole table. A misconfigured prop should cost the
|
|
187
|
+
* feature, not the page.
|
|
188
|
+
*/
|
|
189
|
+
return model.hasColumn(columnKey) ? columnKey : null;
|
|
190
|
+
}, [(_b = props.attributeColumnsProps) === null || _b === void 0 ? void 0 : _b.columnKey, isColumnCustomizationEnabled]);
|
|
191
|
+
const declaredColumns = useMemo(() => {
|
|
192
|
+
if (customFieldColumns.columns.length === 0) {
|
|
193
|
+
return props.columns || [];
|
|
194
|
+
}
|
|
195
|
+
return [...(props.columns || []), ...customFieldColumns.columns];
|
|
196
|
+
}, [props.columns, customFieldColumns.columns]);
|
|
197
|
+
const attributeColumns = useMemo(() => {
|
|
198
|
+
if (!attributeColumnKey) {
|
|
199
|
+
return [];
|
|
200
|
+
}
|
|
201
|
+
return getAttributeColumns({
|
|
202
|
+
attributesColumnKey: attributeColumnKey,
|
|
203
|
+
attributeKeys: getAttributeKeysFromColumnPreference({
|
|
204
|
+
preference: columnPreference,
|
|
205
|
+
attributesColumnKey: attributeColumnKey,
|
|
206
|
+
reservedColumnIds: getColumnIds(declaredColumns),
|
|
207
|
+
}),
|
|
208
|
+
});
|
|
209
|
+
}, [attributeColumnKey, columnPreference, declaredColumns]);
|
|
210
|
+
const allColumns = useMemo(() => {
|
|
211
|
+
if (attributeColumns.length === 0) {
|
|
212
|
+
return declaredColumns;
|
|
213
|
+
}
|
|
214
|
+
return [...declaredColumns, ...attributeColumns];
|
|
215
|
+
}, [declaredColumns, attributeColumns]);
|
|
168
216
|
/*
|
|
169
217
|
* Ids are derived over the *whole* declared set, so a column dropping out
|
|
170
218
|
* for lack of permission can never renumber the ones that remain.
|
|
@@ -204,6 +252,12 @@ const BaseModelTable = (props) => {
|
|
|
204
252
|
value: json,
|
|
205
253
|
});
|
|
206
254
|
};
|
|
255
|
+
/*
|
|
256
|
+
* The pool of keys the picker offers. Fetched the first time the picker
|
|
257
|
+
* opens, never on mount: it is a wide scan over the analytics table, and a
|
|
258
|
+
* table nobody customizes should not pay for it on every page load.
|
|
259
|
+
*/
|
|
260
|
+
const [attributeKeyPool, setAttributeKeyPool] = useState({ keys: [], isLoading: false, error: "", hasLoaded: false });
|
|
207
261
|
const [classicTableFilters, setClassicTableFilters] = useState([]);
|
|
208
262
|
const [cardButtons, setCardButtons] = useState([]);
|
|
209
263
|
const [actionButtonSchema, setActionButtonSchema] = useState([]);
|
|
@@ -248,7 +302,7 @@ const BaseModelTable = (props) => {
|
|
|
248
302
|
const urlStateKey = props.disableUrlState
|
|
249
303
|
? undefined
|
|
250
304
|
: props.urlStateKey ||
|
|
251
|
-
((
|
|
305
|
+
((_c = props.saveFilterProps) === null || _c === void 0 ? void 0 : _c.tableId) ||
|
|
252
306
|
props.userPreferencesKey ||
|
|
253
307
|
undefined;
|
|
254
308
|
const initialUrlState = useMemo(() => {
|
|
@@ -1237,6 +1291,17 @@ const BaseModelTable = (props) => {
|
|
|
1237
1291
|
hasPermissionToReadField(CustomFieldsColumnKey)) {
|
|
1238
1292
|
selectFields[CustomFieldsColumnKey] = true;
|
|
1239
1293
|
}
|
|
1294
|
+
/*
|
|
1295
|
+
* Same reasoning for the attribute map column: a column added from the
|
|
1296
|
+
* picker appears without a refetch, so the map it reads has to have been
|
|
1297
|
+
* on the wire since the first request or the new column renders blank
|
|
1298
|
+
* until something else happens to reload the page.
|
|
1299
|
+
*/
|
|
1300
|
+
if (attributeColumnKey &&
|
|
1301
|
+
(hasPermissionToReadField(attributeColumnKey) ||
|
|
1302
|
+
User.isMasterAdmin())) {
|
|
1303
|
+
selectFields[attributeColumnKey] = true;
|
|
1304
|
+
}
|
|
1240
1305
|
const selectMoreFields = props.selectMoreFields
|
|
1241
1306
|
? Object.keys(props.selectMoreFields)
|
|
1242
1307
|
: [];
|
|
@@ -1559,12 +1624,66 @@ const BaseModelTable = (props) => {
|
|
|
1559
1624
|
serializeToTableColumns();
|
|
1560
1625
|
}, [props.columns]);
|
|
1561
1626
|
/*
|
|
1562
|
-
* The viewer changed their layout,
|
|
1563
|
-
*
|
|
1627
|
+
* The viewer changed their layout, the project's custom field definitions
|
|
1628
|
+
* finally arrived, or an attribute column was added or removed.
|
|
1564
1629
|
*/
|
|
1565
1630
|
useEffect(() => {
|
|
1566
1631
|
serializeToTableColumns();
|
|
1567
|
-
}, [effectiveColumnPreference, customFieldColumns.columns]);
|
|
1632
|
+
}, [effectiveColumnPreference, customFieldColumns.columns, attributeColumns]);
|
|
1633
|
+
/*
|
|
1634
|
+
* The attribute key pool is only ever needed by the picker, so it is fetched
|
|
1635
|
+
* when the picker first opens and kept for the rest of the page's life.
|
|
1636
|
+
* A failure costs the "add a column" search box and nothing else — the
|
|
1637
|
+
* columns the viewer already added are rebuilt from their stored layout and
|
|
1638
|
+
* do not depend on this at all.
|
|
1639
|
+
*/
|
|
1640
|
+
useEffect(() => {
|
|
1641
|
+
if (!showColumnCustomizationModal ||
|
|
1642
|
+
!attributeColumnKey ||
|
|
1643
|
+
!props.attributeColumnsProps ||
|
|
1644
|
+
attributeKeyPool.hasLoaded ||
|
|
1645
|
+
attributeKeyPool.isLoading) {
|
|
1646
|
+
return;
|
|
1647
|
+
}
|
|
1648
|
+
const fetchAttributeKeys = props.attributeColumnsProps.fetchAttributeKeys;
|
|
1649
|
+
let isCancelled = false;
|
|
1650
|
+
setAttributeKeyPool({
|
|
1651
|
+
keys: [],
|
|
1652
|
+
isLoading: true,
|
|
1653
|
+
error: "",
|
|
1654
|
+
hasLoaded: false,
|
|
1655
|
+
});
|
|
1656
|
+
fetchAttributeKeys()
|
|
1657
|
+
.then((keys) => {
|
|
1658
|
+
if (isCancelled) {
|
|
1659
|
+
return;
|
|
1660
|
+
}
|
|
1661
|
+
setAttributeKeyPool({
|
|
1662
|
+
keys: normalizeAttributeKeys(keys),
|
|
1663
|
+
isLoading: false,
|
|
1664
|
+
error: "",
|
|
1665
|
+
hasLoaded: true,
|
|
1666
|
+
});
|
|
1667
|
+
})
|
|
1668
|
+
.catch((err) => {
|
|
1669
|
+
if (isCancelled) {
|
|
1670
|
+
return;
|
|
1671
|
+
}
|
|
1672
|
+
setAttributeKeyPool({
|
|
1673
|
+
keys: [],
|
|
1674
|
+
isLoading: false,
|
|
1675
|
+
error: API.getFriendlyMessage(err),
|
|
1676
|
+
/*
|
|
1677
|
+
* Not "loaded": closing and reopening the picker is the only retry
|
|
1678
|
+
* anyone would think to try, so let it be one.
|
|
1679
|
+
*/
|
|
1680
|
+
hasLoaded: false,
|
|
1681
|
+
});
|
|
1682
|
+
});
|
|
1683
|
+
return () => {
|
|
1684
|
+
isCancelled = true;
|
|
1685
|
+
};
|
|
1686
|
+
}, [showColumnCustomizationModal, attributeColumnKey]);
|
|
1568
1687
|
const setActionSchema = () => {
|
|
1569
1688
|
const permissions = PermissionUtil.getAllPermissions();
|
|
1570
1689
|
const actionsSchema = [];
|
|
@@ -2455,9 +2574,9 @@ const BaseModelTable = (props) => {
|
|
|
2455
2574
|
}
|
|
2456
2575
|
return hasPermissionToReadColumn(column) || User.isMasterAdmin();
|
|
2457
2576
|
};
|
|
2458
|
-
const getPickerEntries = (preference) => {
|
|
2577
|
+
const getPickerEntries = (preference, columns) => {
|
|
2459
2578
|
return getCustomizableColumns({
|
|
2460
|
-
columns: allColumns,
|
|
2579
|
+
columns: columns || allColumns,
|
|
2461
2580
|
preference: preference,
|
|
2462
2581
|
}).filter((entry) => {
|
|
2463
2582
|
return isPickableColumn(entry.column);
|
|
@@ -2481,7 +2600,13 @@ const BaseModelTable = (props) => {
|
|
|
2481
2600
|
* would be pinned to the column set of the release they opened it in, and
|
|
2482
2601
|
* columns added later would arrive already stale.
|
|
2483
2602
|
*/
|
|
2484
|
-
|
|
2603
|
+
/*
|
|
2604
|
+
* Over the DECLARED columns only. An attribute column exists because the
|
|
2605
|
+
* viewer added it, so the layout that has none of them is the default one
|
|
2606
|
+
* — otherwise adding a column and then removing it again would leave the
|
|
2607
|
+
* table pinned to a stored layout it no longer differs from.
|
|
2608
|
+
*/
|
|
2609
|
+
const defaultPreference = buildColumnPreference(getPickerEntries(null, declaredColumns));
|
|
2485
2610
|
const isBackToDefault = JSON.stringify(preference) === JSON.stringify(defaultPreference);
|
|
2486
2611
|
/*
|
|
2487
2612
|
* Sorting by a column that is no longer on screen leaves the viewer with
|
|
@@ -2503,11 +2628,48 @@ const BaseModelTable = (props) => {
|
|
|
2503
2628
|
saveColumnPreference(isBackToDefault ? null : preference);
|
|
2504
2629
|
setShowColumnCustomizationModal(false);
|
|
2505
2630
|
};
|
|
2631
|
+
/*
|
|
2632
|
+
* The pool the picker offers, as picker entries rather than model columns,
|
|
2633
|
+
* so the modal can stage one straight into its list. Every one starts
|
|
2634
|
+
* removable — the whole point is that the viewer can take it away again.
|
|
2635
|
+
*/
|
|
2636
|
+
const addableAttributeColumns = useMemo(() => {
|
|
2637
|
+
if (!attributeColumnKey || attributeKeyPool.keys.length === 0) {
|
|
2638
|
+
return [];
|
|
2639
|
+
}
|
|
2640
|
+
return getAttributeColumns({
|
|
2641
|
+
attributesColumnKey: attributeColumnKey,
|
|
2642
|
+
attributeKeys: attributeKeyPool.keys,
|
|
2643
|
+
}).map((column, index) => {
|
|
2644
|
+
return {
|
|
2645
|
+
id: column.id || `${attributeColumnKey}.${index}`,
|
|
2646
|
+
column: column,
|
|
2647
|
+
isVisible: true,
|
|
2648
|
+
isPinned: false,
|
|
2649
|
+
isRemovable: true,
|
|
2650
|
+
};
|
|
2651
|
+
});
|
|
2652
|
+
}, [attributeColumnKey, attributeKeyPool.keys]);
|
|
2653
|
+
const getAddableColumnsConfig = () => {
|
|
2654
|
+
if (!attributeColumnKey || !props.attributeColumnsProps) {
|
|
2655
|
+
return undefined;
|
|
2656
|
+
}
|
|
2657
|
+
return {
|
|
2658
|
+
title: props.attributeColumnsProps.title || tx("Add Attribute Column"),
|
|
2659
|
+
description: props.attributeColumnsProps.description ||
|
|
2660
|
+
tx("Attributes vary per event, so they are not listed above. Search for one to add it as a column."),
|
|
2661
|
+
placeholder: props.attributeColumnsProps.placeholder || "Search...",
|
|
2662
|
+
emptyMessage: props.attributeColumnsProps.emptyMessage,
|
|
2663
|
+
isLoading: attributeKeyPool.isLoading,
|
|
2664
|
+
errorMessage: attributeKeyPool.error,
|
|
2665
|
+
columns: addableAttributeColumns,
|
|
2666
|
+
};
|
|
2667
|
+
};
|
|
2506
2668
|
const getColumnCustomizationModal = () => {
|
|
2507
2669
|
if (!showColumnCustomizationModal || !isColumnCustomizationEnabled) {
|
|
2508
2670
|
return null;
|
|
2509
2671
|
}
|
|
2510
|
-
return (React.createElement(ColumnCustomizationModal, { columns: getPickerEntries(effectiveColumnPreference), isDefaultLayout: isEmptyColumnPreference(effectiveColumnPreference), title: tx("Customize Columns"), onSave: onColumnCustomizationSave, onReset: () => {
|
|
2672
|
+
return (React.createElement(ColumnCustomizationModal, { columns: getPickerEntries(effectiveColumnPreference), addableColumns: getAddableColumnsConfig(), isDefaultLayout: isEmptyColumnPreference(effectiveColumnPreference), title: tx("Customize Columns"), onSave: onColumnCustomizationSave, onReset: () => {
|
|
2511
2673
|
saveColumnPreference(null);
|
|
2512
2674
|
setShowColumnCustomizationModal(false);
|
|
2513
2675
|
}, onClose: () => {
|
|
@@ -2569,9 +2731,9 @@ const BaseModelTable = (props) => {
|
|
|
2569
2731
|
? new ObjectID(currentEditableItem["_id"])
|
|
2570
2732
|
: undefined,
|
|
2571
2733
|
})) : (React.createElement(React.Fragment, null)),
|
|
2572
|
-
showDeleteConfirmModal && (React.createElement(ConfirmModal, { title: `Delete ${props.singularName || model.singularName}`, description: `Are you sure you want to delete this ${(
|
|
2734
|
+
showDeleteConfirmModal && (React.createElement(ConfirmModal, { title: `Delete ${props.singularName || model.singularName}`, description: `Are you sure you want to delete this ${(_d = (props.singularName ||
|
|
2573
2735
|
model.singularName ||
|
|
2574
|
-
"item")) === null ||
|
|
2736
|
+
"item")) === null || _d === void 0 ? void 0 : _d.toLowerCase()}?`, onClose: () => {
|
|
2575
2737
|
setShowDeleteConfirmModal(false);
|
|
2576
2738
|
}, submitButtonText: "Delete", onSubmit: async () => {
|
|
2577
2739
|
if (currentDeleteableItem && currentDeleteableItem["_id"]) {
|